slack_rust/chat/
delete_scheduled_message.rs

1//! Deletes a pending scheduled message from the queue.
2//! See: <https://api.slack.com/methods/chat.deleteScheduledMessage>
3
4use crate::error::Error;
5use crate::http_client::{get_slack_url, DefaultResponse, 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 DeleteScheduledMessageRequest {
12    pub channel: String,
13    pub scheduled_message_id: String,
14    pub as_user: Option<bool>,
15}
16
17/// Deletes a pending scheduled message from the queue.
18/// See: <https://api.slack.com/methods/chat.deleteScheduledMessage>
19pub async fn delete_scheduled_message<T>(
20    client: &T,
21    param: &DeleteScheduledMessageRequest,
22    bot_token: &str,
23) -> Result<DefaultResponse, Error>
24where
25    T: SlackWebAPIClient,
26{
27    let url = get_slack_url("chat.deleteScheduledMessage");
28    let json = serde_json::to_string(&param)?;
29
30    client
31        .post_json(&url, &json, bot_token)
32        .await
33        .and_then(|result| {
34            serde_json::from_str::<DefaultResponse>(&result).map_err(Error::SerdeJsonError)
35        })
36}
37
38#[cfg(test)]
39mod test {
40    use super::*;
41    use crate::http_client::MockSlackWebAPIClient;
42
43    #[test]
44    fn convert_request() {
45        let request = DeleteScheduledMessageRequest {
46            channel: "C123456789".to_string(),
47            scheduled_message_id: "Q1234ABCD".to_string(),
48            as_user: Some(true),
49        };
50        let json = r##"{
51  "channel": "C123456789",
52  "scheduled_message_id": "Q1234ABCD",
53  "as_user": true
54}"##;
55
56        let j = serde_json::to_string_pretty(&request).unwrap();
57        assert_eq!(json, j);
58
59        let s = serde_json::from_str::<DeleteScheduledMessageRequest>(json).unwrap();
60        assert_eq!(request, s);
61    }
62
63    #[async_std::test]
64    async fn test_delete_scheduled_message() {
65        let param = DeleteScheduledMessageRequest {
66            channel: "C123456789".to_string(),
67            scheduled_message_id: "Q1234ABCD".to_string(),
68            as_user: Some(true),
69        };
70
71        let mut mock = MockSlackWebAPIClient::new();
72        mock.expect_post_json().returning(|_, _, _| {
73            Ok(r##"{
74  "ok": true
75}"##
76            .to_string())
77        });
78
79        let response = delete_scheduled_message(&mock, &param, &"test_token".to_string())
80            .await
81            .unwrap();
82        let expect = DefaultResponse {
83            ok: true,
84            ..Default::default()
85        };
86
87        assert_eq!(expect, response);
88    }
89}