From 99b9a3eb32e5cb39142f28a1175ed4543fb46e3e Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 12 Jun 2024 14:13:57 -0400 Subject: [PATCH 1/4] Replace &Option with &T for user & plugin params --- .../src/request/endpoint/plugins_endpoint.rs | 14 ++++----- wp_api/src/request/endpoint/users_endpoint.rs | 30 ++++++++++++++----- wp_api/src/request/plugins_request_builder.rs | 16 +++++----- wp_api/src/request/users_request_builder.rs | 16 +++++----- wp_api/tests/test_plugins_err.rs | 4 +-- wp_api/tests/test_plugins_immut.rs | 8 ++--- wp_api/tests/test_users_err.rs | 16 +++++----- wp_api/tests/test_users_immut.rs | 20 ++++++------- 8 files changed, 69 insertions(+), 55 deletions(-) diff --git a/wp_api/src/request/endpoint/plugins_endpoint.rs b/wp_api/src/request/endpoint/plugins_endpoint.rs index 3288bded6..00277f13a 100644 --- a/wp_api/src/request/endpoint/plugins_endpoint.rs +++ b/wp_api/src/request/endpoint/plugins_endpoint.rs @@ -24,20 +24,18 @@ impl PluginsEndpoint { self.plugins_url_with_slug(plugin).into() } - pub fn list(&self, context: WpContext, params: Option<&PluginListParams>) -> ApiEndpointUrl { + pub fn list(&self, context: WpContext, params: &PluginListParams) -> ApiEndpointUrl { let mut url = self.plugins_base_url(); url.query_pairs_mut() .append_pair("context", context.as_str()); - if let Some(params) = params { - url.query_pairs_mut().extend_pairs(params.query_pairs()); - } + url.query_pairs_mut().extend_pairs(params.query_pairs()); url.into() } pub fn filter_list( &self, context: WpContext, - params: Option<&PluginListParams>, + params: &PluginListParams, fields: &[SparsePluginField], ) -> ApiEndpointUrl { self.list(context, params) @@ -112,6 +110,7 @@ mod tests { } #[rstest] + #[case(WpContext::Edit, PluginListParams::default(), "/plugins?context=edit")] #[case(WpContext::Edit, generate!(PluginListParams, (search, Some("foo".to_string()))), "/plugins?context=edit&search=foo")] #[case(WpContext::Embed, generate!(PluginListParams, (status, Some(PluginStatus::Active))), "/plugins?context=embed&status=active")] #[case(WpContext::View, generate!(PluginListParams, (search, Some("foo".to_string())), (status, Some(PluginStatus::Inactive))), "/plugins?context=view&search=foo&status=inactive")] @@ -121,10 +120,11 @@ mod tests { #[case] params: PluginListParams, #[case] expected_path: &str, ) { - validate_endpoint(plugins_endpoint.list(context, Some(¶ms)), expected_path); + validate_endpoint(plugins_endpoint.list(context, ¶ms), expected_path); } #[rstest] + #[case(WpContext::Edit, PluginListParams::default(), &[], "/plugins?context=edit&_fields=")] #[case( WpContext::Edit, generate!(PluginListParams, (search, Some("foo".to_string()))), @@ -157,7 +157,7 @@ mod tests { #[case] expected_path: &str, ) { validate_endpoint( - plugins_endpoint.filter_list(context, Some(¶ms), fields), + plugins_endpoint.filter_list(context, ¶ms, fields), expected_path, ); } diff --git a/wp_api/src/request/endpoint/users_endpoint.rs b/wp_api/src/request/endpoint/users_endpoint.rs index 83938775c..489e42632 100644 --- a/wp_api/src/request/endpoint/users_endpoint.rs +++ b/wp_api/src/request/endpoint/users_endpoint.rs @@ -32,20 +32,18 @@ impl UsersEndpoint { url.into() } - pub fn list(&self, context: WpContext, params: Option<&UserListParams>) -> ApiEndpointUrl { + pub fn list(&self, context: WpContext, params: &UserListParams) -> ApiEndpointUrl { let mut url = self.api_base_url.by_appending("users"); url.query_pairs_mut() .append_pair("context", context.as_str()); - if let Some(params) = params { - url.query_pairs_mut().extend_pairs(params.query_pairs()); - } + url.query_pairs_mut().extend_pairs(params.query_pairs()); url.into() } pub fn filter_list( &self, context: WpContext, - params: Option<&UserListParams>, + params: &UserListParams, fields: &[SparseUserField], ) -> ApiEndpointUrl { self.list(context, params) @@ -144,7 +142,15 @@ mod tests { #[rstest] fn list_users(users_endpoint: UsersEndpoint) { validate_endpoint( - users_endpoint.list(WpContext::Edit, None), + users_endpoint.list(WpContext::Edit, &UserListParams::default()), + "/users?context=edit", + ); + } + + #[rstest] + fn list_users_default_params_empty_fields(users_endpoint: UsersEndpoint) { + validate_endpoint( + users_endpoint.list(WpContext::Edit, &UserListParams::default()), "/users?context=edit", ); } @@ -167,11 +173,19 @@ mod tests { has_published_posts: Some(WpApiParamUsersHasPublishedPosts::True), }; validate_endpoint( - users_endpoint.list(WpContext::Edit, Some(¶ms)), + users_endpoint.list(WpContext::Edit, ¶ms), "/users?context=edit&page=2&per_page=60&search=foo&slug=bar%2Cbaz&has_published_posts=true", ); } + #[rstest] + fn filter_list_users_default_params_empty_fields(users_endpoint: UsersEndpoint) { + validate_endpoint( + users_endpoint.filter_list(WpContext::Edit, &UserListParams::default(), &[]), + "/users?context=edit&_fields=", + ); + } + #[rstest] fn filter_list_users_with_params(users_endpoint: UsersEndpoint) { let params = UserListParams { @@ -193,7 +207,7 @@ mod tests { ])), }; validate_endpoint( - users_endpoint.filter_list(WpContext::Edit, Some(¶ms), &[SparseUserField::Name, SparseUserField::Email]), + users_endpoint.filter_list(WpContext::Edit, ¶ms, &[SparseUserField::Name, SparseUserField::Email]), "/users?context=edit&page=2&per_page=60&search=foo&slug=bar%2Cbaz&has_published_posts=post%2Cpage&_fields=name%2Cemail", ); } diff --git a/wp_api/src/request/plugins_request_builder.rs b/wp_api/src/request/plugins_request_builder.rs index 86df8c622..1a66b37f4 100644 --- a/wp_api/src/request/plugins_request_builder.rs +++ b/wp_api/src/request/plugins_request_builder.rs @@ -30,39 +30,39 @@ impl PluginsRequestBuilder { impl PluginsRequestBuilder { pub async fn list_with_edit_context( &self, - params: &Option, // UniFFI doesn't support Option<&T> + params: &PluginListParams, ) -> Result, WpApiError> { self.request_builder - .get(self.endpoint.list(WpContext::Edit, params.as_ref())) + .get(self.endpoint.list(WpContext::Edit, params)) .await } pub async fn list_with_embed_context( &self, - params: &Option, // UniFFI doesn't support Option<&T> + params: &PluginListParams, ) -> Result, WpApiError> { self.request_builder - .get(self.endpoint.list(WpContext::Embed, params.as_ref())) + .get(self.endpoint.list(WpContext::Embed, params)) .await } pub async fn list_with_view_context( &self, - params: &Option, // UniFFI doesn't support Option<&T> + params: &PluginListParams, ) -> Result, WpApiError> { self.request_builder - .get(self.endpoint.list(WpContext::View, params.as_ref())) + .get(self.endpoint.list(WpContext::View, params)) .await } pub async fn filter_list( &self, context: WpContext, - params: &Option, // UniFFI doesn't support Option<&T> + params: &PluginListParams, fields: &[SparsePluginField], ) -> Result, WpApiError> { self.request_builder - .get(self.endpoint.filter_list(context, params.as_ref(), fields)) + .get(self.endpoint.filter_list(context, params, fields)) .await } diff --git a/wp_api/src/request/users_request_builder.rs b/wp_api/src/request/users_request_builder.rs index 4aa14eed6..0e931810a 100644 --- a/wp_api/src/request/users_request_builder.rs +++ b/wp_api/src/request/users_request_builder.rs @@ -30,39 +30,39 @@ impl UsersRequestBuilder { impl UsersRequestBuilder { pub async fn list_with_edit_context( &self, - params: &Option, // UniFFI doesn't support Option<&T> + params: &UserListParams, ) -> Result, WpApiError> { self.request_builder - .get(self.endpoint.list(WpContext::Edit, params.as_ref())) + .get(self.endpoint.list(WpContext::Edit, params)) .await } pub async fn list_with_embed_context( &self, - params: &Option, // UniFFI doesn't support Option<&T> + params: &UserListParams, ) -> Result, WpApiError> { self.request_builder - .get(self.endpoint.list(WpContext::Embed, params.as_ref())) + .get(self.endpoint.list(WpContext::Embed, params)) .await } pub async fn list_with_view_context( &self, - params: &Option, // UniFFI doesn't support Option<&T> + params: &UserListParams, ) -> Result, WpApiError> { self.request_builder - .get(self.endpoint.list(WpContext::View, params.as_ref())) + .get(self.endpoint.list(WpContext::View, params)) .await } pub async fn filter_list( &self, context: WpContext, - params: &Option, // UniFFI doesn't support Option<&T> + params: &UserListParams, fields: &[SparseUserField], ) -> Result, WpApiError> { self.request_builder - .get(self.endpoint.filter_list(context, params.as_ref(), fields)) + .get(self.endpoint.filter_list(context, ¶ms, fields)) .await } diff --git a/wp_api/tests/test_plugins_err.rs b/wp_api/tests/test_plugins_err.rs index 64d087204..4055cd254 100644 --- a/wp_api/tests/test_plugins_err.rs +++ b/wp_api/tests/test_plugins_err.rs @@ -1,4 +1,4 @@ -use wp_api::plugins::{PluginCreateParams, PluginStatus, PluginUpdateParams}; +use wp_api::plugins::{PluginCreateParams, PluginListParams, PluginStatus, PluginUpdateParams}; use wp_api::WpRestErrorCode; use crate::integration_test_common::{ @@ -33,7 +33,7 @@ async fn delete_plugin_err_cannot_delete_active_plugin() { async fn list_plugins_err_cannot_view_plugins() { request_builder_as_subscriber() .plugins() - .list_with_edit_context(&None) + .list_with_edit_context(&PluginListParams::default()) .await .assert_wp_error(WpRestErrorCode::CannotViewPlugins); } diff --git a/wp_api/tests/test_plugins_immut.rs b/wp_api/tests/test_plugins_immut.rs index 2285c95f6..d00af11c3 100644 --- a/wp_api/tests/test_plugins_immut.rs +++ b/wp_api/tests/test_plugins_immut.rs @@ -25,7 +25,7 @@ async fn filter_plugins( ) { request_builder() .plugins() - .filter_list(WpContext::Edit, &Some(params), fields) + .filter_list(WpContext::Edit, ¶ms, fields) .await .assert_response() .iter() @@ -61,21 +61,21 @@ async fn list_plugins( WpContext::Edit => { request_builder() .plugins() - .list_with_edit_context(&Some(params)) + .list_with_edit_context(¶ms) .await .assert_response(); } WpContext::Embed => { request_builder() .plugins() - .list_with_embed_context(&Some(params)) + .list_with_embed_context(¶ms) .await .assert_response(); } WpContext::View => { request_builder() .plugins() - .list_with_view_context(&Some(params)) + .list_with_view_context(¶ms) .await .assert_response(); } diff --git a/wp_api/tests/test_users_err.rs b/wp_api/tests/test_users_err.rs index 70aa7d93f..05c9b57a6 100644 --- a/wp_api/tests/test_users_err.rs +++ b/wp_api/tests/test_users_err.rs @@ -68,7 +68,7 @@ async fn delete_current_user_err_user_invalid_reassign() { async fn list_users_err_forbidden_context() { request_builder_as_subscriber() .users() - .list_with_edit_context(&None) + .list_with_edit_context(&UserListParams::default()) .await .assert_wp_error(WpRestErrorCode::ForbiddenContext); } @@ -81,7 +81,7 @@ async fn list_users_err_forbidden_orderby_email() { }; request_builder_as_subscriber() .users() - .list_with_view_context(&Some(params)) + .list_with_view_context(¶ms) .await .assert_wp_error(WpRestErrorCode::ForbiddenOrderBy); } @@ -94,7 +94,7 @@ async fn list_users_err_forbidden_who() { }; request_builder_as_subscriber() .users() - .list_with_view_context(&Some(params)) + .list_with_view_context(¶ms) .await .assert_wp_error(WpRestErrorCode::ForbiddenWho); } @@ -107,7 +107,7 @@ async fn list_users_with_capabilities_err_user_cannot_view() { }; request_builder_as_subscriber() .users() - .list_with_edit_context(&Some(params)) + .list_with_edit_context(¶ms) .await .assert_wp_error(WpRestErrorCode::UserCannotView); } @@ -120,7 +120,7 @@ async fn list_users_with_roles_err_user_cannot_view() { }; request_builder_as_subscriber() .users() - .list_with_edit_context(&Some(params)) + .list_with_edit_context(¶ms) .await .assert_wp_error(WpRestErrorCode::UserCannotView); } @@ -133,7 +133,7 @@ async fn list_users_orderby_registered_date_err_forbidden_orderby() { }; request_builder_as_subscriber() .users() - .list_with_view_context(&Some(params)) + .list_with_view_context(¶ms) .await .assert_wp_error(WpRestErrorCode::ForbiddenOrderBy); } @@ -142,12 +142,12 @@ async fn list_users_orderby_registered_date_err_forbidden_orderby() { async fn list_users_has_published_posts_err_invalid_param() { request_builder() .users() - .list_with_edit_context(&Some(UserListParams { + .list_with_edit_context(&UserListParams { has_published_posts: Some(WpApiParamUsersHasPublishedPosts::PostTypes(vec![ "foo".to_string() ])), ..Default::default() - })) + }) .await .assert_wp_error(WpRestErrorCode::InvalidParam); } diff --git a/wp_api/tests/test_users_immut.rs b/wp_api/tests/test_users_immut.rs index 6f2ac0818..23ffa144d 100644 --- a/wp_api/tests/test_users_immut.rs +++ b/wp_api/tests/test_users_immut.rs @@ -20,7 +20,7 @@ pub mod integration_test_common; async fn filter_users(#[case] fields: &[SparseUserField]) { request_builder() .users() - .filter_list(WpContext::Edit, &None, fields) + .filter_list(WpContext::Edit, &UserListParams::default(), fields) .await .assert_response() .iter() @@ -54,7 +54,7 @@ async fn filter_retrieve_current_user(#[case] fields: &[SparseUserField]) { async fn list_users_with_edit_context(#[case] params: UserListParams) { request_builder() .users() - .list_with_edit_context(&Some(params)) + .list_with_edit_context(¶ms) .await .assert_response(); } @@ -64,7 +64,7 @@ async fn list_users_with_edit_context(#[case] params: UserListParams) { async fn list_users_with_embed_context(#[case] params: UserListParams) { request_builder() .users() - .list_with_embed_context(&Some(params)) + .list_with_embed_context(¶ms) .await .assert_response(); } @@ -74,7 +74,7 @@ async fn list_users_with_embed_context(#[case] params: UserListParams) { async fn list_users_with_view_context(#[case] params: UserListParams) { request_builder() .users() - .list_with_view_context(&Some(params)) + .list_with_view_context(¶ms) .await .assert_response(); } @@ -87,10 +87,10 @@ async fn list_users_with_edit_context_has_published_posts( ) { request_builder() .users() - .list_with_edit_context(&Some(UserListParams { + .list_with_edit_context(&UserListParams { has_published_posts, ..Default::default() - })) + }) .await .assert_response(); } @@ -103,10 +103,10 @@ async fn list_users_with_embed_context_has_published_posts( ) { request_builder() .users() - .list_with_embed_context(&Some(UserListParams { + .list_with_embed_context(&UserListParams { has_published_posts, ..Default::default() - })) + }) .await .assert_response(); } @@ -119,10 +119,10 @@ async fn list_users_with_view_context_has_published_posts( ) { request_builder() .users() - .list_with_view_context(&Some(UserListParams { + .list_with_view_context(&UserListParams { has_published_posts, ..Default::default() - })) + }) .await .assert_response(); } From 06e253ab52c7554aabaeee44ce1c57b962284362 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 12 Jun 2024 14:14:18 -0400 Subject: [PATCH 2/4] Add integration tests for empty fields for user & plugin filter list --- wp_api/tests/test_plugins_immut.rs | 27 +++++++++++-------- wp_api/tests/test_users_immut.rs | 43 +++++++++++++++--------------- 2 files changed, 37 insertions(+), 33 deletions(-) diff --git a/wp_api/tests/test_plugins_immut.rs b/wp_api/tests/test_plugins_immut.rs index d00af11c3..8d308210e 100644 --- a/wp_api/tests/test_plugins_immut.rs +++ b/wp_api/tests/test_plugins_immut.rs @@ -126,55 +126,60 @@ async fn retrieve_plugin( } fn validate_sparse_plugin_fields(plugin: &SparsePlugin, fields: &[SparsePluginField]) { + let field_included = |field| { + // If "fields" is empty the server will return all fields + fields.is_empty() || fields.contains(&field) + }; assert_eq!( plugin.author.is_some(), - fields.contains(&SparsePluginField::Author) + field_included(SparsePluginField::Author) ); assert_eq!( plugin.author.is_some(), - fields.contains(&SparsePluginField::Author) + field_included(SparsePluginField::Author) ); assert_eq!( plugin.description.is_some(), - fields.contains(&SparsePluginField::Description) + field_included(SparsePluginField::Description) ); assert_eq!( plugin.name.is_some(), - fields.contains(&SparsePluginField::Name) + field_included(SparsePluginField::Name) ); assert_eq!( plugin.network_only.is_some(), - fields.contains(&SparsePluginField::NetworkOnly) + field_included(SparsePluginField::NetworkOnly) ); assert_eq!( plugin.plugin.is_some(), - fields.contains(&SparsePluginField::Plugin) + field_included(SparsePluginField::Plugin) ); assert_eq!( plugin.plugin_uri.is_some(), - fields.contains(&SparsePluginField::PluginUri) + field_included(SparsePluginField::PluginUri) ); assert_eq!( plugin.requires_php.is_some(), - fields.contains(&SparsePluginField::RequiresPhp) + field_included(SparsePluginField::RequiresPhp) ); assert_eq!( plugin.status.is_some(), - fields.contains(&SparsePluginField::Status) + field_included(SparsePluginField::Status) ); assert_eq!( plugin.textdomain.is_some(), - fields.contains(&SparsePluginField::Textdomain) + field_included(SparsePluginField::Textdomain) ); assert_eq!( plugin.version.is_some(), - fields.contains(&SparsePluginField::Version) + field_included(SparsePluginField::Version) ); } #[template] #[rstest] +#[case(&[])] #[case(&[SparsePluginField::Author])] #[case(&[SparsePluginField::AuthorUri])] #[case(&[SparsePluginField::Description])] diff --git a/wp_api/tests/test_users_immut.rs b/wp_api/tests/test_users_immut.rs index 23ffa144d..17783181d 100644 --- a/wp_api/tests/test_users_immut.rs +++ b/wp_api/tests/test_users_immut.rs @@ -199,54 +199,52 @@ async fn retrieve_me_with_view_context() { } fn validate_sparse_user_fields(user: &SparseUser, fields: &[SparseUserField]) { - assert_eq!(user.id.is_some(), fields.contains(&SparseUserField::Id)); + let field_included = |field| { + // If "fields" is empty the server will return all fields + fields.is_empty() || fields.contains(&field) + }; + assert_eq!(user.id.is_some(), field_included(SparseUserField::Id)); assert_eq!( user.username.is_some(), - fields.contains(&SparseUserField::Username) + field_included(SparseUserField::Username) ); - assert_eq!(user.name.is_some(), fields.contains(&SparseUserField::Name)); + assert_eq!(user.name.is_some(), field_included(SparseUserField::Name)); assert_eq!( user.last_name.is_some(), - fields.contains(&SparseUserField::LastName) + field_included(SparseUserField::LastName) ); - assert_eq!( - user.email.is_some(), - fields.contains(&SparseUserField::Email) - ); - assert_eq!(user.url.is_some(), fields.contains(&SparseUserField::Url)); + assert_eq!(user.email.is_some(), field_included(SparseUserField::Email)); + assert_eq!(user.url.is_some(), field_included(SparseUserField::Url)); assert_eq!( user.description.is_some(), - fields.contains(&SparseUserField::Description) + field_included(SparseUserField::Description) ); - assert_eq!(user.link.is_some(), fields.contains(&SparseUserField::Link)); + assert_eq!(user.link.is_some(), field_included(SparseUserField::Link)); assert_eq!( user.locale.is_some(), - fields.contains(&SparseUserField::Locale) + field_included(SparseUserField::Locale) ); assert_eq!( user.nickname.is_some(), - fields.contains(&SparseUserField::Nickname) + field_included(SparseUserField::Nickname) ); - assert_eq!(user.slug.is_some(), fields.contains(&SparseUserField::Slug)); + assert_eq!(user.slug.is_some(), field_included(SparseUserField::Slug)); assert_eq!( user.registered_date.is_some(), - fields.contains(&SparseUserField::RegisteredDate) - ); - assert_eq!( - user.roles.is_some(), - fields.contains(&SparseUserField::Roles) + field_included(SparseUserField::RegisteredDate) ); + assert_eq!(user.roles.is_some(), field_included(SparseUserField::Roles)); assert_eq!( user.capabilities.is_some(), - fields.contains(&SparseUserField::Capabilities) + field_included(SparseUserField::Capabilities) ); assert_eq!( user.extra_capabilities.is_some(), - fields.contains(&SparseUserField::ExtraCapabilities) + field_included(SparseUserField::ExtraCapabilities) ); assert_eq!( user.avatar_urls.is_some(), - fields.contains(&SparseUserField::AvatarUrls) + field_included(SparseUserField::AvatarUrls) ); } @@ -282,6 +280,7 @@ fn list_users_has_published_posts_cases() {} #[template] #[rstest] +#[case(&[])] #[case(&[SparseUserField::Id])] #[case(&[SparseUserField::Username])] #[case(&[SparseUserField::Name])] From 007e0c8c1125184dbdcde82b38d6f11e94bace99 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 12 Jun 2024 14:19:53 -0400 Subject: [PATCH 3/4] Add default=None for PluginListParams --- wp_api/src/plugins.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wp_api/src/plugins.rs b/wp_api/src/plugins.rs index 290314bb0..f785745ae 100644 --- a/wp_api/src/plugins.rs +++ b/wp_api/src/plugins.rs @@ -6,8 +6,10 @@ use crate::SparseField; #[derive(Debug, Default, uniffi::Record)] pub struct PluginListParams { /// Limit results to those matching a string. + #[uniffi(default = None)] pub search: Option, /// Limits results to plugins with the given status. + #[uniffi(default = None)] pub status: Option, } From 8676602f66ce03d0e5bee1e3e8fd670b4747d0ea Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 12 Jun 2024 14:22:18 -0400 Subject: [PATCH 4/4] Update Kotlin for non-optional user & plugin list params --- .../rs/wordpress/api/android/UsersEndpointAndroidTest.kt | 3 ++- .../kotlin/src/integrationTest/kotlin/UsersEndpointTest.kt | 4 ++-- .../example/shared/ui/plugins/PluginListViewModel.kt | 3 ++- .../rs/wordpress/example/shared/ui/users/UserListViewModel.kt | 3 ++- wp_api/src/request/users_request_builder.rs | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/native/kotlin/api/android/src/androidTest/kotlin/rs/wordpress/api/android/UsersEndpointAndroidTest.kt b/native/kotlin/api/android/src/androidTest/kotlin/rs/wordpress/api/android/UsersEndpointAndroidTest.kt index c4b90f285..d991ca147 100644 --- a/native/kotlin/api/android/src/androidTest/kotlin/rs/wordpress/api/android/UsersEndpointAndroidTest.kt +++ b/native/kotlin/api/android/src/androidTest/kotlin/rs/wordpress/api/android/UsersEndpointAndroidTest.kt @@ -5,6 +5,7 @@ import org.junit.Assert import org.junit.Test import rs.wordpress.api.kotlin.WpApiClient import rs.wordpress.api.kotlin.WpRequestSuccess +import uniffi.wp_api.UserListParams import uniffi.wp_api.wpAuthenticationFromUsernameAndPassword private const val FIRST_USER_EMAIL = "test@example.com" @@ -21,7 +22,7 @@ class UsersEndpointAndroidTest { @Test fun testUserListRequest() = runTest { val result = client.request { requestBuilder -> - requestBuilder.users().listWithEditContext(params = null) + requestBuilder.users().listWithEditContext(params = UserListParams()) } assert(result is WpRequestSuccess) val userList = (result as WpRequestSuccess).data diff --git a/native/kotlin/api/kotlin/src/integrationTest/kotlin/UsersEndpointTest.kt b/native/kotlin/api/kotlin/src/integrationTest/kotlin/UsersEndpointTest.kt index ef334e9bb..fad96155d 100644 --- a/native/kotlin/api/kotlin/src/integrationTest/kotlin/UsersEndpointTest.kt +++ b/native/kotlin/api/kotlin/src/integrationTest/kotlin/UsersEndpointTest.kt @@ -22,7 +22,7 @@ class UsersEndpointTest { @Test fun testUserListRequest() = runTest { val result = client.request { requestBuilder -> - requestBuilder.users().listWithEditContext(params = null) + requestBuilder.users().listWithEditContext(params = UserListParams()) } assert(result is WpRequestSuccess) val userList = (result as WpRequestSuccess).data @@ -48,7 +48,7 @@ class UsersEndpointTest { val result = client.request { requestBuilder -> requestBuilder.users().filterList( context = WpContext.EDIT, - params = null, + params = UserListParams(), fields = listOf(SparseUserField.EMAIL, SparseUserField.NAME) ) } diff --git a/native/kotlin/example/composeApp/src/commonMain/kotlin/rs/wordpress/example/shared/ui/plugins/PluginListViewModel.kt b/native/kotlin/example/composeApp/src/commonMain/kotlin/rs/wordpress/example/shared/ui/plugins/PluginListViewModel.kt index a166cd91a..d0c46a94e 100644 --- a/native/kotlin/example/composeApp/src/commonMain/kotlin/rs/wordpress/example/shared/ui/plugins/PluginListViewModel.kt +++ b/native/kotlin/example/composeApp/src/commonMain/kotlin/rs/wordpress/example/shared/ui/plugins/PluginListViewModel.kt @@ -5,6 +5,7 @@ import rs.wordpress.api.kotlin.WpApiClient import rs.wordpress.api.kotlin.WpRequestSuccess import rs.wordpress.example.shared.domain.AuthenticatedSite import rs.wordpress.example.shared.repository.AuthenticationRepository +import uniffi.wp_api.PluginListParams import uniffi.wp_api.PluginWithEditContext class PluginListViewModel(private val authRepository: AuthenticationRepository) { @@ -21,7 +22,7 @@ class PluginListViewModel(private val authRepository: AuthenticationRepository) apiClient?.let { apiClient -> val pluginsResult = runBlocking { apiClient.request { requestBuilder -> - requestBuilder.plugins().listWithEditContext(params = null) + requestBuilder.plugins().listWithEditContext(params = PluginListParams()) } } return when (pluginsResult) { diff --git a/native/kotlin/example/composeApp/src/commonMain/kotlin/rs/wordpress/example/shared/ui/users/UserListViewModel.kt b/native/kotlin/example/composeApp/src/commonMain/kotlin/rs/wordpress/example/shared/ui/users/UserListViewModel.kt index c58e91e20..cb0181aa6 100644 --- a/native/kotlin/example/composeApp/src/commonMain/kotlin/rs/wordpress/example/shared/ui/users/UserListViewModel.kt +++ b/native/kotlin/example/composeApp/src/commonMain/kotlin/rs/wordpress/example/shared/ui/users/UserListViewModel.kt @@ -5,6 +5,7 @@ import rs.wordpress.api.kotlin.WpApiClient import rs.wordpress.api.kotlin.WpRequestSuccess import rs.wordpress.example.shared.domain.AuthenticatedSite import rs.wordpress.example.shared.repository.AuthenticationRepository +import uniffi.wp_api.UserListParams import uniffi.wp_api.UserWithEditContext class UserListViewModel(private val authRepository: AuthenticationRepository) { @@ -21,7 +22,7 @@ class UserListViewModel(private val authRepository: AuthenticationRepository) { apiClient?.let { apiClient -> val usersResult = runBlocking { apiClient.request { requestBuilder -> - requestBuilder.users().listWithEditContext(params = null) + requestBuilder.users().listWithEditContext(params = UserListParams()) } } return when (usersResult) { diff --git a/wp_api/src/request/users_request_builder.rs b/wp_api/src/request/users_request_builder.rs index 0e931810a..1483bd007 100644 --- a/wp_api/src/request/users_request_builder.rs +++ b/wp_api/src/request/users_request_builder.rs @@ -62,7 +62,7 @@ impl UsersRequestBuilder { fields: &[SparseUserField], ) -> Result, WpApiError> { self.request_builder - .get(self.endpoint.filter_list(context, ¶ms, fields)) + .get(self.endpoint.filter_list(context, params, fields)) .await }