slack_rust/conversations/
approve_shared_invite.rs1use 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(¶m)?;
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, ¶m, &"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}