mangadex_api/v5/manga/id/status/
get.rs1use derive_builder::Builder;
30use serde::Serialize;
31use uuid::Uuid;
32
33use crate::HttpClientRef;
34use mangadex_api_schema::v5::MangaReadingStatusResponse;
35
36#[cfg_attr(
37 feature = "deserializable-endpoint",
38 derive(serde::Deserialize, getset::Getters, getset::Setters)
39)]
40#[derive(Debug, Serialize, Clone, Builder)]
41#[serde(rename_all = "camelCase")]
42#[builder(
43 setter(into, strip_option),
44 build_fn(error = "mangadex_api_types::error::BuilderError")
45)]
46#[cfg_attr(
47 feature = "custom_list_v2",
48 deprecated(
49 since = "3.0.0-rc.1",
50 note = "After the introduction of the Subscription system, this endpoint will be removed in v3"
51 )
52)]
53pub struct MangaReadingStatus {
54 #[doc(hidden)]
56 #[serde(skip)]
57 #[builder(pattern = "immutable")]
58 #[cfg_attr(feature = "deserializable-endpoint", getset(set = "pub", get = "pub"))]
59 pub http_client: HttpClientRef,
60
61 #[serde(skip_serializing)]
62 pub manga_id: Uuid,
63}
64
65endpoint! {
66 GET ("/manga/{}/status", manga_id),
67 #[no_data auth] MangaReadingStatus,
68 #[flatten_result] MangaReadingStatusResponse,
69 MangaReadingStatusBuilder
70}
71
72#[cfg(test)]
73mod tests {
74 use serde_json::json;
75 use url::Url;
76 use uuid::Uuid;
77 use wiremock::matchers::{header, method, path_regex};
78 use wiremock::{Mock, MockServer, ResponseTemplate};
79
80 use crate::v5::AuthTokens;
81 use crate::{HttpClient, MangaDexClient};
82
83 #[tokio::test]
84 async fn manga_reading_status_fires_a_request_to_base_url() -> anyhow::Result<()> {
85 let mock_server = MockServer::start().await;
86 let http_client = HttpClient::builder()
87 .base_url(Url::parse(&mock_server.uri())?)
88 .auth_tokens(AuthTokens {
89 session: "sessiontoken".to_string(),
90 refresh: "refreshtoken".to_string(),
91 })
92 .build()?;
93 let mangadex_client = MangaDexClient::new_with_http_client(http_client);
94
95 let manga_id = Uuid::new_v4();
96 let response_body = json!({
97 "result": "ok",
98 "status": "reading"
99 });
100
101 Mock::given(method("GET"))
102 .and(path_regex(r"/manga/[0-9a-fA-F-]+/status"))
103 .and(header("Authorization", "Bearer sessiontoken"))
104 .respond_with(ResponseTemplate::new(200).set_body_json(response_body))
105 .expect(1)
106 .mount(&mock_server)
107 .await;
108
109 let _ = mangadex_client
110 .manga()
111 .id(manga_id)
112 .status()
113 .get()
114 .send()
115 .await?;
116
117 Ok(())
118 }
119}