vkteams_bot/api/chats/
get_members.rs1#![allow(unused_parens)]
2use 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); 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}