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