Skip to content

Commit

Permalink
Retrieve /media endpoint (#385)
Browse files Browse the repository at this point in the history
  • Loading branch information
oguzkocer authored Nov 14, 2024
1 parent 266c00e commit a91b1be
Show file tree
Hide file tree
Showing 3 changed files with 180 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package rs.wordpress.api.kotlin

import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.Test
import uniffi.wp_api.MediaListParams
import uniffi.wp_api.SparseMediaFieldWithEditContext
import uniffi.wp_api.wpAuthenticationFromUsernameAndPassword
import kotlin.test.assertNotNull

private const val MEDIA_ID_611 = 611

class MediaEndpointTest {
private val testCredentials = TestCredentials.INSTANCE
Expand All @@ -20,4 +25,42 @@ class MediaEndpointTest {
}.assertSuccessAndRetrieveData().data
assert(mediaList.isNotEmpty())
}

@Test
fun testRetrieveMediaRequest() = runTest {
val media = client.request { requestBuilder ->
requestBuilder.media().retrieveWithEditContext(MEDIA_ID_611)
}.assertSuccessAndRetrieveData().data
assertNotNull(media)
}

@Test
fun testFilterMediaListRequest() = runTest {
val postList = client.request { requestBuilder ->
requestBuilder.media().filterListWithEditContext(
params = MediaListParams(),
fields = listOf(
SparseMediaFieldWithEditContext.DATE,
SparseMediaFieldWithEditContext.TITLE
)
)
}.assertSuccessAndRetrieveData().data
assert(postList.isNotEmpty())
assertNull(postList.first().slug)
}

@Test
fun testFilterRetrieveMediaRequest() = runTest {
val sparseMedia = client.request { requestBuilder ->
requestBuilder.media().filterRetrieveWithEditContext(
mediaId = MEDIA_ID_611,
fields = listOf(
SparseMediaFieldWithEditContext.DATE,
SparseMediaFieldWithEditContext.TITLE
)
)
}.assertSuccessAndRetrieveData().data
assertNotNull(sparseMedia)
assertNull(sparseMedia.slug)
}
}
58 changes: 56 additions & 2 deletions wp_api/src/request/endpoint/media_endpoint.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use super::{AsNamespace, DerivedRequest, WpNamespace};
use crate::{
media::{
MediaListParams, SparseMediaFieldWithEditContext, SparseMediaFieldWithEmbedContext,
SparseMediaFieldWithViewContext,
MediaId, MediaListParams, SparseMediaFieldWithEditContext,
SparseMediaFieldWithEmbedContext, SparseMediaFieldWithViewContext,
},
SparseField,
};
Expand All @@ -12,6 +12,8 @@ use wp_derive_request_builder::WpDerivedRequest;
enum MediaRequest {
#[contextual_paged(url = "/media", params = &MediaListParams, output = Vec<crate::media::SparseMedia>, filter_by = crate::media::SparseMediaField)]
List,
#[contextual_get(url = "/media/<media_id>", output = crate::media::SparseMedia, filter_by = crate::media::SparseMediaField)]
Retrieve,
}

impl DerivedRequest for MediaRequest {
Expand Down Expand Up @@ -183,6 +185,58 @@ mod tests {
);
}

#[rstest]
fn retrieve_media(endpoint: MediaRequestEndpoint) {
let media_id = MediaId(77);
validate_wp_v2_endpoint(
endpoint.retrieve_with_edit_context(&media_id),
"/media/77?context=edit",
);
validate_wp_v2_endpoint(
endpoint.retrieve_with_embed_context(&media_id),
"/media/77?context=embed",
);
validate_wp_v2_endpoint(
endpoint.retrieve_with_view_context(&media_id),
"/media/77?context=view",
);
}

#[rstest]
fn filter_retrieve_media(endpoint: MediaRequestEndpoint) {
let media_id = MediaId(77);
validate_wp_v2_endpoint(
endpoint.filter_retrieve_with_edit_context(
&media_id,
&[
SparseMediaFieldWithEditContext::Date,
SparseMediaFieldWithEditContext::Guid,
],
),
"/media/77?context=edit&_fields=date%2Cguid",
);
validate_wp_v2_endpoint(
endpoint.filter_retrieve_with_embed_context(
&media_id,
&[
SparseMediaFieldWithEmbedContext::Link,
SparseMediaFieldWithEmbedContext::PostType,
],
),
"/media/77?context=embed&_fields=link%2Ctype",
);
validate_wp_v2_endpoint(
endpoint.filter_retrieve_with_view_context(
&media_id,
&[
SparseMediaFieldWithViewContext::AltText,
SparseMediaFieldWithViewContext::Template,
],
),
"/media/77?context=view&_fields=alt_text%2Ctemplate",
);
}

const EXPECTED_QUERY_PAIRS_FOR_MEDIA_LIST_PARAMS_WITH_ALL_FIELDS: &str =
"page=11&per_page=22&search=s_q&after=d_a&modified_after=d_m_a&author=111%2C112&author_exclude=211%2C212&before=d_b&modified_before=d_m_b&exclude=1111%2C1112&include=2111%2C2112&offset=11111&order=desc&orderby=slug&parent=44444%2C44445&search_columns=post_content%2Cpost_excerpt&slug=sl_1%2Csl_2&status=inherit%2Cprivate%2Ctrash&parent_exclude=55555%2C55556&media_type=image&mime_type=image%2Fjpeg";
fn media_list_params_with_all_fields() -> MediaListParams {
Expand Down
82 changes: 81 additions & 1 deletion wp_api_integration_tests/tests/test_media_immut.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ use wp_api::{
posts::{PostId, WpApiParamPostsOrderBy, WpApiParamPostsSearchColumn},
WpApiParamOrder,
};
use wp_api_integration_tests::{api_client, AssertResponse, FIRST_USER_ID, SECOND_USER_ID};
use wp_api_integration_tests::{
api_client, AssertResponse, FIRST_USER_ID, MEDIA_ID_611, SECOND_USER_ID,
};

#[tokio::test]
#[apply(list_cases)]
Expand Down Expand Up @@ -45,6 +47,36 @@ async fn list_with_view_context(#[case] params: MediaListParams) {
.assert_response();
}

#[tokio::test]
#[parallel]
async fn retrieve_with_edit_context() {
api_client()
.media()
.retrieve_with_edit_context(&MEDIA_ID_611)
.await
.assert_response();
}

#[tokio::test]
#[parallel]
async fn retrieve_with_embed_context() {
api_client()
.media()
.retrieve_with_embed_context(&MEDIA_ID_611)
.await
.assert_response();
}

#[tokio::test]
#[parallel]
async fn retrieve_with_view_context() {
api_client()
.media()
.retrieve_with_view_context(&MEDIA_ID_611)
.await
.assert_response();
}

#[tokio::test]
#[rstest]
#[parallel]
Expand Down Expand Up @@ -132,6 +164,22 @@ mod filter {
});
}

#[apply(sparse_media_field_with_edit_context_test_cases)]
#[case(&[SparseMediaFieldWithEditContext::Id, SparseMediaFieldWithEditContext::Author])]
#[tokio::test]
#[parallel]
async fn filter_retrieve_media_with_edit_context(
#[case] fields: &[SparseMediaFieldWithEditContext],
) {
let media = api_client()
.media()
.filter_retrieve_with_edit_context(&MEDIA_ID_611, fields)
.await
.assert_response()
.data;
media.assert_that_instance_fields_nullability_match_provided_fields(fields);
}

#[apply(sparse_media_field_with_embed_context_test_cases)]
#[case(&[SparseMediaFieldWithEmbedContext::Id, SparseMediaFieldWithEmbedContext::Author])]
#[tokio::test]
Expand All @@ -157,6 +205,22 @@ mod filter {
});
}

#[apply(sparse_media_field_with_embed_context_test_cases)]
#[case(&[SparseMediaFieldWithEmbedContext::Id, SparseMediaFieldWithEmbedContext::Author])]
#[tokio::test]
#[parallel]
async fn filter_retrieve_media_with_embed_context(
#[case] fields: &[SparseMediaFieldWithEmbedContext],
) {
let media = api_client()
.media()
.filter_retrieve_with_embed_context(&MEDIA_ID_611, fields)
.await
.assert_response()
.data;
media.assert_that_instance_fields_nullability_match_provided_fields(fields);
}

#[apply(sparse_media_field_with_view_context_test_cases)]
#[case(&[SparseMediaFieldWithViewContext::Id, SparseMediaFieldWithViewContext::Author])]
#[tokio::test]
Expand All @@ -181,4 +245,20 @@ mod filter {
media.assert_that_instance_fields_nullability_match_provided_fields(fields)
});
}

#[apply(sparse_media_field_with_view_context_test_cases)]
#[case(&[SparseMediaFieldWithViewContext::Id, SparseMediaFieldWithViewContext::Author])]
#[tokio::test]
#[parallel]
async fn filter_retrieve_media_with_view_context(
#[case] fields: &[SparseMediaFieldWithViewContext],
) {
let media = api_client()
.media()
.filter_retrieve_with_view_context(&MEDIA_ID_611, fields)
.await
.assert_response()
.data;
media.assert_that_instance_fields_nullability_match_provided_fields(fields);
}
}

0 comments on commit a91b1be

Please sign in to comment.