slack_rust/team/
preferences_list.rs1use 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}