vkteams_bot/api/chats/
get_members.rs

1#![allow(unused_parens)]
2//! # Get chat members method `chats/getMembers`
3//! [More info](https://teams.vk.com/botapi/#/chats/get_chats_getMembers)
4use crate::api::types::*;
5bot_api_method! {
6    method   = "chats/getMembers",
7    request  = RequestChatsGetMembers {
8        required {
9            chat_id: ChatId,
10        },
11        optional {
12            cursor: u32,
13        }
14    },
15    response = ResponseChatsGetMembers {
16        #[serde(default)]
17        members: Vec<Member>,
18        #[serde(skip_serializing_if = "Option::is_none")]
19        cursor: Option<u32>,
20    },
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26    use crate::api::types::{ChatId, Member, UserId};
27    use serde_json::json;
28
29    #[test]
30    fn test_request_chats_get_members_serialize() {
31        let req = RequestChatsGetMembers {
32            chat_id: ChatId::from("c1"),
33            cursor: Some(42),
34        };
35        let val = serde_json::to_value(&req).unwrap();
36        assert_eq!(val["chatId"], "c1");
37        assert_eq!(val["cursor"], 42);
38    }
39
40    #[test]
41    fn test_request_chats_get_members_deserialize() {
42        let val = json!({"chatId": "c2", "cursor": 7});
43        let req: RequestChatsGetMembers = serde_json::from_value(val).unwrap();
44        assert_eq!(req.chat_id.0, "c2");
45        assert_eq!(req.cursor, Some(7));
46    }
47
48    #[test]
49    fn test_request_chats_get_members_no_cursor() {
50        let val = json!({"chatId": "c3"});
51        let req: RequestChatsGetMembers = serde_json::from_value(val).unwrap();
52        assert_eq!(req.cursor, None);
53    }
54
55    #[test]
56    fn test_request_chats_get_members_invalid_chat_id() {
57        let val = json!({"chatId": 123});
58        let res: Result<RequestChatsGetMembers, _> = serde_json::from_value(val);
59        assert!(res.is_err());
60    }
61
62    #[test]
63    fn test_response_chats_get_members_serialize_deserialize() {
64        let members = vec![Member {
65            user_id: UserId("u1".to_string()),
66            creator: Some(true),
67            admin: Some(false),
68        }];
69        let resp = ResponseChatsGetMembers {
70            members: members.clone(),
71            cursor: Some(99),
72        };
73        let val = serde_json::to_value(&resp).unwrap();
74        assert_eq!(val["cursor"], 99);
75        let resp2: ResponseChatsGetMembers = serde_json::from_value(val).unwrap();
76        assert_eq!(resp2.members.len(), 1);
77        assert_eq!(resp2.cursor, Some(99));
78    }
79
80    #[test]
81    fn test_response_chats_get_members_empty_members() {
82        let val = json!({"members": [], "cursor": 1});
83        let resp: ResponseChatsGetMembers = serde_json::from_value(val).unwrap();
84        assert_eq!(resp.members.len(), 0);
85        assert_eq!(resp.cursor, Some(1));
86    }
87
88    #[test]
89    fn test_response_chats_get_members_missing_members() {
90        let val = json!({"cursor": 2});
91        let resp: ResponseChatsGetMembers = serde_json::from_value(val).unwrap();
92        assert_eq!(resp.members.len(), 0); // default
93        assert_eq!(resp.cursor, Some(2));
94    }
95
96    #[test]
97    fn test_response_chats_get_members_no_cursor() {
98        let val = json!({"members": [{"userId": "u2"}]});
99        let resp: ResponseChatsGetMembers = serde_json::from_value(val).unwrap();
100        assert_eq!(resp.cursor, None);
101        assert_eq!(resp.members.len(), 1);
102    }
103}