mangadex_api/v5/user/list/default/
get.rs1use derive_builder::Builder;
44use mangadex_api_types::ReferenceExpansionResource;
45use serde::Serialize;
46
47use crate::HttpClientRef;
48use mangadex_api_schema::v5::CustomListListResponse;
49
50#[cfg_attr(
51 feature = "deserializable-endpoint",
52 derive(serde::Deserialize, getset::Getters, getset::Setters)
53)]
54#[derive(Debug, Serialize, Clone, Builder, Default)]
55#[serde(rename_all = "camelCase")]
56#[builder(
57 setter(into, strip_option),
58 default,
59 build_fn(error = "mangadex_api_types::error::BuilderError")
60)]
61pub struct MyDefaultCustomLists {
62 #[doc(hidden)]
64 #[serde(skip)]
65 #[builder(pattern = "immutable")]
66 #[cfg_attr(feature = "deserializable-endpoint", getset(set = "pub", get = "pub"))]
67 pub http_client: HttpClientRef,
68
69 #[serde(skip_serializing_if = "Vec::is_empty")]
70 #[builder(setter(each = "include"))]
71 pub includes: Vec<ReferenceExpansionResource>,
72}
73
74endpoint! {
75 GET "/user/list/default",
76 #[query auth] MyDefaultCustomLists,
77 #[flatten_result] CustomListListResponse,
78 MyDefaultCustomListsBuilder
79}
80
81#[cfg(test)]
82mod tests {
83 use fake::faker::name::en::Name;
84 use fake::Fake;
85 use serde_json::json;
86 use url::Url;
87 use uuid::Uuid;
88 use wiremock::matchers::{header, method, path};
89 use wiremock::{Mock, MockServer, ResponseTemplate};
90
91 use crate::v5::AuthTokens;
92 use crate::{HttpClient, MangaDexClient};
93
94 #[tokio::test]
95 async fn get_my_default_custom_lists_fires_a_request_to_base_url() -> anyhow::Result<()> {
96 let mock_server = MockServer::start().await;
97 let http_client = HttpClient::builder()
98 .base_url(Url::parse(&mock_server.uri())?)
99 .auth_tokens(AuthTokens {
100 session: "sessiontoken".to_string(),
101 refresh: "refreshtoken".to_string(),
102 })
103 .build()?;
104 let mangadex_client = MangaDexClient::new_with_http_client(http_client);
105
106 let list_id = Uuid::new_v4();
107 let list_name: String = Name().fake();
108 let response_body = json!({
109 "result": "ok",
110 "response": "collection",
111 "data": [
112 {
113 "id": list_id,
114 "type": "custom_list",
115 "attributes": {
116 "name": list_name,
117 "visibility": "private",
118 "version": 1
119 },
120 "relationships": []
121 }
122 ],
123 "limit": 1,
124 "offset": 0,
125 "total": 1
126 });
127
128 Mock::given(method("GET"))
129 .and(path(r"/user/list/default"))
130 .and(header("Authorization", "Bearer sessiontoken"))
131 .respond_with(ResponseTemplate::new(200).set_body_json(response_body))
132 .expect(1)
133 .mount(&mock_server)
134 .await;
135
136 let _ = mangadex_client.user().list().default().get().send().await?;
137
138 Ok(())
139 }
140}