mangadex_api/v5/custom_list/
delete.rs1use derive_builder::Builder;
40use serde::Serialize;
41use uuid::Uuid;
42
43use crate::{HttpClientRef, Result};
44use mangadex_api_schema::NoData;
45
46#[derive(Debug, Serialize, Clone, Builder)]
47#[serde(rename_all = "camelCase")]
48#[builder(setter(into, strip_option), pattern = "owned")]
49pub struct DeleteCustomList<'a> {
50 #[doc(hidden)]
52 #[serde(skip)]
53 #[builder(pattern = "immutable")]
54 pub(crate) http_client: HttpClientRef,
55
56 #[serde(skip)]
57 pub list_id: &'a Uuid,
58}
59
60endpoint! {
61 DELETE ("/list/{}", list_id),
62 #[no_data auth] DeleteCustomList<'_>,
63 #[discard_result] Result<NoData>
64}
65
66#[cfg(test)]
67mod tests {
68 use serde_json::json;
69 use url::Url;
70 use uuid::Uuid;
71 use wiremock::matchers::{header, method, path_regex};
72 use wiremock::{Mock, MockServer, ResponseTemplate};
73
74 use crate::v5::AuthTokens;
75 use crate::{HttpClient, MangaDexClient};
76
77 #[tokio::test]
78 async fn delete_custom_list_fires_a_request_to_base_url() -> anyhow::Result<()> {
79 let mock_server = MockServer::start().await;
80 let http_client = HttpClient::builder()
81 .base_url(Url::parse(&mock_server.uri())?)
82 .auth_tokens(AuthTokens {
83 session: "sessiontoken".to_string(),
84 refresh: "refreshtoken".to_string(),
85 })
86 .build()?;
87 let mangadex_client = MangaDexClient::new_with_http_client(http_client);
88
89 let list_id = Uuid::new_v4();
90 let response_body = json!({
91 "result": "ok",
92 });
93
94 Mock::given(method("DELETE"))
95 .and(path_regex(r"/list/[0-9a-fA-F-]+"))
96 .and(header("Authorization", "Bearer sessiontoken"))
97 .respond_with(ResponseTemplate::new(200).set_body_json(response_body))
98 .expect(1)
99 .mount(&mock_server)
100 .await;
101
102 let _ = mangadex_client
103 .custom_list()
104 .delete()
105 .list_id(&list_id)
106 .build()?
107 .send()
108 .await?;
109
110 Ok(())
111 }
112}