Added tests for media (video) and media as part of media group

This commit is contained in:
Mr-Andersen 2019-09-08 19:24:03 +03:00
parent 1fa64afad2
commit b42c8b65f7
10 changed files with 212 additions and 22 deletions

View file

@ -1,7 +1,7 @@
use crate::core::types::{ChatPermissions, ChatPhoto, Message};
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
pub struct Chat {
pub id: i64,
#[serde(flatten)]
@ -10,7 +10,7 @@ pub struct Chat {
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
#[serde(untagged)]
pub enum ChatKind {
NonPrivate {
@ -33,7 +33,7 @@ pub enum ChatKind {
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
#[serde(rename_all = "snake_case")]
#[serde(tag = "type")]
pub enum NonPrivateChatKind {

View file

@ -1,6 +1,6 @@
use crate::core::types::PhotoSize;
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
pub struct Document {
pub file_id: String,
pub thumb: Option<PhotoSize>,

View file

@ -1,4 +1,4 @@
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone)]
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone, Serialize)]
pub struct Invoice {
pub title: String,
pub description: String,

View file

@ -4,7 +4,7 @@ use crate::core::types::{
SuccessfulPayment, User, Venue, Video, VideoNote, Voice,
};
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
pub struct Message {
#[serde(rename = "message_id")]
pub id: i64,
@ -14,7 +14,7 @@ pub struct Message {
pub message_kind: MessageKind,
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
#[serde(untagged)]
pub enum MessageKind {
IncomingMessage {
@ -72,7 +72,7 @@ pub enum MessageKind {
},
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
pub enum Sender {
/// If message is sent from Chat
#[serde(rename = "from")]
@ -82,7 +82,7 @@ pub enum Sender {
Signature(String),
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
#[serde(untagged)]
pub enum ForwardKind {
ChannelForward {
@ -106,7 +106,7 @@ pub enum ForwardKind {
},
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
pub enum ForwardedFrom {
#[serde(rename = "forward_from")]
User(User),
@ -114,11 +114,12 @@ pub enum ForwardedFrom {
SenderName(String),
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
#[serde(untagged)]
pub enum MediaKind {
Animation {
animation: Animation,
#[doc(hidden)]
/// "For backward compatibility" (c) Telegram Docs
#[serde(skip)]
document: (),
@ -148,11 +149,11 @@ pub enum MediaKind {
location: Location,
},
Photo {
sizes: Vec<PhotoSize>,
photo: Vec<PhotoSize>,
caption: Option<String>,
#[serde(default = "Vec::new")]
caption_entities: Vec<MessageEntity>,
media_group_id: Option<i32>,
media_group_id: Option<String>,
},
Poll {
poll: Poll,
@ -170,7 +171,7 @@ pub enum MediaKind {
caption: Option<String>,
#[serde(default = "Vec::new")]
caption_entities: Vec<MessageEntity>,
media_group_id: Option<i32>,
media_group_id: Option<String>,
},
VideoNote {
video_note: VideoNote,
@ -227,8 +228,197 @@ mod tests {
},
};
// actual message from telegram
let json = r#"{"message_id":6534,"from":{"id":457569668,"is_bot":true,"first_name":"BT","username":"BloodyTestBot"},"chat":{"id":218485655,"first_name":"W","username":"WaffleLapkin","type":"private"},"date":1567898953,"text":"text"}"#;
let json = r#"{
"message_id": 6534,
"from": {
"id": 457569668,
"is_bot": true,
"first_name": "BT",
"username": "BloodyTestBot"
},
"chat": {
"id": 218485655,
"first_name": "W",
"username": "WaffleLapkin",
"type": "private"
},
"date": 1567898953,
"text": "text"
}"#;
let actual = from_str::<Message>(json).unwrap();
assert_eq!(expected, actual);
}
#[test]
fn media_message_de() {
let json = r#"{
"message_id": 198283,
"from": {
"id": 250918540,
"is_bot": false,
"first_name": "Андрей",
"last_name": "Власов",
"username": "aka_dude",
"language_code": "en"
},
"chat": {
"id": 250918540,
"first_name": "Андрей",
"last_name": "Власов",
"username": "aka_dude",
"type": "private"
},
"date": 1567927221,
"video": {
"duration": 13,
"width": 512,
"height": 640,
"mime_type": "video/mp4",
"thumb": {
"file_id": "AAQCAAOmBAACBf2oS53pByA-I4CWWCObDwAEAQAHbQADMWcAAhYE",
"file_size": 10339,
"width": 256,
"height": 320
},
"file_id": "BAADAgADpgQAAgX9qEud6QcgPiOAlhYE",
"file_size": 1381334
}
}"#;
let actual = from_str::<Message>(json).unwrap();
let expected = Message {
id: 198283,
date: 1567927221,
chat: Chat {
id: 250918540,
photo: None,
kind: ChatKind::Private {
first_name: Some("Андрей".to_string()),
last_name: Some("Власов".to_string()),
username: Some("aka_dude".to_string()),
type_: ()
}
},
message_kind: MessageKind::IncomingMessage {
from: Sender::User(User {
id: 250918540,
is_bot: false,
first_name: "Андрей".to_string(),
last_name: Some("Власов".to_string()),
username: Some("aka_dude".to_string()),
language_code: Some("en".to_string())
}),
forward_kind: ForwardKind::Origin { reply_to_message: None },
edit_date: None,
media_kind: MediaKind::Video {
video: Video {
duration: 13,
width: 512,
height: 640,
mime_type: Some("video/mp4".to_string()),
thumb: Some(PhotoSize {
file_id: "AAQCAAOmBAACBf2oS53pByA-I4CWWCObDwAEAQAHbQADMWcAAhYE".to_string(),
file_size: Some(10339),
width: 256,
height: 320
}),
file_id: "BAADAgADpgQAAgX9qEud6QcgPiOAlhYE".to_string(),
file_size: Some(1381334)
},
caption: None,
caption_entities: vec![],
media_group_id: None
},
reply_markup: None
},
};
assert_eq!(actual, expected);
}
#[test]
fn media_group_message_de() {
let json = r#"{
"message_id": 198283,
"from": {
"id": 250918540,
"is_bot": false,
"first_name": "Андрей",
"last_name": "Власов",
"username": "aka_dude",
"language_code": "en"
},
"chat": {
"id": 250918540,
"first_name": "Андрей",
"last_name": "Власов",
"username": "aka_dude",
"type": "private"
},
"date": 1567927221,
"media_group_id": "12543417770506682",
"video": {
"duration": 13,
"width": 512,
"height": 640,
"mime_type": "video/mp4",
"thumb": {
"file_id": "AAQCAAOmBAACBf2oS53pByA-I4CWWCObDwAEAQAHbQADMWcAAhYE",
"file_size": 10339,
"width": 256,
"height": 320
},
"file_id": "BAADAgADpgQAAgX9qEud6QcgPiOAlhYE",
"file_size": 1381334
}
}"#;
let actual = from_str::<Message>(json).unwrap();
let expected = Message {
id: 198283,
date: 1567927221,
chat: Chat {
id: 250918540,
photo: None,
kind: ChatKind::Private {
first_name: Some("Андрей".to_string()),
last_name: Some("Власов".to_string()),
username: Some("aka_dude".to_string()),
type_: ()
}
},
message_kind: MessageKind::IncomingMessage {
from: Sender::User(User {
id: 250918540,
is_bot: false,
first_name: "Андрей".to_string(),
last_name: Some("Власов".to_string()),
username: Some("aka_dude".to_string()),
language_code: Some("en".to_string())
}),
forward_kind: ForwardKind::Origin { reply_to_message: None },
edit_date: None,
media_kind: MediaKind::Video {
video: Video {
duration: 13,
width: 512,
height: 640,
mime_type: Some("video/mp4".to_string()),
thumb: Some(PhotoSize {
file_id: "AAQCAAOmBAACBf2oS53pByA-I4CWWCObDwAEAQAHbQADMWcAAhYE".to_string(),
file_size: Some(10339),
width: 256,
height: 320
}),
file_id: "BAADAgADpgQAAgX9qEud6QcgPiOAlhYE".to_string(),
file_size: Some(1381334)
},
caption: None,
caption_entities: vec![],
media_group_id: Some("12543417770506682".to_string())
},
reply_markup: None
},
};
assert_eq!(actual, expected);
}
}

View file

@ -1,6 +1,6 @@
use crate::core::types::User;
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
pub struct MessageEntity {
#[serde(flatten)]
pub kind: MessageEntityKind,
@ -8,7 +8,7 @@ pub struct MessageEntity {
pub length: usize,
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone)]
#[derive(Debug, Deserialize, Eq, Hash, PartialEq, Clone, Serialize)]
#[serde(rename_all = "snake_case")]
#[serde(tag = "type")]
pub enum MessageEntityKind {

View file

@ -1,6 +1,6 @@
use crate::core::types::ShippingAddress;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone)]
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone, Serialize)]
pub struct OrderInfo {
pub name: String,
pub phone_number: String,

View file

@ -1,4 +1,4 @@
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone)]
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone, Serialize)]
pub struct ShippingAddress {
pub country_code: String,
pub state: String,

View file

@ -1,6 +1,6 @@
use crate::core::types::{MaskPosition, PhotoSize};
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone)]
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone, Serialize)]
pub struct Sticker {
pub file_id: String,
pub width: u16,

View file

@ -1,6 +1,6 @@
use crate::core::types::OrderInfo;
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone)]
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone, Serialize)]
pub struct SuccessfulPayment {
pub currency: String,
pub total_amount: i64,

View file

@ -1,4 +1,4 @@
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone)]
#[derive(Debug, Deserialize, Hash, PartialEq, Eq, Clone, Serialize)]
pub struct User {
pub id: i64,
pub is_bot: bool,