slack_rust/usergroups/
disable.rs

1use crate::error::Error;
2use crate::http_client::{get_slack_url, ResponseMetadata, SlackWebAPIClient};
3use crate::usergroups::usergroup::Usergroup;
4use serde::{Deserialize, Serialize};
5use serde_with::skip_serializing_none;
6
7#[skip_serializing_none]
8#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
9pub struct DisableRequest {
10    pub usergroup: String,
11    pub include_count: Option<bool>,
12    pub team_id: Option<String>,
13}
14
15#[skip_serializing_none]
16#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
17pub struct DisableResponse {
18    pub ok: bool,
19    pub error: Option<String>,
20    pub response_metadata: Option<ResponseMetadata>,
21    pub usergroup: Option<Usergroup>,
22}
23
24pub async fn disable<T>(
25    client: &T,
26    param: &DisableRequest,
27    bot_token: &str,
28) -> Result<DisableResponse, Error>
29where
30    T: SlackWebAPIClient,
31{
32    let url = get_slack_url("usergroups.disable");
33    let json = serde_json::to_string(&param)?;
34
35    client
36        .post_json(&url, &json, bot_token)
37        .await
38        .and_then(|result| {
39            serde_json::from_str::<DisableResponse>(&result).map_err(Error::SerdeJsonError)
40        })
41}
42
43#[cfg(test)]
44mod test {
45    use super::*;
46    use crate::http_client::MockSlackWebAPIClient;
47    use crate::usergroups::usergroup::Pref;
48
49    #[test]
50    fn convert_request() {
51        let request = DisableRequest {
52            usergroup: "S0604QSJC".to_string(),
53            include_count: Some(true),
54            team_id: Some("T1234567890".to_string()),
55        };
56        let json = r##"{
57  "usergroup": "S0604QSJC",
58  "include_count": true,
59  "team_id": "T1234567890"
60}"##;
61
62        let j = serde_json::to_string_pretty(&request).unwrap();
63        assert_eq!(json, j);
64
65        let s = serde_json::from_str::<DisableRequest>(json).unwrap();
66        assert_eq!(request, s);
67    }
68
69    #[test]
70    fn convert_response() {
71        let response = DisableResponse {
72            ok: true,
73            usergroup: Some(Usergroup {
74                id: Some("S0615G0KT".to_string()),
75                team_id: Some("T060RNRCH".to_string()),
76                is_usergroup: Some(true),
77                name: Some("Marketing Team".to_string()),
78                description: Some("Marketing gurus, PR experts and product advocates.".to_string()),
79                handle: Some("marketing-team".to_string()),
80                is_external: Some(false),
81                date_create: Some(1446746793),
82                date_update: Some(1446746793),
83                date_delete: Some(0),
84                auto_type: Some("".to_string()),
85                created_by: Some("U060RNRCZ".to_string()),
86                updated_by: Some("U060RNRCZ".to_string()),
87                deleted_by: Some("".to_string()),
88                prefs: Some(Pref {
89                    channels: Some(vec![]),
90                    groups: Some(vec![]),
91                }),
92                user_count: Some("0".to_string()),
93            }),
94            ..Default::default()
95        };
96        let json = r##"{
97  "ok": true,
98  "usergroup": {
99    "id": "S0615G0KT",
100    "team_id": "T060RNRCH",
101    "is_usergroup": true,
102    "name": "Marketing Team",
103    "description": "Marketing gurus, PR experts and product advocates.",
104    "handle": "marketing-team",
105    "is_external": false,
106    "date_create": 1446746793,
107    "date_update": 1446746793,
108    "date_delete": 0,
109    "auto_type": "",
110    "created_by": "U060RNRCZ",
111    "updated_by": "U060RNRCZ",
112    "deleted_by": "",
113    "prefs": {
114      "channels": [],
115      "groups": []
116    },
117    "user_count": "0"
118  }
119}"##;
120
121        let j = serde_json::to_string_pretty(&response).unwrap();
122        assert_eq!(json, j);
123
124        let s = serde_json::from_str::<DisableResponse>(json).unwrap();
125        assert_eq!(response, s);
126    }
127
128    #[async_std::test]
129    async fn test_disable() {
130        let param = DisableRequest {
131            usergroup: "S0604QSJC".to_string(),
132            team_id: Some("T1234567890".to_string()),
133            include_count: Some(true),
134        };
135        let mut mock = MockSlackWebAPIClient::new();
136        mock.expect_post_json().returning(|_, _, _| {
137            Ok(r##"{
138  "ok": true,
139  "usergroup": {
140    "id": "S0604QSJC",
141    "team_id": "T1234567890",
142    "is_usergroup": true,
143    "name": "Marketing Team",
144    "description": "Marketing gurus, PR experts and product advocates.",
145    "handle": "marketing-team",
146    "is_external": false,
147    "date_create": 1446746793,
148    "date_update": 1446746793,
149    "date_delete": 0,
150    "auto_type": "",
151    "created_by": "U060RNRCZ",
152    "updated_by": "U060RNRCZ",
153    "deleted_by": "",
154    "prefs": {
155      "channels": [],
156      "groups": []
157    },
158    "user_count": "0"
159  }
160}"##
161            .to_string())
162        });
163
164        let response = disable(&mock, &param, &"test_token".to_string())
165            .await
166            .unwrap();
167        let expect = DisableResponse {
168            ok: true,
169            usergroup: Some(Usergroup {
170                id: Some("S0604QSJC".to_string()),
171                team_id: Some("T1234567890".to_string()),
172                is_usergroup: Some(true),
173                name: Some("Marketing Team".to_string()),
174                description: Some("Marketing gurus, PR experts and product advocates.".to_string()),
175                handle: Some("marketing-team".to_string()),
176                is_external: Some(false),
177                date_create: Some(1446746793),
178                date_update: Some(1446746793),
179                date_delete: Some(0),
180                auto_type: Some("".to_string()),
181                created_by: Some("U060RNRCZ".to_string()),
182                updated_by: Some("U060RNRCZ".to_string()),
183                deleted_by: Some("".to_string()),
184                prefs: Some(Pref {
185                    channels: Some(vec![]),
186                    groups: Some(vec![]),
187                }),
188                user_count: Some("0".to_string()),
189            }),
190            ..Default::default()
191        };
192
193        assert_eq!(expect, response);
194    }
195}