slack_rust/conversations/
approve_shared_invite.rs

1use crate::error::Error;
2use crate::http_client::{get_slack_url, DefaultResponse, 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 ApproveSharedInviteRequest {
9    pub invite_id: String,
10    pub target_team: Option<String>,
11}
12
13pub async fn approve_shared_invite<T>(
14    client: &T,
15    param: &ApproveSharedInviteRequest,
16    bot_token: &str,
17) -> Result<DefaultResponse, Error>
18where
19    T: SlackWebAPIClient,
20{
21    let url = get_slack_url("conversations.approveSharedInvite");
22    let json = serde_json::to_string(&param)?;
23
24    client
25        .post_json(&url, &json, bot_token)
26        .await
27        .and_then(|result| {
28            serde_json::from_str::<DefaultResponse>(&result).map_err(Error::SerdeJsonError)
29        })
30}
31
32#[cfg(test)]
33mod test {
34    use super::*;
35    use crate::http_client::MockSlackWebAPIClient;
36
37    #[test]
38    fn convert_request() {
39        let request = ApproveSharedInviteRequest {
40            invite_id: "xxxxxxxxxxx".to_string(),
41            target_team: Some("xxxxxxxxxxx".to_string()),
42        };
43        let json = r##"{
44  "invite_id": "xxxxxxxxxxx",
45  "target_team": "xxxxxxxxxxx"
46}"##;
47
48        let j = serde_json::to_string_pretty(&request).unwrap();
49        assert_eq!(json, j);
50
51        let s = serde_json::from_str::<ApproveSharedInviteRequest>(json).unwrap();
52        assert_eq!(request, s);
53    }
54
55    #[async_std::test]
56    async fn test_approve_shared_invite() {
57        let param = ApproveSharedInviteRequest {
58            invite_id: "xxxxxxxxxxx".to_string(),
59            target_team: Some("xxxxxxxxxxx".to_string()),
60        };
61
62        let mut mock = MockSlackWebAPIClient::new();
63        mock.expect_post_json().returning(|_, _, _| {
64            Ok(r##"{
65  "ok": true
66}"##
67            .to_string())
68        });
69
70        let response = approve_shared_invite(&mock, &param, &"test_token".to_string())
71            .await
72            .unwrap();
73        let expect = DefaultResponse {
74            ok: true,
75            ..Default::default()
76        };
77
78        assert_eq!(expect, response);
79    }
80}