gewe_http/group/
manage.rs

1use crate::client::GeweHttpClient;
2use gewe_core::{
3    CreateChatroomRequest, CreateChatroomResponse, DisbandChatroomRequest,
4    ModifyChatroomNameRequest, ModifyChatroomNickNameForSelfRequest, ModifyChatroomRemarkRequest,
5    QuitChatroomRequest,
6};
7use tracing::instrument;
8
9impl GeweHttpClient {
10    #[instrument(skip(self))]
11    pub async fn create_chatroom(
12        &self,
13        req: CreateChatroomRequest<'_>,
14    ) -> Result<CreateChatroomResponse, gewe_core::GeweError> {
15        let env = self
16            .post_api::<_, CreateChatroomResponse>("gewe/v2/api/group/createChatroom", &req)
17            .await?;
18        env.data.ok_or(gewe_core::GeweError::MissingData)
19    }
20
21    #[instrument(skip(self))]
22    pub async fn disband_chatroom(
23        &self,
24        req: DisbandChatroomRequest<'_>,
25    ) -> Result<(), gewe_core::GeweError> {
26        let _ = self
27            .post_api::<_, ()>("gewe/v2/api/group/disbandChatroom", &req)
28            .await?;
29        Ok(())
30    }
31
32    #[instrument(skip(self))]
33    pub async fn quit_chatroom(
34        &self,
35        req: QuitChatroomRequest<'_>,
36    ) -> Result<(), gewe_core::GeweError> {
37        let _ = self
38            .post_api::<_, ()>("gewe/v2/api/group/quitChatroom", &req)
39            .await?;
40        Ok(())
41    }
42
43    #[instrument(skip(self))]
44    pub async fn modify_chatroom_name(
45        &self,
46        req: ModifyChatroomNameRequest<'_>,
47    ) -> Result<(), gewe_core::GeweError> {
48        let _ = self
49            .post_api::<_, ()>("gewe/v2/api/group/modifyChatroomName", &req)
50            .await?;
51        Ok(())
52    }
53
54    #[instrument(skip(self))]
55    pub async fn modify_chatroom_remark(
56        &self,
57        req: ModifyChatroomRemarkRequest<'_>,
58    ) -> Result<(), gewe_core::GeweError> {
59        let _ = self
60            .post_api::<_, ()>("gewe/v2/api/group/modifyChatroomRemark", &req)
61            .await?;
62        Ok(())
63    }
64
65    #[instrument(skip(self))]
66    pub async fn modify_chatroom_nick_name_for_self(
67        &self,
68        req: ModifyChatroomNickNameForSelfRequest<'_>,
69    ) -> Result<(), gewe_core::GeweError> {
70        let _ = self
71            .post_api::<_, ()>("gewe/v2/api/group/modifyChatroomNickNameForSelf", &req)
72            .await?;
73        Ok(())
74    }
75}
76
77#[cfg(test)]
78mod tests {
79    use super::*;
80
81    #[test]
82    fn test_create_chatroom_request_serialization() {
83        let req = CreateChatroomRequest {
84            app_id: "test_app",
85            wxids: vec!["wxid1", "wxid2"],
86        };
87        let json = serde_json::to_string(&req).expect("Failed to serialize");
88        assert!(json.contains("appId"));
89        assert!(json.contains("wxids"));
90        assert!(json.contains("wxid1"));
91    }
92
93    #[test]
94    fn test_disband_chatroom_request_serialization() {
95        let req = DisbandChatroomRequest {
96            app_id: "test_app",
97            chatroom_id: "chatroom_123",
98        };
99        let json = serde_json::to_string(&req).expect("Failed to serialize");
100        assert!(json.contains("appId"));
101        assert!(json.contains("chatroomId"));
102    }
103
104    #[test]
105    fn test_quit_chatroom_request_serialization() {
106        let req = QuitChatroomRequest {
107            app_id: "test_app",
108            chatroom_id: "chatroom_123",
109        };
110        let json = serde_json::to_string(&req).expect("Failed to serialize");
111        assert!(json.contains("appId"));
112        assert!(json.contains("chatroomId"));
113    }
114
115    #[test]
116    fn test_modify_chatroom_name_request_serialization() {
117        let req = ModifyChatroomNameRequest {
118            app_id: "test_app",
119            chatroom_id: "chatroom_123",
120            chatroom_name: "New Group Name",
121        };
122        let json = serde_json::to_string(&req).expect("Failed to serialize");
123        assert!(json.contains("appId"));
124        assert!(json.contains("chatroomId"));
125        assert!(json.contains("New Group Name"));
126    }
127
128    #[test]
129    fn test_modify_chatroom_remark_request_serialization() {
130        let req = ModifyChatroomRemarkRequest {
131            app_id: "test_app",
132            chatroom_id: "chatroom_123",
133            chatroom_remark: "Group Remark",
134        };
135        let json = serde_json::to_string(&req).expect("Failed to serialize");
136        assert!(json.contains("appId"));
137        assert!(json.contains("chatroomRemark"));
138    }
139
140    #[test]
141    fn test_modify_chatroom_nick_name_for_self_request_serialization() {
142        let req = ModifyChatroomNickNameForSelfRequest {
143            app_id: "test_app",
144            chatroom_id: "chatroom_123",
145            nick_name: "My Nickname",
146        };
147        let json = serde_json::to_string(&req).expect("Failed to serialize");
148        assert!(json.contains("appId"));
149        assert!(json.contains("nickName"));
150        assert!(json.contains("My Nickname"));
151    }
152}