slack_rust/users/
set_presence.rs1use crate::error::Error;
2use crate::http_client::{get_slack_url, DefaultResponse, SlackWebAPIClient};
3use serde::{Deserialize, Serialize};
4
5#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
6pub struct SetPresenceRequest {
7 pub presence: String,
8}
9
10pub async fn set_presence<T>(
11 client: &T,
12 param: &SetPresenceRequest,
13 bot_token: &str,
14) -> Result<DefaultResponse, Error>
15where
16 T: SlackWebAPIClient,
17{
18 let url = get_slack_url("users.setPresence");
19 let json = serde_json::to_string(¶m)?;
20
21 client
22 .post_json(&url, &json, bot_token)
23 .await
24 .and_then(|result| {
25 serde_json::from_str::<DefaultResponse>(&result).map_err(Error::SerdeJsonError)
26 })
27}
28
29#[cfg(test)]
30mod test {
31 use super::*;
32 use crate::http_client::MockSlackWebAPIClient;
33
34 #[test]
35 fn convert_request() {
36 let request = SetPresenceRequest {
37 presence: "away".to_string(),
38 };
39 let json = r##"{
40 "presence": "away"
41}"##;
42
43 let j = serde_json::to_string_pretty(&request).unwrap();
44 assert_eq!(json, j);
45
46 let s = serde_json::from_str::<SetPresenceRequest>(json).unwrap();
47 assert_eq!(request, s);
48 }
49
50 #[async_std::test]
51 async fn test_set_presence() {
52 let param = SetPresenceRequest {
53 presence: "away".to_string(),
54 };
55
56 let mut mock = MockSlackWebAPIClient::new();
57 mock.expect_post_json().returning(|_, _, _| {
58 Ok(r##"{
59 "ok": true
60}"##
61 .to_string())
62 });
63
64 let response = set_presence(&mock, ¶m, &"test_token".to_string())
65 .await
66 .unwrap();
67 let expect = DefaultResponse {
68 ok: true,
69 ..Default::default()
70 };
71
72 assert_eq!(expect, response);
73 }
74}