From 406a0076785d55caeb790e935940a95de7216039 Mon Sep 17 00:00:00 2001 From: Jimmy Cuadra Date: Fri, 21 Jun 2019 17:12:23 -0700 Subject: [PATCH] Add more tests. --- src/room/name.rs | 44 ++++++++++++++++++++++++++-------- src/room/power_levels.rs | 51 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 82 insertions(+), 13 deletions(-) diff --git a/src/room/name.rs b/src/room/name.rs index ebdcb4a9..3f8a2143 100644 --- a/src/room/name.rs +++ b/src/room/name.rs @@ -30,14 +30,14 @@ pub struct NameEvent { /// The unique identifier for the room associated with this event. pub room_id: Option, - /// Additional key-value pairs not signed by the homeserver. - pub unsigned: Option, - /// The unique identifier for the user who sent this event. pub sender: UserId, /// A key that determines which piece of room state the event represents. pub state_key: String, + + /// Additional key-value pairs not signed by the homeserver. + pub unsigned: Option, } /// The payload for `NameEvent`. @@ -206,7 +206,8 @@ mod tests { use std::convert::TryFrom; use js_int::UInt; - use ruma_identifiers::{EventId, UserId}; + use ruma_identifiers::{EventId, RoomId, UserId}; + use serde_json::Value; use super::{NameEvent, NameEventContent}; @@ -221,12 +222,35 @@ mod tests { prev_content: None, room_id: None, unsigned: None, - sender: UserId::try_from("@carl:matrix.org").unwrap(), + sender: UserId::try_from("@carl:example.com").unwrap(), state_key: "".to_string(), }; let actual = serde_json::to_string(&name_event).unwrap(); - let expected = r#"{"content":{"name":"The room name"},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:matrix.org","state_key":"","type":"m.room.name"}"#; + let expected = r#"{"content":{"name":"The room name"},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:example.com","state_key":"","type":"m.room.name"}"#; + + assert_eq!(actual, expected); + } + + #[test] + fn serialization_with_all_fields() { + let name_event = NameEvent { + content: NameEventContent { + name: Some("The room name".to_string()), + }, + event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(), + origin_server_ts: UInt::try_from(1).unwrap(), + prev_content: Some(NameEventContent { + name: Some("The old name".to_string()), + }), + room_id: Some(RoomId::try_from("!n8f893n9:example.com").unwrap()), + unsigned: Some(serde_json::from_str::(r#"{"foo":"bar"}"#).unwrap()), + sender: UserId::try_from("@carl:example.com").unwrap(), + state_key: "".to_string(), + }; + + let actual = serde_json::to_string(&name_event).unwrap(); + let expected = r#"{"content":{"name":"The room name"},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"prev_content":{"name":"The old name"},"room_id":"!n8f893n9:example.com","unsigned":{"foo":"bar"},"sender":"@carl:example.com","state_key":"","type":"m.room.name"}"#; assert_eq!(actual, expected); } @@ -234,7 +258,7 @@ mod tests { #[test] fn absent_field_as_none() { assert_eq!( - r#"{"content":{},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:matrix.org","state_key":"","type":"m.room.name"}"# + r#"{"content":{},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:example.com","state_key":"","type":"m.room.name"}"# .parse::() .unwrap() .content @@ -246,7 +270,7 @@ mod tests { #[test] fn null_field_as_none() { assert_eq!( - r#"{"content":{"name":null},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:matrix.org","state_key":"","type":"m.room.name"}"# + r#"{"content":{"name":null},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:example.com","state_key":"","type":"m.room.name"}"# .parse::() .unwrap() .content @@ -258,7 +282,7 @@ mod tests { #[test] fn empty_string_as_none() { assert_eq!( - r#"{"content":{"name":""},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:matrix.org","state_key":"","type":"m.room.name"}"# + r#"{"content":{"name":""},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:example.com","state_key":"","type":"m.room.name"}"# .parse::() .unwrap() .content @@ -272,7 +296,7 @@ mod tests { let name = Some("The room name".to_string()); assert_eq!( - r#"{"content":{"name":"The room name"},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:matrix.org","state_key":"","type":"m.room.name"}"# + r#"{"content":{"name":"The room name"},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:example.com","state_key":"","type":"m.room.name"}"# .parse::() .unwrap() .content diff --git a/src/room/power_levels.rs b/src/room/power_levels.rs index 62ecf003..62863ec2 100644 --- a/src/room/power_levels.rs +++ b/src/room/power_levels.rs @@ -285,7 +285,8 @@ mod tests { use std::{collections::HashMap, convert::TryFrom}; use js_int::{Int, UInt}; - use ruma_identifiers::{EventId, UserId}; + use ruma_identifiers::{EventId, RoomId, UserId}; + use serde_json::Value; use super::{NotificationPowerLevels, PowerLevelsEvent, PowerLevelsEventContent}; @@ -311,12 +312,56 @@ mod tests { prev_content: None, room_id: None, unsigned: None, - sender: UserId::try_from("@carl:matrix.org").unwrap(), + sender: UserId::try_from("@carl:example.com").unwrap(), state_key: "".to_string(), }; let actual = serde_json::to_string(&power_levels_event).unwrap(); - let expected = r#"{"content":{"ban":50,"events":{},"events_default":50,"invite":50,"kick":50,"redact":50,"state_default":50,"users":{},"users_default":50,"notifications":{"room":50}},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:matrix.org","state_key":"","type":"m.room.power_levels"}"#; + let expected = r#"{"content":{"ban":50,"events":{},"events_default":50,"invite":50,"kick":50,"redact":50,"state_default":50,"users":{},"users_default":50,"notifications":{"room":50}},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"sender":"@carl:example.com","state_key":"","type":"m.room.power_levels"}"#; + + assert_eq!(actual, expected); + } + + #[test] + fn serialization_with_all_fields() { + let default = Int::try_from(50).unwrap(); + + let power_levels_event = PowerLevelsEvent { + content: PowerLevelsEventContent { + ban: default, + events: HashMap::new(), + events_default: default, + invite: default, + kick: default, + redact: default, + state_default: default, + users: HashMap::new(), + users_default: default, + notifications: NotificationPowerLevels { room: default }, + }, + event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(), + origin_server_ts: UInt::try_from(1).unwrap(), + prev_content: Some(PowerLevelsEventContent { + // Make just one field different so we at least know they're two different objects. + ban: Int::try_from(75).unwrap(), + events: HashMap::new(), + events_default: default, + invite: default, + kick: default, + redact: default, + state_default: default, + users: HashMap::new(), + users_default: default, + notifications: NotificationPowerLevels { room: default }, + }), + room_id: Some(RoomId::try_from("!n8f893n9:example.com").unwrap()), + unsigned: Some(serde_json::from_str::(r#"{"foo":"bar"}"#).unwrap()), + sender: UserId::try_from("@carl:example.com").unwrap(), + state_key: "".to_string(), + }; + + let actual = serde_json::to_string(&power_levels_event).unwrap(); + let expected = r#"{"content":{"ban":50,"events":{},"events_default":50,"invite":50,"kick":50,"redact":50,"state_default":50,"users":{},"users_default":50,"notifications":{"room":50}},"event_id":"$h29iv0s8:example.com","origin_server_ts":1,"prev_content":{"ban":75,"events":{},"events_default":50,"invite":50,"kick":50,"redact":50,"state_default":50,"users":{},"users_default":50,"notifications":{"room":50}},"room_id":"!n8f893n9:example.com","unsigned":{"foo":"bar"},"sender":"@carl:example.com","state_key":"","type":"m.room.power_levels"}"#; assert_eq!(actual, expected); }