slack_rust/team/
preferences_list.rs

1use crate::error::Error;
2use crate::http_client::{get_slack_url, ResponseMetadata, SlackWebAPIClient};
3use serde::{Deserialize, Serialize};
4use serde_with::skip_serializing_none;
5
6#[skip_serializing_none]
7#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
8pub struct PreferencesListResponse {
9    pub ok: bool,
10    pub error: Option<String>,
11    pub response_metadata: Option<ResponseMetadata>,
12    pub allow_message_deletion: Option<bool>,
13    pub display_real_names: Option<bool>,
14    pub disable_file_uploads: Option<String>,
15    pub msg_edit_window_mins: Option<i32>,
16    pub who_can_post_general: Option<String>,
17}
18
19pub async fn preferences_list<T>(
20    client: &T,
21    bot_token: &str,
22) -> Result<PreferencesListResponse, Error>
23where
24    T: SlackWebAPIClient,
25{
26    let url = get_slack_url("team.preferences.list");
27
28    client.post(&url, bot_token).await.and_then(|result| {
29        serde_json::from_str::<PreferencesListResponse>(&result).map_err(Error::SerdeJsonError)
30    })
31}
32
33#[cfg(test)]
34mod test {
35    use super::*;
36    use crate::http_client::MockSlackWebAPIClient;
37
38    #[test]
39    fn convert_response() {
40        let response = PreferencesListResponse {
41            ok: true,
42            allow_message_deletion: Some(true),
43            display_real_names: Some(false),
44            disable_file_uploads: Some("disable_all".to_string()),
45            msg_edit_window_mins: Some(25),
46            who_can_post_general: Some("everyone".to_string()),
47            ..Default::default()
48        };
49        let json = r##"{
50  "ok": true,
51  "allow_message_deletion": true,
52  "display_real_names": false,
53  "disable_file_uploads": "disable_all",
54  "msg_edit_window_mins": 25,
55  "who_can_post_general": "everyone"
56}"##;
57
58        let j = serde_json::to_string_pretty(&response).unwrap();
59        assert_eq!(json, j);
60
61        let s = serde_json::from_str::<PreferencesListResponse>(json).unwrap();
62        assert_eq!(response, s);
63    }
64
65    #[async_std::test]
66    async fn test_preferences_list() {
67        let mut mock = MockSlackWebAPIClient::new();
68        mock.expect_post().returning(|_, _| {
69            Ok(r##"{
70  "ok": true,
71  "allow_message_deletion": true,
72  "display_real_names": false,
73  "disable_file_uploads": "disable_all",
74  "msg_edit_window_mins": 25,
75  "who_can_post_general": "everyone"
76}"##
77            .to_string())
78        });
79
80        let response = preferences_list(&mock, &"test_token".to_string())
81            .await
82            .unwrap();
83        let expect = PreferencesListResponse {
84            ok: true,
85            allow_message_deletion: Some(true),
86            display_real_names: Some(false),
87            disable_file_uploads: Some("disable_all".to_string()),
88            msg_edit_window_mins: Some(25),
89            who_can_post_general: Some("everyone".to_string()),
90            ..Default::default()
91        };
92
93        assert_eq!(expect, response);
94    }
95}