slack_rust/reminders/
complete.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 CompleteRequest {
9    pub reminder: String,
10    pub team_id: Option<String>,
11}
12
13pub async fn complete<T>(
14    client: &T,
15    param: &CompleteRequest,
16    bot_token: &str,
17) -> Result<DefaultResponse, Error>
18where
19    T: SlackWebAPIClient,
20{
21    let url = get_slack_url("reminders.complete");
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 = CompleteRequest {
40            reminder: "Rm12345678".to_string(),
41            team_id: Some("T1234567890".to_string()),
42        };
43        let json = r##"{
44  "reminder": "Rm12345678",
45  "team_id": "T1234567890"
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::<CompleteRequest>(json).unwrap();
52        assert_eq!(request, s);
53    }
54
55    #[async_std::test]
56    async fn test_complete() {
57        let param = CompleteRequest {
58            reminder: "Rm12345678".to_string(),
59            team_id: Some("T1234567890".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 = complete(&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}