slack_rust/reminders/
complete.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 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(¶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 = 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, ¶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}