Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
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
4 changes: 2 additions & 2 deletions wp_api/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
pub use api_client::{WpApiClient, WpApiRequestBuilder};
pub use api_error::{
MediaUploadRequestExecutionError, ParsedRequestError, RequestExecutionError,
RequestExecutionErrorReason, WpApiError, WpError, WpErrorCode,
InvalidSslErrorReason, MediaUploadRequestExecutionError, ParsedRequestError,
RequestExecutionError, RequestExecutionErrorReason, WpApiError, WpError, WpErrorCode,
};
pub use parsed_url::{ParseUrlError, ParsedUrl};
use plugins::*;
Expand Down
10 changes: 5 additions & 5 deletions wp_api/src/login.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub fn extract_login_details_from_parsed_url(
})
}

#[derive(Debug, Clone, Serialize, Deserialize, uniffi::Object)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, uniffi::Object)]
pub struct WpApiDetails {
pub name: String,
pub description: String,
Expand Down Expand Up @@ -137,7 +137,7 @@ impl WpApiDetails {
}
}

#[derive(Debug, Clone, Serialize, Deserialize, uniffi::Record)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, uniffi::Record)]
pub struct KnownApplicationPasswordBlockingPlugin {
/// The name of the plugin.
pub name: String,
Expand Down Expand Up @@ -172,12 +172,12 @@ impl KnownApplicationPasswordBlockingPlugin {
}
}

#[derive(Debug, Clone, Serialize, Deserialize, uniffi::Record)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, uniffi::Record)]
pub struct WpRestApiAuthenticationScheme {
pub endpoints: Option<WpRestApiAuthenticationEndpoint>,
}

#[derive(Debug, Clone, Serialize, Deserialize, uniffi::Record)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, uniffi::Record)]
pub struct WpRestApiAuthenticationEndpoint {
pub authorization: String,
}
Expand Down Expand Up @@ -216,7 +216,7 @@ impl WpSupportsLocalization for OAuthResponseUrlError {
}
}

#[derive(Debug, Clone, Serialize)]
#[derive(Debug, Clone, Serialize, PartialEq)]
pub struct WpApiDetailsAuthenticationMap(HashMap<String, WpRestApiAuthenticationScheme>);

// If the response is `[]`, default to an empty `HashMap`
Expand Down
8 changes: 4 additions & 4 deletions wp_api/src/login/url_discovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ pub struct AutoDiscoveryAttemptSuccess {
pub api_details: Arc<WpApiDetails>,
}

#[derive(Debug, Clone, thiserror::Error, uniffi::Error, WpDeriveLocalizable)]
#[derive(Debug, Clone, PartialEq, thiserror::Error, uniffi::Error, WpDeriveLocalizable)]
pub enum AutoDiscoveryAttemptFailure {
ParseSiteUrl {
error: ParseUrlError,
Expand Down Expand Up @@ -427,7 +427,7 @@ impl WpSupportsLocalization for AutoDiscoveryAttemptFailure {
}
}

#[derive(Debug, Clone, uniffi::Enum)]
#[derive(Debug, Clone, PartialEq, uniffi::Enum)]
pub enum FindApiRootFailure {
FetchHomepage { error: RequestExecutionError },
// if no WP mentions
Expand Down Expand Up @@ -461,7 +461,7 @@ impl FindApiRootFailure {
}
}

#[derive(Debug, Clone, uniffi::Enum)]
#[derive(Debug, Clone, PartialEq, uniffi::Enum)]
pub enum FetchAndParseApiRootFailure {
FetchApiRoot {
error: RequestExecutionError,
Expand Down Expand Up @@ -510,7 +510,7 @@ impl FetchAndParseApiRootFailure {
}
}

#[derive(Debug, Clone, uniffi::Enum)]
#[derive(Debug, Clone, PartialEq, uniffi::Enum)]
pub enum ApplicationPasswordsNotSupportedReason {
ApplicationPasswordBlockedByPlugin {
plugin: KnownApplicationPasswordBlockingPlugin,
Expand Down
4 changes: 2 additions & 2 deletions wp_api/src/middleware.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,15 +114,15 @@ pub trait PerformsRequests {
// MARK: - RetryAfterMiddleware

#[derive(Debug, uniffi::Object)]
struct RetryAfterMiddleware {
pub struct RetryAfterMiddleware {
max_retries: u8,
max_retry_wait_seconds: u64,
}

#[uniffi::export]
impl RetryAfterMiddleware {
#[uniffi::constructor]
fn new(max_retries: u8, max_retry_wait_seconds: u64) -> Self {
pub fn new(max_retries: u8, max_retry_wait_seconds: u64) -> Self {
println!("Creating retry middleware");
Self {
max_retries,
Expand Down
2 changes: 2 additions & 0 deletions wp_api_integration_tests/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ use wp_api::{
reqwest_request_executor::ReqwestRequestExecutor, tags::TagId, users::UserId,
};

pub mod mock;

// A `TestCredentials::instance()` function will be generated by this
include!(concat!(env!("OUT_DIR"), "/generated_test_credentials.rs"));

Expand Down
117 changes: 117 additions & 0 deletions wp_api_integration_tests/src/mock.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
use async_trait::async_trait;
use std::sync::Arc;
use wp_api::{
MediaUploadRequestExecutionError, RequestExecutionError,
request::{
RequestExecutor, WpNetworkRequest, WpNetworkResponse,
endpoint::media_endpoint::MediaUploadRequest,
},
};

#[derive(Debug)]
pub struct MockExecutor {
execute_fn: fn(Arc<WpNetworkRequest>) -> Result<WpNetworkResponse, RequestExecutionError>,
upload_media_fn:
fn(Arc<MediaUploadRequest>) -> Result<WpNetworkResponse, MediaUploadRequestExecutionError>,
}

impl MockExecutor {
pub fn with_execute_fn(
execute_fn: fn(Arc<WpNetworkRequest>) -> Result<WpNetworkResponse, RequestExecutionError>,
) -> Self {
Self {
execute_fn,
upload_media_fn: |_: Arc<MediaUploadRequest>| {
panic!("Upload media is not implemented for `MockExecutor`")
},
}
}
}

#[async_trait]
impl RequestExecutor for MockExecutor {
async fn execute(
&self,
request: Arc<WpNetworkRequest>,
) -> Result<WpNetworkResponse, RequestExecutionError> {
(self.execute_fn)(request)
}

async fn upload_media(
&self,
media_upload_request: Arc<MediaUploadRequest>,
) -> Result<WpNetworkResponse, MediaUploadRequestExecutionError> {
(self.upload_media_fn)(media_upload_request)
}

async fn sleep(&self, _: u64) {}
}

pub mod response_helpers {
use http::{HeaderMap, header::HeaderValue};
use std::{fs, path::Path, sync::Arc};
use wp_api::request::{WpNetworkHeaderMap, WpNetworkResponse, endpoint::WpEndpointUrl};

pub fn with_api_root(url: &str) -> WpNetworkResponse {
let mut map = HeaderMap::new();
let link_header_value = format!("<{url}>; rel=\"https://api.w.org/\"");
map.insert(
http::header::LINK,
HeaderValue::from_str(&link_header_value).expect("Failed to create Link header"),
);
WpNetworkResponse {
body: vec![],
status_code: 200,
response_header_map: Arc::new(map.into()),
request_url: WpEndpointUrl("".to_string()),
request_header_map: WpNetworkHeaderMap::default().into(),
}
}

pub fn json_response_from_path(json_file_path: &Path) -> WpNetworkResponse {
let json = fs::read_to_string(json_file_path).unwrap_or_else(|_| {
panic!(
"Should have been able to read the json file at: '{:#?}'",
json_file_path
)
});
let mut map = HeaderMap::new();
map.insert(
http::header::CONTENT_TYPE,
HeaderValue::from_static("application/json"),
);
WpNetworkResponse {
body: json.as_bytes().to_vec(),
status_code: 200,
response_header_map: Arc::new(map.into()),
request_url: WpEndpointUrl("".to_string()),
request_header_map: WpNetworkHeaderMap::default().into(),
}
}

pub fn retry_response(delay: usize) -> WpNetworkResponse {
let mut map = HeaderMap::new();
map.insert(
http::header::RETRY_AFTER,
HeaderValue::from_str(format!("{delay}").as_str())
.expect("Failed to create Retry-After header"),
);
WpNetworkResponse {
body: vec![],
status_code: 429,
response_header_map: Arc::new(map.into()),
request_url: WpEndpointUrl("".to_string()),
request_header_map: WpNetworkHeaderMap::default().into(),
}
}

pub fn empty_response(status_code: u16) -> WpNetworkResponse {
WpNetworkResponse {
body: vec![],
status_code,
response_header_map: WpNetworkHeaderMap::default().into(),
request_url: WpEndpointUrl("".to_string()),
request_header_map: WpNetworkHeaderMap::default().into(),
}
}
}
120 changes: 0 additions & 120 deletions wp_api_integration_tests/tests/test_login_err.rs

This file was deleted.

Loading