Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
545823a
Add application password uuid to test_credentials
oguzkocer Jul 2, 2024
b9452c1
Implement retrieve application passwords
oguzkocer Jul 2, 2024
0ecd9bf
Implement create application passwords
oguzkocer Jul 2, 2024
b478f11
Implement delete all application passwords
oguzkocer Jul 2, 2024
301321e
Implement delete single application password
oguzkocer Jul 2, 2024
c749d45
Add serial_test
oguzkocer Jul 3, 2024
5f3fd16
Implement update application password
oguzkocer Jul 3, 2024
c7c4e8d
Add filter retrieve integration tests for application passwords
oguzkocer Jul 3, 2024
a522c10
Add cannot list & cannot read application password integration tests
oguzkocer Jul 3, 2024
16c5aa5
Implement create_application_password_err_cannot_create_application_p…
oguzkocer Jul 3, 2024
dc631f9
Add a way to run wp-cli commands from Rust
oguzkocer Jul 3, 2024
5b8acbd
Delete application password integration tests
oguzkocer Jul 3, 2024
9de5c47
Retrieve application password cannot instrospect error tests
oguzkocer Jul 3, 2024
115655d
Add integration test for ApplicationPasswordNotFound
oguzkocer Jul 3, 2024
4997167
Add ApplicationPasswordsEndpointTest in Kotlin wrapper
oguzkocer Jul 3, 2024
df46c50
Test password sparse field for application passwords
oguzkocer Jul 3, 2024
10ae993
Update temporary test_credentials generated by Buildkite
oguzkocer Jul 3, 2024
2f8e84a
Add Swift compatibility for Application Passwords
jkmassel Jul 4, 2024
13b8899
Add Application Passwords to Swift Example App
jkmassel Jul 4, 2024
f6415e6
Add Swift library support for date parsing
jkmassel Jul 4, 2024
b9f329e
Fix sample project path issues
jkmassel Jul 4, 2024
20edfec
lintfix
jkmassel Jul 4, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ steps:
echo "--- 🧹 Linting"

# This is a temporary step until we implement a more graceful way to handle missing credentials
printf "site_url\nadmin_username\nadmin_password\nsubscriber_username\nsubscriber_password\n" > test_credentials
printf "site_url\nadmin_username\nadmin_password\nadmin_password_uuid\nsubscriber_username\nsubscriber_password\nsubscriber_password_uuid\n" > test_credentials

cd ./native/kotlin
./gradlew detektMain detektTest
Expand Down
41 changes: 41 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -225,3 +225,6 @@ setup-rust-android-targets:
i686-linux-android \
armv7-linux-androideabi \
aarch64-linux-android

run-wp-cli-command:
docker exec -it wordpress /bin/bash -c "wp --allow-root $(ARGS)"
10 changes: 8 additions & 2 deletions native/kotlin/api/android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ android {
buildConfigField("String", "TEST_SITE_URL", "\"${it.siteUrl}\"")
buildConfigField("String", "TEST_ADMIN_USERNAME", "\"${it.adminUsername}\"")
buildConfigField("String", "TEST_ADMIN_PASSWORD", "\"${it.adminPassword}\"")
buildConfigField("String", "TEST_ADMIN_PASSWORD_UUID", "\"${it.adminPasswordUuid}\"")
buildConfigField(
"String",
"TEST_SUBSCRIBER_USERNAME",
Expand All @@ -43,6 +44,7 @@ android {
"TEST_SUBSCRIBER_PASSWORD",
"\"${it.subscriberPassword}\""
)
buildConfigField("String", "TEST_SUBSCRIBER_PASSWORD_UUID", "\"${it.subscriberPasswordUuid}\"")
}
}
}
Expand Down Expand Up @@ -163,15 +165,19 @@ fun readTestCredentials(): TestCredentials? {
siteUrl = siteUrl,
adminUsername = lines[1],
adminPassword = lines[2],
subscriberUsername = lines[3],
subscriberPassword = lines[4]
adminPasswordUuid = lines[3],
subscriberUsername = lines[4],
subscriberPassword = lines[5],
subscriberPasswordUuid = lines[6]
)
}

data class TestCredentials(
val siteUrl: String,
val adminUsername: String,
val adminPassword: String,
val adminPasswordUuid: String,
val subscriberUsername: String,
val subscriberPassword: String,
val subscriberPasswordUuid: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package rs.wordpress.api.kotlin

import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import uniffi.wp_api.ApplicationPasswordUuid
import uniffi.wp_api.wpAuthenticationFromUsernameAndPassword
import kotlin.test.assertEquals

class ApplicationPasswordsEndpointTest {
private val testCredentials = TestCredentials.INSTANCE
private val siteUrl = testCredentials.siteUrl
private val authentication = wpAuthenticationFromUsernameAndPassword(
username = testCredentials.adminUsername, password = testCredentials.adminPassword
)
private val client = WpApiClient(siteUrl, authentication)

@Test
fun testApplicationPasswordListRequest() = runTest {
val result = client.request { requestBuilder ->
requestBuilder.applicationPasswords().listWithEditContext(FIRST_USER_ID)
}
assert(result is WpRequestSuccess)
val applicationPasswordList = (result as WpRequestSuccess).data
assertEquals(
ApplicationPasswordUuid(testCredentials.adminPasswordUuid),
applicationPasswordList.first().uuid
)
}

@Test
fun testApplicationPasswordRetrieveRequest() = runTest {
val uuid = ApplicationPasswordUuid(testCredentials.adminPasswordUuid)
val result = client.request { requestBuilder ->
requestBuilder.applicationPasswords().retrieveWithEditContext(FIRST_USER_ID, uuid)
}
assert(result is WpRequestSuccess)
val applicationPasswordList = (result as WpRequestSuccess).data
assertEquals(uuid, applicationPasswordList.uuid)
}

@Test
fun testApplicationPasswordRetrieveCurrentRequest() = runTest {
val result = client.request { requestBuilder ->
requestBuilder.applicationPasswords().retrieveCurrentWithEditContext(FIRST_USER_ID)
}
assert(result is WpRequestSuccess)
val applicationPasswordList = (result as WpRequestSuccess).data
assertEquals(
ApplicationPasswordUuid(testCredentials.adminPasswordUuid),
applicationPasswordList.uuid
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ data class TestCredentials(
val siteUrl: String,
val adminUsername: String,
val adminPassword: String,
val adminPasswordUuid: String,
val subscriberUsername: String,
val subscriberPassword: String
val subscriberPassword: String,
val subscriberPasswordUuid: String
) {
companion object {
val INSTANCE: TestCredentials by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
Expand All @@ -22,8 +24,10 @@ data class TestCredentials(
siteUrl = lineList[0],
adminUsername = lineList[1],
adminPassword = lineList[2],
subscriberUsername = lineList[3],
subscriberPassword = lineList[4],
adminPasswordUuid = lineList[3],
subscriberUsername = lineList[4],
subscriberPassword = lineList[5],
subscriberPasswordUuid = lineList[6],
)
}
}
Expand Down
64 changes: 46 additions & 18 deletions native/swift/Example/Example.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,31 @@
objects = {

/* Begin PBXBuildFile section */
242D648E2C3602C1007CA96C /* ListViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 242D648D2C3602C1007CA96C /* ListViewData.swift */; };
242D64922C360687007CA96C /* RootListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 242D64912C360687007CA96C /* RootListView.swift */; };
242D64942C3608C6007CA96C /* ListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 242D64932C3608C6007CA96C /* ListView.swift */; };
242D64962C360EB3007CA96C /* WordPressAPI+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 242D64952C360EB3007CA96C /* WordPressAPI+Extensions.swift */; };
2479BF812B621CB60014A01D /* ExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2479BF802B621CB60014A01D /* ExampleApp.swift */; };
2479BF832B621CB60014A01D /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2479BF822B621CB60014A01D /* ContentView.swift */; };
2479BF852B621CB70014A01D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2479BF842B621CB70014A01D /* Assets.xcassets */; };
2479BF892B621CB70014A01D /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2479BF882B621CB70014A01D /* Preview Assets.xcassets */; };
2479BF912B621CCA0014A01D /* WordPressAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 2479BF902B621CCA0014A01D /* WordPressAPI */; };
2479BF932B621E9B0014A01D /* UserListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2479BF922B621E9B0014A01D /* UserListViewModel.swift */; };
2479BF932B621E9B0014A01D /* ListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2479BF922B621E9B0014A01D /* ListViewModel.swift */; };
24A3C32F2BA8F96F00162AD1 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A3C32E2BA8F96F00162AD1 /* LoginView.swift */; };
24A3C3362BAA874C00162AD1 /* LoginManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A3C3352BAA874C00162AD1 /* LoginManager.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
242D648D2C3602C1007CA96C /* ListViewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListViewData.swift; sourceTree = "<group>"; };
242D64912C360687007CA96C /* RootListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootListView.swift; sourceTree = "<group>"; };
242D64932C3608C6007CA96C /* ListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListView.swift; sourceTree = "<group>"; };
242D64952C360EB3007CA96C /* WordPressAPI+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WordPressAPI+Extensions.swift"; sourceTree = "<group>"; };
2479BF7D2B621CB60014A01D /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
2479BF802B621CB60014A01D /* ExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleApp.swift; sourceTree = "<group>"; };
2479BF822B621CB60014A01D /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
2479BF842B621CB70014A01D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
2479BF882B621CB70014A01D /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
2479BF922B621E9B0014A01D /* UserListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserListViewModel.swift; sourceTree = "<group>"; };
2479BF922B621E9B0014A01D /* ListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListViewModel.swift; sourceTree = "<group>"; };
24A3C32E2BA8F96F00162AD1 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; };
24A3C3342BAA45B800162AD1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
24A3C3342BAA45B800162AD1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
24A3C3352BAA874C00162AD1 /* LoginManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginManager.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

Expand All @@ -41,6 +47,26 @@
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
242D64972C363960007CA96C /* UI */ = {
isa = PBXGroup;
children = (
2479BF872B621CB70014A01D /* Preview Content */,
242D64932C3608C6007CA96C /* ListView.swift */,
242D64912C360687007CA96C /* RootListView.swift */,
24A3C32E2BA8F96F00162AD1 /* LoginView.swift */,
);
path = UI;
sourceTree = "<group>";
};
242D64982C363996007CA96C /* Resources */ = {
isa = PBXGroup;
children = (
24A3C3342BAA45B800162AD1 /* Info.plist */,
2479BF842B621CB70014A01D /* Assets.xcassets */,
);
path = Resources;
sourceTree = "<group>";
};
2479BF742B621CB60014A01D = {
isa = PBXGroup;
children = (
Expand All @@ -60,14 +86,13 @@
2479BF7F2B621CB60014A01D /* Example */ = {
isa = PBXGroup;
children = (
24A3C3342BAA45B800162AD1 /* Info.plist */,
242D64972C363960007CA96C /* UI */,
242D64982C363996007CA96C /* Resources */,
2479BF802B621CB60014A01D /* ExampleApp.swift */,
24A3C32E2BA8F96F00162AD1 /* LoginView.swift */,
2479BF822B621CB60014A01D /* ContentView.swift */,
2479BF842B621CB70014A01D /* Assets.xcassets */,
2479BF872B621CB70014A01D /* Preview Content */,
2479BF922B621E9B0014A01D /* UserListViewModel.swift */,
2479BF922B621E9B0014A01D /* ListViewModel.swift */,
24A3C3352BAA874C00162AD1 /* LoginManager.swift */,
242D648D2C3602C1007CA96C /* ListViewData.swift */,
242D64952C360EB3007CA96C /* WordPressAPI+Extensions.swift */,
);
path = Example;
sourceTree = "<group>";
Expand Down Expand Up @@ -156,11 +181,14 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2479BF832B621CB60014A01D /* ContentView.swift in Sources */,
242D64922C360687007CA96C /* RootListView.swift in Sources */,
2479BF812B621CB60014A01D /* ExampleApp.swift in Sources */,
24A3C32F2BA8F96F00162AD1 /* LoginView.swift in Sources */,
2479BF932B621E9B0014A01D /* UserListViewModel.swift in Sources */,
2479BF932B621E9B0014A01D /* ListViewModel.swift in Sources */,
24A3C3362BAA874C00162AD1 /* LoginManager.swift in Sources */,
242D64962C360EB3007CA96C /* WordPressAPI+Extensions.swift in Sources */,
242D648E2C3602C1007CA96C /* ListViewData.swift in Sources */,
242D64942C3608C6007CA96C /* ListView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -288,10 +316,10 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Example/Preview Content\"";
DEVELOPMENT_ASSET_PATHS = "\"Example/UI/Preview Content\"";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Example/Info.plist;
INFOPLIST_FILE = Example/Resources/Info.plist;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
Expand Down Expand Up @@ -326,10 +354,10 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Example/Preview Content\"";
DEVELOPMENT_ASSET_PATHS = "\"Example/UI/Preview Content\"";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Example/Info.plist;
INFOPLIST_FILE = Example/Resources/Info.plist;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
Expand Down Expand Up @@ -390,7 +418,7 @@
/* Begin XCSwiftPackageProductDependency section */
2479BF902B621CCA0014A01D /* WordPressAPI */ = {
isa = XCSwiftPackageProductDependency;
productName = "WordPressAPI";
productName = WordPressAPI;
};
/* End XCSwiftPackageProductDependency section */
};
Expand Down
Loading