gewe_http/
tag.rs

1use crate::client::GeweHttpClient;
2use gewe_core::{
3    AddLabelRequest, AddLabelResponse, DeleteLabelRequest, GeweError, ListLabelRequest,
4    ListLabelResponse, ModifyLabelMemberRequest,
5};
6use tracing::instrument;
7
8impl GeweHttpClient {
9    #[instrument(skip(self))]
10    pub async fn add_label(&self, req: AddLabelRequest<'_>) -> Result<AddLabelResponse, GeweError> {
11        let env = self
12            .post_api::<_, AddLabelResponse>("gewe/v2/api/label/add", &req)
13            .await?;
14        env.data.ok_or(GeweError::MissingData)
15    }
16
17    #[instrument(skip(self))]
18    pub async fn delete_label(&self, req: DeleteLabelRequest<'_>) -> Result<(), GeweError> {
19        self.post_api::<_, serde_json::Value>("gewe/v2/api/label/delete", &req)
20            .await?;
21        Ok(())
22    }
23
24    #[instrument(skip(self))]
25    pub async fn list_labels(
26        &self,
27        req: ListLabelRequest<'_>,
28    ) -> Result<ListLabelResponse, GeweError> {
29        let env = self
30            .post_api::<_, ListLabelResponse>("gewe/v2/api/label/list", &req)
31            .await?;
32        env.data.ok_or(GeweError::MissingData)
33    }
34
35    #[instrument(skip(self))]
36    pub async fn modify_label_members(
37        &self,
38        req: ModifyLabelMemberRequest<'_>,
39    ) -> Result<(), GeweError> {
40        self.post_api::<_, serde_json::Value>("gewe/v2/api/label/modifyMemberList", &req)
41            .await?;
42        Ok(())
43    }
44}
45
46#[cfg(test)]
47mod tests {
48    use super::*;
49
50    #[test]
51    fn test_add_label_request() {
52        let req = AddLabelRequest {
53            app_id: "test_app",
54            label_name: "Friends",
55        };
56        let json = serde_json::to_string(&req).expect("Failed to serialize");
57        assert!(json.contains("appId"));
58        assert!(json.contains("labelName"));
59    }
60
61    #[test]
62    fn test_delete_label_request() {
63        let req = DeleteLabelRequest {
64            app_id: "test_app",
65            label_ids: "1,2,3",
66        };
67        let json = serde_json::to_string(&req).expect("Failed to serialize");
68        assert!(json.contains("appId"));
69        assert!(json.contains("labelIds"));
70    }
71
72    #[test]
73    fn test_list_labels_request() {
74        let req = ListLabelRequest { app_id: "test_app" };
75        let json = serde_json::to_string(&req).expect("Failed to serialize");
76        assert!(json.contains("appId"));
77    }
78
79    #[test]
80    fn test_modify_label_members_request() {
81        let req = ModifyLabelMemberRequest {
82            app_id: "test_app",
83            label_ids: "1,2",
84            wx_ids: vec!["wxid1", "wxid2"],
85        };
86        let json = serde_json::to_string(&req).expect("Failed to serialize");
87        assert!(json.contains("appId"));
88        assert!(json.contains("labelIds"));
89        assert!(json.contains("wxIds"));
90    }
91}