ruwuma/tests/stripped.rs.bk
2020-06-09 17:01:08 +02:00

139 lines
4.3 KiB
Plaintext

use std::convert::TryFrom;
use js_int::UInt;
use ruma_events::{
room::{join_rules::JoinRule, topic::TopicEventContent},
AnyStrippedStateEvent, EventJson, EventType,
};
use ruma_identifiers::UserId;
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
#[test]
fn serialize_stripped_state_event() {
let content = StrippedRoomTopic {
content: TopicEventContent {
topic: "Testing room".to_string(),
},
state_key: "".to_string(),
event_type: EventType::RoomTopic,
sender: UserId::try_from("@example:localhost").unwrap(),
};
let event = AnyStrippedStateEvent::RoomTopic(content);
let json_data = json!({
"content": {
"topic": "Testing room"
},
"type": "m.room.topic",
"state_key": "",
"sender": "@example:localhost"
});
assert_eq!(to_json_value(&event).unwrap(), json_data);
}
#[test]
fn deserialize_stripped_state_events() {
let name_event = json!({
"type": "m.room.name",
"state_key": "",
"sender": "@example:localhost",
"content": { "name": "Ruma" }
});
let join_rules_event = json!({
"type": "m.room.join_rules",
"state_key": "",
"sender": "@example:localhost",
"content": { "join_rule": "public" }
});
let avatar_event = json!({
"type": "m.room.avatar",
"state_key": "",
"sender": "@example:localhost",
"content": {
"info": {
"h": 128,
"w": 128,
"mimetype": "image/jpeg",
"size": 1024,
"thumbnail_info": {
"h": 16,
"w": 16,
"mimetype": "image/jpeg",
"size": 32
},
"thumbnail_url": "https://example.com/image-thumbnail.jpg"
},
"thumbnail_info": {
"h": 16,
"w": 16,
"mimetype": "image/jpeg",
"size": 32
},
"thumbnail_url": "https://example.com/image-thumbnail.jpg",
"url": "https://example.com/image.jpg"
}
});
match from_json_value::<EventJson<_>>(name_event.clone())
.unwrap()
.deserialize()
.unwrap()
{
AnyStrippedStateEvent::RoomName(event) => {
assert_eq!(event.content.name, Some("Ruma".to_string()));
assert_eq!(event.event_type, EventType::RoomName);
assert_eq!(event.state_key, "");
assert_eq!(event.sender.to_string(), "@example:localhost");
}
_ => unreachable!(),
};
// Ensure `StrippedStateContent` can be parsed, not just `StrippedState`.
assert!(from_json_value::<EventJson<StrippedRoomName>>(name_event)
.unwrap()
.deserialize()
.is_ok());
match from_json_value::<EventJson<_>>(join_rules_event)
.unwrap()
.deserialize()
.unwrap()
{
AnyStrippedStateEvent::RoomJoinRules(event) => {
assert_eq!(event.content.join_rule, JoinRule::Public);
assert_eq!(event.event_type, EventType::RoomJoinRules);
assert_eq!(event.state_key, "");
assert_eq!(event.sender.to_string(), "@example:localhost");
}
_ => unreachable!(),
};
match from_json_value::<EventJson<_>>(avatar_event)
.unwrap()
.deserialize()
.unwrap()
{
AnyStrippedStateEvent::RoomAvatar(event) => {
let image_info = event.content.info.unwrap();
assert_eq!(image_info.height.unwrap(), UInt::try_from(128).unwrap());
assert_eq!(image_info.width.unwrap(), UInt::try_from(128).unwrap());
assert_eq!(image_info.mimetype.unwrap(), "image/jpeg");
assert_eq!(image_info.size.unwrap(), UInt::try_from(1024).unwrap());
assert_eq!(
image_info.thumbnail_info.unwrap().size.unwrap(),
UInt::try_from(32).unwrap()
);
assert_eq!(event.content.url, "https://example.com/image.jpg");
assert_eq!(event.event_type, EventType::RoomAvatar);
assert_eq!(event.state_key, "");
assert_eq!(event.sender.to_string(), "@example:localhost");
}
_ => unreachable!(),
};
}