mangadex_api/v5/user/id/
get.rs1use derive_builder::Builder;
31use serde::Serialize;
32use uuid::Uuid;
33
34use crate::HttpClientRef;
35use mangadex_api_schema::v5::UserResponse;
36
37#[cfg_attr(
38 feature = "deserializable-endpoint",
39 derive(serde::Deserialize, getset::Getters, getset::Setters)
40)]
41#[derive(Debug, Serialize, Clone, Builder)]
42#[serde(rename_all = "camelCase")]
43#[builder(
44 setter(into, strip_option),
45 build_fn(error = "mangadex_api_types::error::BuilderError")
46)]
47pub struct GetUser {
48 #[doc(hidden)]
50 #[serde(skip)]
51 #[builder(pattern = "immutable")]
52 #[cfg_attr(feature = "deserializable-endpoint", getset(set = "pub", get = "pub"))]
53 pub http_client: HttpClientRef,
54
55 #[serde(skip_serializing)]
56 pub user_id: Uuid,
57}
58
59endpoint! {
60 GET ("/user/{}", user_id),
61 #[query] GetUser,
62 #[flatten_result] UserResponse,
63 GetUserBuilder
64}
65
66#[cfg(test)]
67mod tests {
68 use serde_json::json;
69 use url::Url;
70 use uuid::Uuid;
71 use wiremock::matchers::{method, path_regex};
72 use wiremock::{Mock, MockServer, ResponseTemplate};
73
74 use crate::{HttpClient, MangaDexClient};
75
76 #[tokio::test]
77 async fn get_user_fires_a_request_to_base_url() -> anyhow::Result<()> {
78 let mock_server = MockServer::start().await;
79 let http_client = HttpClient::builder()
80 .base_url(Url::parse(&mock_server.uri())?)
81 .build()?;
82 let mangadex_client = MangaDexClient::new_with_http_client(http_client);
83
84 let user_id = Uuid::new_v4();
85 let response_body = json!({
86 "result": "ok",
87 "response": "entity",
88 "data": {
89 "id": user_id,
90 "type": "user",
91 "attributes": {
92 "username": "myusername",
93 "roles": [
94 "ROLE_MEMBER",
95 "ROLE_GROUP_MEMBER",
96 "ROLE_GROUP_LEADER"
97 ],
98 "version": 1,
99 },
100 "relationships": [
101 {
102 "id": "a3219a4f-73c0-4213-8730-05985130539a",
103 "type": "scanlation_group"
104 }
105 ]
106 }
107 });
108
109 Mock::given(method("GET"))
110 .and(path_regex(r"/user/[0-9a-fA-F-]+"))
111 .respond_with(ResponseTemplate::new(200).set_body_json(response_body))
112 .expect(1)
113 .mount(&mock_server)
114 .await;
115
116 let _ = mangadex_client.user().id(user_id).get().send().await?;
117
118 Ok(())
119 }
120}