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