diff --git a/native/swift/Sources/wordpress-api/Exports.swift b/native/swift/Sources/wordpress-api/Exports.swift index a311a7bb4..2d376990d 100644 --- a/native/swift/Sources/wordpress-api/Exports.swift +++ b/native/swift/Sources/wordpress-api/Exports.swift @@ -34,6 +34,6 @@ public typealias PluginListParams = WordPressAPIInternal.PluginListParams public typealias PluginUpdateParams = WordPressAPIInternal.PluginUpdateParams public typealias PluginCreateParams = WordPressAPIInternal.PluginCreateParams public typealias PluginDeleteResponse = WordPressAPIInternal.PluginDeleteResponse -public typealias PluginsRequestBuilder = WordPressAPIInternal.PluginsRequestBuilder +public typealias PluginsRequestExecutor = WordPressAPIInternal.PluginsRequestExecutor #endif diff --git a/native/swift/Sources/wordpress-api/WordPressAPI.swift b/native/swift/Sources/wordpress-api/WordPressAPI.swift index 2765e7bad..20a75032d 100644 --- a/native/swift/Sources/wordpress-api/WordPressAPI.swift +++ b/native/swift/Sources/wordpress-api/WordPressAPI.swift @@ -43,7 +43,7 @@ public struct WordPressAPI { self.requestBuilder.users() } - public var plugins: PluginsRequestBuilder { + public var plugins: PluginsRequestExecutor { self.requestBuilder.plugins() } diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 2700051ea..358041f83 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -5,10 +5,10 @@ use request::{ application_passwords_endpoint::{ ApplicationPasswordsRequestBuilder2, ApplicationPasswordsRequestExecutor, }, + plugins_endpoint::{PluginsRequestBuilder2, PluginsRequestExecutor}, users_endpoint::{UsersRequestBuilder2, UsersRequestExecutor}, ApiBaseUrl, }, - plugins_request_builder::PluginsRequestBuilder, RequestExecutor, WpNetworkResponse, }; use std::sync::Arc; @@ -71,7 +71,7 @@ impl WpApiRequestBuilder { pub struct WpRequestBuilder { application_passwords: Arc, users: Arc, - plugins: Arc, + plugins: Arc, } #[uniffi::export] @@ -106,8 +106,11 @@ impl WpRequestBuilder { request_executor.clone(), ) .into(), - plugins: PluginsRequestBuilder::new(api_base_url.clone(), request_builder.clone()) - .into(), + plugins: PluginsRequestExecutor::new( + PluginsRequestBuilder2::new(api_base_url.clone(), request_builder.clone()), + request_executor.clone(), + ) + .into(), }) } @@ -119,7 +122,7 @@ impl WpRequestBuilder { self.users.clone() } - pub fn plugins(&self) -> Arc { + pub fn plugins(&self) -> Arc { self.plugins.clone() } } diff --git a/wp_api/src/plugins.rs b/wp_api/src/plugins.rs index f785745ae..4f1c39f43 100644 --- a/wp_api/src/plugins.rs +++ b/wp_api/src/plugins.rs @@ -1,3 +1,5 @@ +use std::fmt::Display; + use serde::{Deserialize, Serialize}; use wp_contextual::WpContextual; @@ -132,6 +134,12 @@ impl From<&str> for PluginSlug { } } +impl Display for PluginSlug { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.slug) + } +} + #[derive(Debug, Serialize, Deserialize, uniffi::Record)] #[serde(transparent)] pub struct PluginWpOrgDirectorySlug { diff --git a/wp_api/src/request.rs b/wp_api/src/request.rs index 03002249e..5adadd43b 100644 --- a/wp_api/src/request.rs +++ b/wp_api/src/request.rs @@ -9,7 +9,6 @@ use crate::{api_error::RequestExecutionError, WpApiError, WpAuthentication}; use self::endpoint::WpEndpointUrl; pub mod endpoint; -pub mod plugins_request_builder; const CONTENT_TYPE_JSON: &str = "application/json"; const LINK_HEADER_KEY: &str = "Link"; diff --git a/wp_api/src/request/endpoint/application_passwords_endpoint.rs b/wp_api/src/request/endpoint/application_passwords_endpoint.rs index 2f90efeea..e56381534 100644 --- a/wp_api/src/request/endpoint/application_passwords_endpoint.rs +++ b/wp_api/src/request/endpoint/application_passwords_endpoint.rs @@ -26,7 +26,7 @@ mod tests { #[rstest] fn list_application_passwords_with_edit_context(endpoint: ApplicationPasswordsRequestEndpoint) { validate_endpoint( - endpoint.list_with_edit_context(UserId(2)), + endpoint.list_with_edit_context(&UserId(2)), "/users/2/application-passwords?context=edit", ); } @@ -36,7 +36,7 @@ mod tests { endpoint: ApplicationPasswordsRequestEndpoint, ) { validate_endpoint( - endpoint.list_with_embed_context(UserId(71)), + endpoint.list_with_embed_context(&UserId(71)), "/users/71/application-passwords?context=embed", ); } @@ -44,7 +44,7 @@ mod tests { #[rstest] fn list_application_passwords_with_view_context(endpoint: ApplicationPasswordsRequestEndpoint) { validate_endpoint( - endpoint.list_with_view_context(UserId(9999)), + endpoint.list_with_view_context(&UserId(9999)), "/users/9999/application-passwords?context=view", ); } @@ -59,7 +59,7 @@ mod tests { #[case] expected_path: &str, ) { validate_endpoint( - endpoint.filter_list(UserId(2), context, fields), + endpoint.filter_list(&UserId(2), context, fields), expected_path, ); } diff --git a/wp_api/src/request/endpoint/plugins_endpoint.rs b/wp_api/src/request/endpoint/plugins_endpoint.rs index 00277f13a..a1f819823 100644 --- a/wp_api/src/request/endpoint/plugins_endpoint.rs +++ b/wp_api/src/request/endpoint/plugins_endpoint.rs @@ -1,81 +1,23 @@ -use std::sync::Arc; - -use url::Url; - -use crate::{plugins::PluginListParams, PluginSlug, SparsePluginField, WpContext}; - -use super::{ApiBaseUrl, ApiEndpointUrl, UrlExtension}; - -#[derive(Debug)] -pub(crate) struct PluginsEndpoint { - api_base_url: Arc, -} - -impl PluginsEndpoint { - pub fn new(api_base_url: Arc) -> Self { - Self { api_base_url } - } - - pub fn create(&self) -> ApiEndpointUrl { - self.plugins_base_url().into() - } - - pub fn delete(&self, plugin: &PluginSlug) -> ApiEndpointUrl { - self.plugins_url_with_slug(plugin).into() - } - - 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()); - url.query_pairs_mut().extend_pairs(params.query_pairs()); - url.into() - } - - pub fn filter_list( - &self, - context: WpContext, - params: &PluginListParams, - fields: &[SparsePluginField], - ) -> ApiEndpointUrl { - self.list(context, params) - .url - .append_filter_fields(fields) - .into() - } - - pub fn retrieve(&self, context: WpContext, plugin: &PluginSlug) -> ApiEndpointUrl { - let mut url = self.plugins_url_with_slug(plugin); - url.query_pairs_mut() - .append_pair("context", context.as_str()); - url.into() - } - - pub fn filter_retrieve( - &self, - context: WpContext, - plugin: &PluginSlug, - fields: &[SparsePluginField], - ) -> ApiEndpointUrl { - self.retrieve(context, plugin) - .url - .append_filter_fields(fields) - .into() - } - - pub fn update(&self, plugin: &PluginSlug) -> ApiEndpointUrl { - self.plugins_url_with_slug(plugin).into() - } - - fn plugins_base_url(&self) -> Url { - self.api_base_url.by_appending("plugins") - } - - fn plugins_url_with_slug(&self, plugin: &PluginSlug) -> Url { - self.api_base_url - // The '/' character has to be preserved and not get encoded - .by_extending(["plugins"].into_iter().chain(plugin.slug.split('/'))) - } +use crate::{plugins::PluginListParams, PluginSlug}; +use crate::{ + PluginCreateParams, PluginDeleteResponse, PluginUpdateParams, PluginWithEditContext, + PluginWithEmbedContext, PluginWithViewContext, SparsePlugin, SparsePluginField, +}; +use wp_derive_request_builder::WpDerivedRequest; + +#[derive(WpDerivedRequest)] +#[SparseField(SparsePluginField)] +enum PluginsRequest { + #[post(url = "/plugins", params = &PluginCreateParams, output = PluginWithEditContext)] + Create, + #[delete(url = "/plugins/", output = PluginDeleteResponse)] + Delete, + #[contextual_get(url = "/plugins", params = &PluginListParams, output = Vec)] + List, + #[contextual_get(url = "/plugins/", output = SparsePlugin)] + Retrieve, + #[post(url = "/plugins/", params = &PluginUpdateParams, output = PluginWithEditContext)] + Update, } #[cfg(test)] @@ -83,14 +25,18 @@ mod tests { use super::*; use crate::{ generate, - request::endpoint::tests::{fixture_api_base_url, validate_endpoint}, - PluginStatus, + request::endpoint::{ + tests::{fixture_api_base_url, validate_endpoint}, + ApiBaseUrl, + }, + PluginStatus, WpContext, }; use rstest::*; + use std::sync::Arc; #[rstest] - fn create_plugin(plugins_endpoint: PluginsEndpoint) { - validate_endpoint(plugins_endpoint.create(), "/plugins"); + fn create_plugin(endpoint: PluginsRequestEndpoint) { + validate_endpoint(endpoint.create(), "/plugins"); } #[rstest] @@ -102,25 +48,46 @@ mod tests { #[case("foo/bar%baz".into(), "/plugins/foo/bar%25baz")] #[case("foo/です".into(), "/plugins/foo/%E3%81%A7%E3%81%99")] fn delete_plugin( - plugins_endpoint: PluginsEndpoint, + endpoint: PluginsRequestEndpoint, #[case] plugin_slug: PluginSlug, #[case] expected_path: &str, ) { - validate_endpoint(plugins_endpoint.delete(&plugin_slug), expected_path); + validate_endpoint(endpoint.delete(&plugin_slug), expected_path); } #[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")] - fn list_plugins_with_params( - plugins_endpoint: PluginsEndpoint, - #[case] context: WpContext, + #[case(PluginListParams::default(), "/plugins?context=edit")] + #[case(generate!(PluginListParams, (search, Some("foo".to_string()))), "/plugins?context=edit&search=foo")] + #[case(generate!(PluginListParams, (status, Some(PluginStatus::Active))), "/plugins?context=edit&status=active")] + #[case(generate!(PluginListParams, (search, Some("foo".to_string())), (status, Some(PluginStatus::Inactive))), "/plugins?context=edit&search=foo&status=inactive")] + fn list_plugins_with_edit_context( + endpoint: PluginsRequestEndpoint, + #[case] params: PluginListParams, + #[case] expected_path: &str, + ) { + validate_endpoint(endpoint.list_with_edit_context(¶ms), expected_path); + } + + #[rstest] + #[case(PluginListParams::default(), "/plugins?context=embed")] + #[case(generate!(PluginListParams, (search, Some("foo".to_string()))), "/plugins?context=embed&search=foo")] + fn list_plugins_with_embed_context( + endpoint: PluginsRequestEndpoint, #[case] params: PluginListParams, #[case] expected_path: &str, ) { - validate_endpoint(plugins_endpoint.list(context, ¶ms), expected_path); + validate_endpoint(endpoint.list_with_embed_context(¶ms), expected_path); + } + + #[rstest] + #[case(PluginListParams::default(), "/plugins?context=view")] + #[case(generate!(PluginListParams, (search, Some("foo".to_string()))), "/plugins?context=view&search=foo")] + fn list_plugins_with_view_context( + endpoint: PluginsRequestEndpoint, + #[case] params: PluginListParams, + #[case] expected_path: &str, + ) { + validate_endpoint(endpoint.list_with_view_context(¶ms), expected_path); } #[rstest] @@ -150,14 +117,14 @@ mod tests { "/plugins?context=view&search=foo&status=inactive&_fields=network_only%2Crequires_php%2Ctextdomain" )] fn filter_list_plugins_with_params( - plugins_endpoint: PluginsEndpoint, + endpoint: PluginsRequestEndpoint, #[case] context: WpContext, #[case] params: PluginListParams, #[case] fields: &[SparsePluginField], #[case] expected_path: &str, ) { validate_endpoint( - plugins_endpoint.filter_list(context, ¶ms, fields), + endpoint.filter_list(context, ¶ms, fields), expected_path, ); } @@ -165,28 +132,24 @@ mod tests { #[rstest] #[case( "hello-dolly/hello".into(), - WpContext::View, "/plugins/hello-dolly/hello?context=view" )] #[case( "classic-editor/classic-editor".into(), - WpContext::Embed, - "/plugins/classic-editor/classic-editor?context=embed" + "/plugins/classic-editor/classic-editor?context=view" )] - #[case("foo/bar%baz".into(), WpContext::Edit, "/plugins/foo/bar%25baz?context=edit")] + #[case("foo/bar%baz".into(), "/plugins/foo/bar%25baz?context=view")] #[case( "foo/です".into(), - WpContext::View, "/plugins/foo/%E3%81%A7%E3%81%99?context=view" )] - fn retrieve_plugin( - plugins_endpoint: PluginsEndpoint, + fn retrieve_plugin_with_view_context( + endpoint: PluginsRequestEndpoint, #[case] plugin_slug: PluginSlug, - #[case] context: WpContext, #[case] expected_path: &str, ) { validate_endpoint( - plugins_endpoint.retrieve(context, &plugin_slug), + endpoint.retrieve_with_view_context(&plugin_slug), expected_path, ); } @@ -217,14 +180,14 @@ mod tests { "/plugins/foo/%E3%81%A7%E3%81%99?context=view&_fields=network_only%2Crequires_php%2Ctextdomain" )] fn filter_retrieve_plugin( - plugins_endpoint: PluginsEndpoint, + endpoint: PluginsRequestEndpoint, #[case] plugin_slug: PluginSlug, #[case] context: WpContext, #[case] fields: &[SparsePluginField], #[case] expected_path: &str, ) { validate_endpoint( - plugins_endpoint.filter_retrieve(context, &plugin_slug, fields), + endpoint.filter_retrieve(&plugin_slug, context, fields), expected_path, ); } @@ -238,15 +201,15 @@ mod tests { #[case("foo/bar%baz".into(), "/plugins/foo/bar%25baz")] #[case("foo/です".into(), "/plugins/foo/%E3%81%A7%E3%81%99")] fn update_plugin( - plugins_endpoint: PluginsEndpoint, + endpoint: PluginsRequestEndpoint, #[case] plugin_slug: PluginSlug, #[case] expected_path: &str, ) { - validate_endpoint(plugins_endpoint.update(&plugin_slug), expected_path); + validate_endpoint(endpoint.update(&plugin_slug), expected_path); } #[fixture] - fn plugins_endpoint(fixture_api_base_url: Arc) -> PluginsEndpoint { - PluginsEndpoint::new(fixture_api_base_url) + fn endpoint(fixture_api_base_url: Arc) -> PluginsRequestEndpoint { + PluginsRequestEndpoint::new(fixture_api_base_url) } } diff --git a/wp_api/src/request/endpoint/users_endpoint.rs b/wp_api/src/request/endpoint/users_endpoint.rs index 61ae58975..2819c4bec 100644 --- a/wp_api/src/request/endpoint/users_endpoint.rs +++ b/wp_api/src/request/endpoint/users_endpoint.rs @@ -48,7 +48,7 @@ mod tests { fn delete_user(endpoint: UsersRequestEndpoint) { validate_endpoint( endpoint.delete( - UserId(54), + &UserId(54), &UserDeleteParams { reassign: UserId(98), }, @@ -143,7 +143,7 @@ mod tests { #[rstest] fn retrieve_user(endpoint: UsersRequestEndpoint) { validate_endpoint( - endpoint.retrieve_with_view_context(UserId(98)), + endpoint.retrieve_with_view_context(&UserId(98)), "/users/98?context=view", ); } @@ -152,7 +152,7 @@ mod tests { fn filter_retrieve_user(endpoint: UsersRequestEndpoint) { validate_endpoint( endpoint.filter_retrieve( - UserId(98), + &UserId(98), WpContext::View, &[SparseUserField::Nickname, SparseUserField::Url], ), @@ -181,7 +181,7 @@ mod tests { #[rstest] fn update_user(endpoint: UsersRequestEndpoint) { - validate_endpoint(endpoint.update(UserId(98)), "/users/98"); + validate_endpoint(endpoint.update(&UserId(98)), "/users/98"); } #[rstest] diff --git a/wp_api/src/request/plugins_request_builder.rs b/wp_api/src/request/plugins_request_builder.rs deleted file mode 100644 index 1a66b37f4..000000000 --- a/wp_api/src/request/plugins_request_builder.rs +++ /dev/null @@ -1,131 +0,0 @@ -use std::sync::Arc; - -use crate::{ - PluginCreateParams, PluginDeleteResponse, PluginListParams, PluginSlug, PluginUpdateParams, - PluginWithEditContext, PluginWithEmbedContext, PluginWithViewContext, SparsePlugin, - SparsePluginField, WpApiError, WpContext, -}; - -use super::{ - endpoint::{plugins_endpoint::PluginsEndpoint, ApiBaseUrl}, - RequestBuilder, -}; - -#[derive(Debug, uniffi::Object)] -pub struct PluginsRequestBuilder { - endpoint: PluginsEndpoint, - request_builder: Arc, -} - -impl PluginsRequestBuilder { - pub(crate) fn new(api_base_url: Arc, request_builder: Arc) -> Self { - Self { - endpoint: PluginsEndpoint::new(api_base_url), - request_builder, - } - } -} - -#[uniffi::export] -impl PluginsRequestBuilder { - pub async fn list_with_edit_context( - &self, - params: &PluginListParams, - ) -> Result, WpApiError> { - self.request_builder - .get(self.endpoint.list(WpContext::Edit, params)) - .await - } - - pub async fn list_with_embed_context( - &self, - params: &PluginListParams, - ) -> Result, WpApiError> { - self.request_builder - .get(self.endpoint.list(WpContext::Embed, params)) - .await - } - - pub async fn list_with_view_context( - &self, - params: &PluginListParams, - ) -> Result, WpApiError> { - self.request_builder - .get(self.endpoint.list(WpContext::View, params)) - .await - } - - pub async fn filter_list( - &self, - context: WpContext, - params: &PluginListParams, - fields: &[SparsePluginField], - ) -> Result, WpApiError> { - self.request_builder - .get(self.endpoint.filter_list(context, params, fields)) - .await - } - - pub async fn create( - &self, - params: &PluginCreateParams, - ) -> Result { - self.request_builder - .post(self.endpoint.create(), params) - .await - } - - pub async fn retrieve_with_edit_context( - &self, - plugin: &PluginSlug, - ) -> Result { - self.request_builder - .get(self.endpoint.retrieve(WpContext::Edit, plugin)) - .await - } - - pub async fn retrieve_with_embed_context( - &self, - plugin: &PluginSlug, - ) -> Result { - self.request_builder - .get(self.endpoint.retrieve(WpContext::Embed, plugin)) - .await - } - - pub async fn retrieve_with_view_context( - &self, - plugin: &PluginSlug, - ) -> Result { - self.request_builder - .get(self.endpoint.retrieve(WpContext::View, plugin)) - .await - } - - pub async fn filter_retrieve( - &self, - context: WpContext, - plugin: &PluginSlug, - fields: &[SparsePluginField], - ) -> Result { - self.request_builder - .get(self.endpoint.filter_retrieve(context, plugin, fields)) - .await - } - - pub async fn update( - &self, - plugin: &PluginSlug, - params: &PluginUpdateParams, - ) -> Result { - self.request_builder - .post(self.endpoint.update(plugin), params) - .await - } - - pub async fn delete(&self, plugin: &PluginSlug) -> Result { - self.request_builder - .delete(self.endpoint.delete(plugin)) - .await - } -} diff --git a/wp_api/tests/test_application_passwords_immut.rs b/wp_api/tests/test_application_passwords_immut.rs index b0e95a654..056af5260 100644 --- a/wp_api/tests/test_application_passwords_immut.rs +++ b/wp_api/tests/test_application_passwords_immut.rs @@ -19,7 +19,7 @@ async fn filter_application_passwords( ) { request_builder() .application_passwords() - .filter_list(user_id, WpContext::Edit, fields) + .filter_list(&user_id, WpContext::Edit, fields) .await .assert_response() .iter() @@ -33,7 +33,7 @@ async fn list_application_passwords_with_edit_context( ) { request_builder() .application_passwords() - .list_with_edit_context(user_id) + .list_with_edit_context(&user_id) .await .assert_response(); } @@ -45,7 +45,7 @@ async fn list_application_passwords_with_embed_context( ) { request_builder() .application_passwords() - .list_with_embed_context(user_id) + .list_with_embed_context(&user_id) .await .assert_response(); } @@ -57,7 +57,7 @@ async fn list_application_passwords_with_view_context( ) { request_builder() .application_passwords() - .list_with_view_context(user_id) + .list_with_view_context(&user_id) .await .assert_response(); } @@ -68,7 +68,7 @@ async fn list_application_passwords_with_view_context( async fn list_application_passwords_ensure_last_ip() { let list = request_builder() .application_passwords() - .list_with_edit_context(FIRST_USER_ID) + .list_with_edit_context(&FIRST_USER_ID) .await .assert_response(); assert!(list.first().unwrap().last_ip.is_some()); diff --git a/wp_api/tests/test_plugins_immut.rs b/wp_api/tests/test_plugins_immut.rs index 8d308210e..b4e41bed6 100644 --- a/wp_api/tests/test_plugins_immut.rs +++ b/wp_api/tests/test_plugins_immut.rs @@ -40,7 +40,7 @@ async fn filter_retrieve_plugin( ) { let response = request_builder() .plugins() - .filter_retrieve(WpContext::Edit, &slug.into(), fields) + .filter_retrieve(&slug.into(), WpContext::Edit, fields) .await .assert_response(); validate_sparse_plugin_fields(&response, fields); diff --git a/wp_api/tests/test_users_err.rs b/wp_api/tests/test_users_err.rs index 733d861d0..94e9b67ce 100644 --- a/wp_api/tests/test_users_err.rs +++ b/wp_api/tests/test_users_err.rs @@ -30,7 +30,7 @@ async fn delete_user_err_user_cannot_delete() { request_builder_as_subscriber() .users() .delete( - FIRST_USER_ID, + &FIRST_USER_ID, &UserDeleteParams { reassign: SECOND_USER_ID, }, @@ -44,7 +44,7 @@ async fn delete_user_err_user_invalid_reassign() { request_builder() .users() .delete( - FIRST_USER_ID, + &FIRST_USER_ID, &UserDeleteParams { reassign: UserId(987654321), }, @@ -156,7 +156,7 @@ async fn list_users_has_published_posts_err_invalid_param() { async fn retrieve_user_err_user_invalid_id() { request_builder() .users() - .retrieve_with_edit_context(UserId(987654321)) + .retrieve_with_edit_context(&UserId(987654321)) .await .assert_wp_error(WpRestErrorCode::UserInvalidId); } @@ -184,7 +184,7 @@ async fn update_user_err_cannot_edit() { // Subscribers can't update someone else's slug request_builder_as_subscriber() .users() - .update(FIRST_USER_ID, ¶ms) + .update(&FIRST_USER_ID, ¶ms) .await .assert_wp_error(WpRestErrorCode::CannotEdit); } @@ -198,7 +198,7 @@ async fn update_user_err_cannot_edit_roles() { // Subscribers can't update their roles request_builder_as_subscriber() .users() - .update(SECOND_USER_ID, ¶ms) + .update(&SECOND_USER_ID, ¶ms) .await .assert_wp_error(WpRestErrorCode::CannotEditRoles); } @@ -212,7 +212,7 @@ async fn update_user_err_user_invalid_email() { // Can't update user's email to an email that's already in use request_builder() .users() - .update(FIRST_USER_ID, ¶ms) + .update(&FIRST_USER_ID, ¶ms) .await .assert_wp_error(WpRestErrorCode::UserInvalidEmail); } @@ -225,7 +225,7 @@ async fn update_user_email_err_invalid_param() { }; request_builder() .users() - .update(FIRST_USER_ID, ¶ms) + .update(&FIRST_USER_ID, ¶ms) .await .assert_wp_error(WpRestErrorCode::InvalidParam); } @@ -238,7 +238,7 @@ async fn update_user_password_err_invalid_param() { }; request_builder() .users() - .update(FIRST_USER_ID, ¶ms) + .update(&FIRST_USER_ID, ¶ms) .await .assert_wp_error(WpRestErrorCode::InvalidParam); } @@ -252,7 +252,7 @@ async fn update_user_err_user_invalid_role() { // Can't update user's email to a role that doesn't exist request_builder() .users() - .update(FIRST_USER_ID, ¶ms) + .update(&FIRST_USER_ID, ¶ms) .await .assert_wp_error(WpRestErrorCode::UserInvalidRole); } @@ -266,7 +266,7 @@ async fn update_user_err_user_invalid_slug() { // Can't update user's slug to a slug that's already in use request_builder() .users() - .update(FIRST_USER_ID, ¶ms) + .update(&FIRST_USER_ID, ¶ms) .await .assert_wp_error(WpRestErrorCode::UserInvalidSlug); } diff --git a/wp_api/tests/test_users_immut.rs b/wp_api/tests/test_users_immut.rs index 35a97760c..2c9abcc8d 100644 --- a/wp_api/tests/test_users_immut.rs +++ b/wp_api/tests/test_users_immut.rs @@ -34,7 +34,7 @@ async fn filter_users(#[case] fields: &[SparseUserField]) { async fn filter_retrieve_user(#[case] fields: &[SparseUserField]) { let user = request_builder() .users() - .filter_retrieve(FIRST_USER_ID, WpContext::Edit, fields) + .filter_retrieve(&FIRST_USER_ID, WpContext::Edit, fields) .await .assert_response(); validate_sparse_user_fields(&user, fields); @@ -135,7 +135,7 @@ async fn list_users_with_view_context_has_published_posts( async fn retrieve_user_with_edit_context(#[values(FIRST_USER_ID, SECOND_USER_ID)] user_id: UserId) { let user = request_builder() .users() - .retrieve_with_edit_context(user_id) + .retrieve_with_edit_context(&user_id) .await .assert_response(); assert_eq!(user_id, user.id); @@ -149,7 +149,7 @@ async fn retrieve_user_with_embed_context( ) { let user = request_builder() .users() - .retrieve_with_embed_context(user_id) + .retrieve_with_embed_context(&user_id) .await .assert_response(); assert_eq!(user_id, user.id); @@ -161,7 +161,7 @@ async fn retrieve_user_with_embed_context( async fn retrieve_user_with_view_context(#[values(FIRST_USER_ID, SECOND_USER_ID)] user_id: UserId) { let user = request_builder() .users() - .retrieve_with_view_context(user_id) + .retrieve_with_view_context(&user_id) .await .assert_response(); assert_eq!(user_id, user.id); diff --git a/wp_api/tests/test_users_mut.rs b/wp_api/tests/test_users_mut.rs index 8e6118bd2..0e7916870 100644 --- a/wp_api/tests/test_users_mut.rs +++ b/wp_api/tests/test_users_mut.rs @@ -43,7 +43,7 @@ async fn delete_user() { }; let user_delete_response = request_builder() .users() - .delete(SECOND_USER_ID, &user_delete_params) + .delete(&SECOND_USER_ID, &user_delete_params) .await; assert!(user_delete_response.is_ok()); @@ -197,7 +197,7 @@ async fn update_user_roles() { // successful request_builder() .users() - .update(SECOND_USER_ID, ¶ms) + .update(&SECOND_USER_ID, ¶ms) .await .assert_response(); }) @@ -216,7 +216,7 @@ async fn update_user_password() { // successful request_builder() .users() - .update(FIRST_USER_ID, ¶ms) + .update(&FIRST_USER_ID, ¶ms) .await .assert_response(); }) @@ -230,7 +230,7 @@ where wp_db::run_and_restore(|mut db| async move { request_builder() .users() - .update(FIRST_USER_ID, ¶ms) + .update(&FIRST_USER_ID, ¶ms) .await .assert_response(); diff --git a/wp_derive_request_builder/src/generate/helpers_to_generate_tokens.rs b/wp_derive_request_builder/src/generate/helpers_to_generate_tokens.rs index 6752a119b..b891c4d25 100644 --- a/wp_derive_request_builder/src/generate/helpers_to_generate_tokens.rs +++ b/wp_derive_request_builder/src/generate/helpers_to_generate_tokens.rs @@ -83,7 +83,7 @@ pub fn fn_url_params(url_parts: &[UrlPart]) -> TokenStream { if let UrlPart::Dynamic(p) = p { let p_ident = format_ident!("{}", p); let p_upper_camel_case = format_ident!("{}", p.to_case(Case::UpperCamel)); - Some(quote! { #p_ident: #p_upper_camel_case }) + Some(quote! { #p_ident: &#p_upper_camel_case }) } else { None } @@ -387,9 +387,9 @@ mod tests { #[rstest] #[case(&[UrlPart::Static("users".to_string())], "")] - #[case(&[UrlPart::Dynamic("user_id".to_string())], "user_id : UserId ,")] - #[case(&[UrlPart::Static("users".to_string()), UrlPart::Dynamic("user_id".to_string())], "user_id : UserId ,")] - #[case(&[UrlPart::Dynamic("user_id".to_string()), UrlPart::Dynamic("user_type".to_string())], "user_id : UserId , user_type : UserType ,")] + #[case(&[UrlPart::Dynamic("user_id".to_string())], "user_id : & UserId ,")] + #[case(&[UrlPart::Static("users".to_string()), UrlPart::Dynamic("user_id".to_string())], "user_id : & UserId ,")] + #[case(&[UrlPart::Dynamic("user_id".to_string()), UrlPart::Dynamic("user_type".to_string())], "user_id : & UserId , user_type : & UserType ,")] fn test_fn_url_params(#[case] url_parts: &[UrlPart], #[case] expected_str: &str) { assert_eq!(fn_url_params(url_parts).to_string(), expected_str); } @@ -670,7 +670,7 @@ mod tests { &referenced_params_type("UserDeleteParams"), RequestType::Delete, ContextAndFilterHandler::None, - "fn delete (& self , user_id : UserId , params : &UserDeleteParams ,)")] + "fn delete (& self , user_id : & UserId , params : &UserDeleteParams ,)")] #[case( PartOf::Endpoint, format_ident!("Delete"), @@ -678,7 +678,7 @@ mod tests { &referenced_params_type("UserDeleteParams"), RequestType::Delete, ContextAndFilterHandler::FilterNoContext, - "fn filter_delete (& self , user_id : UserId , params : &UserDeleteParams , fields : & [SparseUserField])")] + "fn filter_delete (& self , user_id : & UserId , params : &UserDeleteParams , fields : & [SparseUserField])")] #[case( PartOf::Endpoint, format_ident!("DeleteMe"), @@ -710,7 +710,7 @@ mod tests { &ParamsType::new(None), RequestType::ContextualGet, ContextAndFilterHandler::NoFilterTakeContextAsFunctionName(WpContext::Embed), - "fn retrieve_with_embed_context (& self , user_id : UserId ,)")] + "fn retrieve_with_embed_context (& self , user_id : & UserId ,)")] #[case( PartOf::Endpoint, format_ident!("Retrieve"), @@ -718,7 +718,7 @@ mod tests { &ParamsType::new(None), RequestType::ContextualGet, ContextAndFilterHandler::FilterTakeContextAsArgument, - "fn filter_retrieve (& self , user_id : UserId , context : crate :: WpContext , fields : & [SparseUserField])")] + "fn filter_retrieve (& self , user_id : & UserId , context : crate :: WpContext , fields : & [SparseUserField])")] #[case( PartOf::Endpoint, format_ident!("Update"), @@ -726,7 +726,7 @@ mod tests { &referenced_params_type("UserUpdateParams"), RequestType::Post, ContextAndFilterHandler::None, - "fn update (& self , user_id : UserId ,)")] + "fn update (& self , user_id : & UserId ,)")] #[case( PartOf::Endpoint, format_ident!("Update"), @@ -734,7 +734,7 @@ mod tests { &referenced_params_type("UserUpdateParams"), RequestType::Post, ContextAndFilterHandler::FilterNoContext, - "fn filter_update (& self , user_id : UserId , fields : & [SparseUserField])")] + "fn filter_update (& self , user_id : & UserId , fields : & [SparseUserField])")] #[case( PartOf::RequestBuilder, format_ident!("Update"), @@ -742,7 +742,7 @@ mod tests { &referenced_params_type("UserUpdateParams"), RequestType::Post, ContextAndFilterHandler::None, - "fn update (& self , user_id : UserId , params : &UserUpdateParams ,)")] + "fn update (& self , user_id : & UserId , params : &UserUpdateParams ,)")] #[case( PartOf::RequestExecutor, format_ident!("Update"), @@ -750,7 +750,7 @@ mod tests { &referenced_params_type("UserUpdateParams"), RequestType::Post, ContextAndFilterHandler::None, - "fn update (& self , user_id : UserId , params : &UserUpdateParams ,)")] + "fn update (& self , user_id : & UserId , params : &UserUpdateParams ,)")] #[case( PartOf::RequestBuilder, format_ident!("Update"), @@ -758,7 +758,7 @@ mod tests { &referenced_params_type("UserUpdateParams"), RequestType::Post, ContextAndFilterHandler::FilterNoContext, - "fn filter_update (& self , user_id : UserId , params : &UserUpdateParams , fields : & [SparseUserField])")] + "fn filter_update (& self , user_id : & UserId , params : &UserUpdateParams , fields : & [SparseUserField])")] #[case( PartOf::RequestExecutor, format_ident!("Update"), @@ -766,7 +766,7 @@ mod tests { &referenced_params_type("UserUpdateParams"), RequestType::Post, ContextAndFilterHandler::FilterNoContext, - "fn filter_update (& self , user_id : UserId , params : &UserUpdateParams , fields : & [SparseUserField])")] + "fn filter_update (& self , user_id : & UserId , params : &UserUpdateParams , fields : & [SparseUserField])")] #[case( PartOf::RequestBuilder, format_ident!("List"),