mangadex_api/v5/upload/
get.rs1use derive_builder::Builder;
41use mangadex_api_schema::v5::UploadSessionData;
42use serde::Serialize;
43
44use crate::HttpClientRef;
45
46#[cfg_attr(
47 feature = "deserializable-endpoint",
48 derive(serde::Deserialize, getset::Getters, getset::Setters)
49)]
50#[derive(Debug, Serialize, Clone, Builder)]
51#[serde(rename_all = "camelCase")]
52#[builder(
53 setter(into, strip_option),
54 build_fn(error = "crate::error::BuilderError")
55)]
56#[non_exhaustive]
57pub struct GetUploadSession {
58 #[doc(hidden)]
60 #[serde(skip)]
61 #[builder(pattern = "immutable")]
62 #[cfg_attr(feature = "deserializable-endpoint", getset(set = "pub", get = "pub"))]
63 pub http_client: HttpClientRef,
64}
65
66endpoint! {
67 GET "/upload",
68 #[no_data auth] GetUploadSession,
69 #[rate_limited] UploadSessionData,
70 GetUploadSessionBuilder
71}
72
73#[cfg(test)]
74mod tests {
75 use mangadex_api_schema::v5::AuthTokens;
76 use serde_json::json;
77 use time::OffsetDateTime;
78 use url::Url;
79 use wiremock::matchers::{method, path};
80 use wiremock::{Mock, MockServer, ResponseTemplate};
81
82 use crate::{HttpClient, MangaDexClient};
83 use mangadex_api_types::MangaDexDateTime;
84
85 #[tokio::test]
86 async fn get_upload_session_fires_a_request_to_base_url() -> anyhow::Result<()> {
87 let mock_server = MockServer::start().await;
88 let http_client = HttpClient::builder()
89 .base_url(Url::parse(&mock_server.uri())?)
90 .auth_tokens(non_exhaustive::non_exhaustive!(AuthTokens {
91 session: "sessiontoken".to_string(),
92 refresh: "refreshtoken".to_string(),
93 }))
94 .build()?;
95 let mangadex_client = MangaDexClient::new_with_http_client(http_client);
96
97 let datetime = MangaDexDateTime::new(&OffsetDateTime::now_utc());
98
99 let response_body = json!({
100 "result": "ok",
101 "response": "entity",
102 "data" : {
103 "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
104 "type": "upload_session",
105 "attributes": {
106 "isCommitted": true,
107 "isProcessed": true,
108 "isDeleted": true,
109 "version": 1,
110 "createdAt": datetime.to_string(),
111 "updatedAt": datetime.to_string(),
112 },
113 "relationships": []
114 }
115 });
116
117 Mock::given(method("GET"))
118 .and(path(r"/upload"))
119 .respond_with(
120 ResponseTemplate::new(200)
121 .insert_header("x-ratelimit-retry-after", "1698723860")
122 .insert_header("x-ratelimit-limit", "40")
123 .insert_header("x-ratelimit-remaining", "39")
124 .set_body_json(response_body),
125 )
126 .expect(1)
127 .mount(&mock_server)
128 .await;
129
130 let _ = mangadex_client.upload().get().send().await?;
131
132 Ok(())
133 }
134}