slack_rust/usergroups/users/
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 ListRequest {
9 pub usergroup: String,
10 pub include_disabled: Option<bool>,
11 pub team_id: Option<String>,
12}
13
14#[skip_serializing_none]
15#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
16pub struct ListResponse {
17 pub ok: bool,
18 pub error: Option<String>,
19 pub response_metadata: Option<ResponseMetadata>,
20 pub users: Option<Vec<String>>,
21}
22
23pub async fn list<T>(
24 client: &T,
25 param: &ListRequest,
26 bot_token: &str,
27) -> Result<ListResponse, Error>
28where
29 T: SlackWebAPIClient,
30{
31 let url = get_slack_url("usergroups.users.list");
32 let json = serde_json::to_string(¶m)?;
33
34 client
35 .post_json(&url, &json, bot_token)
36 .await
37 .and_then(|result| {
38 serde_json::from_str::<ListResponse>(&result).map_err(Error::SerdeJsonError)
39 })
40}
41
42#[cfg(test)]
43mod test {
44 use super::*;
45 use crate::http_client::MockSlackWebAPIClient;
46
47 #[test]
48 fn convert_request() {
49 let request = ListRequest {
50 usergroup: "S0604QSJC".to_string(),
51 team_id: Some("T1234567890".to_string()),
52 include_disabled: Some(true),
53 };
54 let json = r##"{
55 "usergroup": "S0604QSJC",
56 "include_disabled": true,
57 "team_id": "T1234567890"
58}"##;
59
60 let j = serde_json::to_string_pretty(&request).unwrap();
61 assert_eq!(json, j);
62
63 let s = serde_json::from_str::<ListRequest>(json).unwrap();
64 assert_eq!(request, s);
65 }
66
67 #[test]
68 fn convert_response() {
69 let response = ListResponse {
70 ok: true,
71 users: Some(vec!["xxxxxxxx".to_string(), "xxxxxxxx".to_string()]),
72 ..Default::default()
73 };
74 let json = r##"{
75 "ok": true,
76 "users": [
77 "xxxxxxxx",
78 "xxxxxxxx"
79 ]
80}"##;
81
82 let j = serde_json::to_string_pretty(&response).unwrap();
83 assert_eq!(json, j);
84
85 let s = serde_json::from_str::<ListResponse>(json).unwrap();
86 assert_eq!(response, s);
87 }
88
89 #[async_std::test]
90 async fn test_list() {
91 let param = ListRequest {
92 usergroup: "S0604QSJC".to_string(),
93 team_id: Some("T1234567890".to_string()),
94 include_disabled: Some(true),
95 };
96 let mut mock = MockSlackWebAPIClient::new();
97 mock.expect_post_json().returning(|_, _, _| {
98 Ok(r##"{
99 "ok": true,
100 "users": [
101 "xxxxxxxx",
102 "xxxxxxxx"
103 ]
104}"##
105 .to_string())
106 });
107
108 let response = list(&mock, ¶m, &"test_token".to_string())
109 .await
110 .unwrap();
111 let expect = ListResponse {
112 ok: true,
113 users: Some(vec!["xxxxxxxx".to_string(), "xxxxxxxx".to_string()]),
114 ..Default::default()
115 };
116
117 assert_eq!(expect, response);
118 }
119}