vkteams_bot/api/messages/
edit_text.rs1use crate::prelude::*;
4bot_api_method! {
5 method = "messages/editText",
6 request = RequestMessagesEditText {
7 required {
8 chat_id: ChatId,
9 msg_id: MsgId,
10 },
11 optional {
12 text: String,
13 inline_keyboard_markup: String,
14 format: MessageFormat,
15 parse_mode: ParseMode,
16 }
17 },
18 response = ResponseMessagesEditText {},
19}
20
21impl MessageTextSetters for RequestMessagesEditText {
22 fn set_text(self, parser: MessageTextParser) -> Result<Self> {
26 let (text, parse_mode) = parser.parse()?;
27 Ok(self.with_text(text).with_parse_mode(parse_mode))
28 }
29 fn set_keyboard(self, keyboard: Keyboard) -> Result<Self> {
33 Ok(self.with_inline_keyboard_markup(keyboard.into()))
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_set_text_valid() {
43 let req = RequestMessagesEditText::new((ChatId::from("c1"), MsgId("m1".to_string())));
44 let mut parser = MessageTextParser::default();
45 parser
46 .text
47 .push(MessageTextFormat::Plain("hello".to_string()));
48 let res = req.set_text(parser);
49 assert!(res.is_ok());
50 let req2 = res.unwrap();
51 assert_eq!(req2.text.unwrap(), "hello");
52 }
53
54 #[test]
55 fn test_set_text_parser_error() {
56 let req = RequestMessagesEditText::new((ChatId::from("c1"), MsgId("m1".to_string())));
57 let mut parser = MessageTextParser::default();
58 parser.text.push(MessageTextFormat::Link(
59 "not a url".to_string(),
60 "text".to_string(),
61 ));
62 let res = req.set_text(parser);
63 assert!(res.is_err());
64 }
65
66 #[test]
67 fn test_set_keyboard_valid() {
68 let req = RequestMessagesEditText::new((ChatId::from("c1"), MsgId("m1".to_string())));
69 let keyboard = Keyboard {
70 buttons: vec![vec![ButtonKeyboard {
71 text: "ok".to_string(),
72 url: None,
73 callback_data: None,
74 style: None,
75 }]],
76 };
77 let res = req.set_keyboard(keyboard);
78 assert!(res.is_ok());
79 let req2 = res.unwrap();
80 assert!(req2.inline_keyboard_markup.is_some());
81 }
82
83 #[test]
84 fn test_serialize_deserialize_request_minimal() {
85 let req = RequestMessagesEditText::new((ChatId::from("c1"), MsgId("m1".to_string())));
86 let val = serde_json::to_value(&req).unwrap();
87 assert_eq!(val["chatId"], "c1");
88 assert_eq!(val["msgId"], "m1");
89 let req2: RequestMessagesEditText = serde_json::from_value(val).unwrap();
90 assert_eq!(req2.chat_id.0, "c1");
91 assert_eq!(req2.msg_id.0, "m1");
92 assert!(req2.text.is_none());
93 }
94
95 #[test]
96 fn test_serialize_deserialize_request_full() {
97 let mut req = RequestMessagesEditText::new((ChatId::from("c1"), MsgId("m1".to_string())));
98 req.text = Some("hello".to_string());
99 let val = serde_json::to_value(&req).unwrap();
100 let req2: RequestMessagesEditText = serde_json::from_value(val).unwrap();
101 assert_eq!(req2.text.as_deref(), Some("hello"));
102 }
103
104 #[test]
105 fn test_request_missing_required_field() {
106 let val = serde_json::json!({"text": "hello"});
107 let req = serde_json::from_value::<RequestMessagesEditText>(val);
108 assert!(req.is_err());
109 }
110}