Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
7 changes: 1 addition & 6 deletions native/swift/Example/Example/ListViewData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -185,12 +185,7 @@ extension PostStatusWithEditContext: ListViewDataConvertable {

extension NavigationWithEditContext: ListViewDataConvertable {
var asListViewData: ListViewData {
let title = switch self.title {
case .object(let title): title.rendered
case .string(let string): string
}

return ListViewData(id: self.id.description, title: title ?? "Unknown", subtitle: self.slug, fields: [:])
return ListViewData(id: self.id.description, title: self.title.rendered, subtitle: self.slug, fields: [:])
}
}

Expand Down
48 changes: 25 additions & 23 deletions wp_api/src/navigations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ pub struct SparseNavigation {
#[WpContext(edit, view)]
pub date_gmt: Option<String>,
#[WpContext(edit, view)]
#[WpContextualField]
pub guid: Option<SparseNavigationGuid>,
#[WpContext(edit, embed, view)]
pub id: Option<NavigationId>,
Expand All @@ -69,46 +70,47 @@ pub struct SparseNavigation {
#[WpContextualOption]
pub password: Option<String>,
#[WpContext(edit, embed, view)]
pub title: Option<SparseNavigationTitleWrapper>,
#[WpContextualField]
pub title: Option<SparseNavigationTitle>,
#[WpContext(edit, embed, view)]
pub content: Option<SparseNavigationContentWrapper>,
#[WpContextualField]
pub content: Option<SparseNavigationContent>,
#[WpContext(edit, view)]
#[WpContextualOption]
pub template: Option<String>,
// _meta field omitted
}

#[derive(Debug, Serialize, PartialEq, PartialOrd, Eq, wp_derive::WpDeserialize, uniffi::Record)]
#[derive(Debug, Serialize, Deserialize, WpContextual, uniffi::Record)]
pub struct SparseNavigationGuid {
pub rendered: Option<String>,
#[WpContext(edit)]
#[WpContextualOption]
pub raw: Option<String>,
#[WpContext(edit, view)]
pub rendered: Option<String>,
}

#[derive(Debug, Serialize, PartialEq, PartialOrd, Eq, Deserialize, uniffi::Enum)]
#[serde(untagged)]
pub enum SparseNavigationTitleWrapper {
Object(SparseNavigationTitle),
String(String),
}

#[derive(Debug, Serialize, PartialEq, PartialOrd, Eq, wp_derive::WpDeserialize, uniffi::Record)]
#[derive(Debug, Serialize, Deserialize, WpContextual, uniffi::Record)]
pub struct SparseNavigationTitle {
#[WpContext(edit)]
#[WpContextualOption]
pub raw: Option<String>,
#[WpContext(edit, embed, view)]
pub rendered: Option<String>,
}

#[derive(Debug, Serialize, PartialEq, PartialOrd, Eq, Deserialize, uniffi::Enum)]
#[serde(untagged)]
pub enum SparseNavigationContentWrapper {
Object(SparseNavigationContent),
String(String),
}

#[derive(Debug, Serialize, PartialEq, PartialOrd, Eq, wp_derive::WpDeserialize, uniffi::Record)]
#[derive(Debug, Serialize, Deserialize, WpContextual, uniffi::Record)]
pub struct SparseNavigationContent {
#[WpContext(edit)]
#[WpContextualOption]
pub raw: Option<String>,
#[WpContext(edit, embed, view)]
pub rendered: Option<String>,
#[WpContext(edit, embed, view)]
#[WpContextualOption]
pub protected: Option<bool>,
#[WpContext(edit, embed, view)]
#[WpContextualOption]
pub block_version: Option<u32>,
}

Expand Down Expand Up @@ -151,7 +153,7 @@ pub struct NavigationListParams {
/// Sort collection by post attribute.
#[uniffi(default = None)]
#[field_name("orderby")]
pub order_by: Option<NavigationOrderBy>,
pub order_by: Option<WpApiParamNavigationsOrderBy>,
/// Array of column names to be searched.
#[uniffi(default = [])]
pub search_columns: Vec<String>,
Expand Down Expand Up @@ -180,7 +182,7 @@ pub struct NavigationListParams {
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum NavigationOrderBy {
pub enum WpApiParamNavigationsOrderBy {
Author,
#[default]
Date,
Expand All @@ -194,7 +196,7 @@ pub enum NavigationOrderBy {
Title,
}

impl_as_query_value_from_to_string!(NavigationOrderBy);
impl_as_query_value_from_to_string!(WpApiParamNavigationsOrderBy);

#[derive(Debug, Default, PartialEq, Eq, uniffi::Record, WpDeriveParamsField)]
#[supports_pagination(false)]
Expand Down
1 change: 0 additions & 1 deletion wp_api/src/request/endpoint/posts_endpoint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ enum PostsRequest {
pub enum PostEndpointType {
Posts,
Pages,
Navigation,
#[strum(default)]
Custom(String),
}
Expand Down
107 changes: 41 additions & 66 deletions wp_api_integration_tests/tests/test_navigations_err.rs
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
use wp_api::{
posts::{
PostCreateParams, PostId, PostListParams, PostRetrieveParams, PostUpdateParams,
WpApiParamPostsOrderBy,
},
request::endpoint::posts_endpoint::PostEndpointType,
use wp_api::navigations::{
NavigationCreateParams, NavigationId, NavigationListParams, NavigationRetrieveParams,
NavigationUpdateParams, WpApiParamNavigationsOrderBy,
};
use wp_api_integration_tests::prelude::*;

#[tokio::test]
#[parallel]
async fn create_navigation_err_cannot_create() {
api_client_as_subscriber()
.posts()
.create(
&PostEndpointType::Navigation,
&PostCreateParams {
..Default::default()
},
)
.navigations()
.create(&NavigationCreateParams {
..Default::default()
})
.await
.assert_wp_error(WpErrorCode::CannotCreate);
}
Expand All @@ -26,14 +20,11 @@ async fn create_navigation_err_cannot_create() {
#[parallel]
async fn create_navigation_err_cannot_create2() {
api_client_as_subscriber()
.posts()
.create(
&PostEndpointType::Navigation,
&PostCreateParams {
title: Some("foo".to_string()),
..Default::default()
},
)
.navigations()
.create(&NavigationCreateParams {
title: Some("foo".to_string()),
..Default::default()
})
.await
.assert_wp_error(WpErrorCode::CannotCreate);
}
Expand All @@ -42,11 +33,8 @@ async fn create_navigation_err_cannot_create2() {
#[parallel]
async fn delete_navigation_err_cannot_delete() {
api_client_as_subscriber()
.posts()
.delete(
&PostEndpointType::Navigation,
&PostId(TestCredentials::instance().navigation_id),
)
.navigations()
.delete(&NavigationId(TestCredentials::instance().navigation_id))
.await
.assert_wp_error(WpErrorCode::CannotDelete);
}
Expand All @@ -55,14 +43,11 @@ async fn delete_navigation_err_cannot_delete() {
#[parallel]
async fn list_err_no_search_term_defined() {
api_client()
.posts()
.list_with_edit_context(
&PostEndpointType::Navigation,
&PostListParams {
orderby: Some(WpApiParamPostsOrderBy::Relevance),
..Default::default()
},
)
.navigations()
.list_with_edit_context(&NavigationListParams {
order_by: Some(WpApiParamNavigationsOrderBy::Relevance),
..Default::default()
})
.await
.assert_wp_error(WpErrorCode::NoSearchTermDefined);
}
Expand All @@ -71,14 +56,11 @@ async fn list_err_no_search_term_defined() {
#[parallel]
async fn list_err_order_by_include_missing_include() {
api_client()
.posts()
.list_with_edit_context(
&PostEndpointType::Navigation,
&PostListParams {
orderby: Some(WpApiParamPostsOrderBy::Include),
..Default::default()
},
)
.navigations()
.list_with_edit_context(&NavigationListParams {
order_by: Some(WpApiParamNavigationsOrderBy::Include),
..Default::default()
})
.await
.assert_wp_error(WpErrorCode::OrderbyIncludeMissingInclude);
}
Expand All @@ -87,14 +69,11 @@ async fn list_err_order_by_include_missing_include() {
#[parallel]
async fn list_err_post_invalid_page_number() {
api_client()
.posts()
.list_with_edit_context(
&PostEndpointType::Navigation,
&PostListParams {
page: Some(99999999),
..Default::default()
},
)
.navigations()
.list_with_edit_context(&NavigationListParams {
page: Some(99999999),
..Default::default()
})
.await
.assert_wp_error(WpErrorCode::PostInvalidPageNumber);
}
Expand All @@ -103,11 +82,10 @@ async fn list_err_post_invalid_page_number() {
#[parallel]
async fn retrieve_navigation_err_forbidden_context() {
api_client_as_subscriber()
.posts()
.navigations()
.retrieve_with_edit_context(
&PostEndpointType::Navigation,
&PostId(TestCredentials::instance().navigation_id),
&PostRetrieveParams::default(),
&NavigationId(TestCredentials::instance().navigation_id),
&NavigationRetrieveParams::default(),
)
.await
.assert_wp_error(WpErrorCode::ForbiddenContext);
Expand All @@ -117,11 +95,10 @@ async fn retrieve_navigation_err_forbidden_context() {
#[parallel]
async fn retrieve_navigation_err_post_invalid_id() {
api_client()
.posts()
.navigations()
.retrieve_with_edit_context(
&PostEndpointType::Navigation,
&PostId(99999999),
&PostRetrieveParams::default(),
&NavigationId(99999999),
&NavigationRetrieveParams::default(),
)
.await
.assert_wp_error(WpErrorCode::PostInvalidId);
Expand All @@ -131,11 +108,10 @@ async fn retrieve_navigation_err_post_invalid_id() {
#[parallel]
async fn update_navigation_err_cannot_edit() {
api_client_as_author()
.posts()
.navigations()
.update(
&PostEndpointType::Navigation,
&PostId(TestCredentials::instance().navigation_id),
&PostUpdateParams::default(),
&NavigationId(TestCredentials::instance().navigation_id),
&NavigationUpdateParams::default(),
)
.await
.assert_wp_error(WpErrorCode::CannotEdit);
Expand All @@ -145,11 +121,10 @@ async fn update_navigation_err_cannot_edit() {
#[parallel]
async fn update_navigation_err_invalid_template() {
api_client()
.posts()
.navigations()
.update(
&PostEndpointType::Navigation,
&PostId(TestCredentials::instance().navigation_id),
&PostUpdateParams {
&NavigationId(TestCredentials::instance().navigation_id),
&NavigationUpdateParams {
template: Some("foo".to_string()),
..Default::default()
},
Expand Down
Loading