From 4a7b3a103ca7e50b1a3ef3d2500ab82772007feb Mon Sep 17 00:00:00 2001 From: Devin R Date: Sun, 21 Jun 2020 14:01:04 -0400 Subject: [PATCH] matrix_sdk_test: Use static JSON values instead of reading files --- matrix_sdk/src/client.rs | 6 +- matrix_sdk_base/src/client.rs | 4 +- matrix_sdk_base/src/models/room.rs | 12 +- matrix_sdk_base/src/models/room_member.rs | 12 +- matrix_sdk_test/Cargo.toml | 1 + matrix_sdk_test/src/lib.rs | 79 +- matrix_sdk_test/src/test_json/events.rs | 381 ++++++++ matrix_sdk_test/src/test_json/mod.rs | 11 + matrix_sdk_test/src/test_json/sync.rs | 1034 +++++++++++++++++++++ 9 files changed, 1485 insertions(+), 55 deletions(-) create mode 100644 matrix_sdk_test/src/test_json/events.rs create mode 100644 matrix_sdk_test/src/test_json/mod.rs create mode 100644 matrix_sdk_test/src/test_json/sync.rs diff --git a/matrix_sdk/src/client.rs b/matrix_sdk/src/client.rs index fad71548a..ff47ef86b 100644 --- a/matrix_sdk/src/client.rs +++ b/matrix_sdk/src/client.rs @@ -1404,7 +1404,7 @@ mod test { use crate::RegistrationBuilder; use matrix_sdk_base::JsonStore; - use matrix_sdk_test::{EventBuilder, EventsFile}; + use matrix_sdk_test::{EventBuilder, EventsJson}; use mockito::{mock, Matcher}; use tempfile::tempdir; @@ -1522,8 +1522,8 @@ mod test { client.restore_login(session).await.unwrap(); let mut response = EventBuilder::default() - .add_room_event(EventsFile::Member, RoomEvent::RoomMember) - .add_room_event(EventsFile::PowerLevels, RoomEvent::RoomPowerLevels) + .add_room_event(EventsJson::Member, RoomEvent::RoomMember) + .add_room_event(EventsJson::PowerLevels, RoomEvent::RoomPowerLevels) .build_sync_response(); client diff --git a/matrix_sdk_base/src/client.rs b/matrix_sdk_base/src/client.rs index dabdeab4e..e84a29d07 100644 --- a/matrix_sdk_base/src/client.rs +++ b/matrix_sdk_base/src/client.rs @@ -1808,7 +1808,7 @@ mod test { #[async_test] async fn test_joined_room_creation() { let mut sync_response = EventBuilder::default() - .add_room_event(EventsFile::Member, RoomEvent::RoomMember) + .add_room_event(EventsJson::Member, RoomEvent::RoomMember) .build_sync_response(); let client = get_client().await; let room_id = get_room_id(); @@ -2216,7 +2216,7 @@ mod test { let room_id = get_room_id(); let mut sync_response = EventBuilder::default() - .add_room_event(EventsFile::Member, RoomEvent::RoomMember) + .add_room_event(EventsJson::Member, RoomEvent::RoomMember) .build_sync_response(); client diff --git a/matrix_sdk_base/src/models/room.rs b/matrix_sdk_base/src/models/room.rs index 252438b47..3eab45428 100644 --- a/matrix_sdk_base/src/models/room.rs +++ b/matrix_sdk_base/src/models/room.rs @@ -577,7 +577,7 @@ mod test { }; use crate::identifiers::{EventId, UserId}; use crate::{BaseClient, Session}; - use matrix_sdk_test::{async_test, sync_response, EventBuilder, EventsFile, SyncResponseFile}; + use matrix_sdk_test::{async_test, sync_response, EventBuilder, EventsJson, SyncResponseFile}; use std::time::SystemTime; @@ -633,8 +633,8 @@ mod test { let user_id = UserId::try_from("@example:localhost").unwrap(); let mut response = EventBuilder::default() - .add_room_event(EventsFile::Member, RoomEvent::RoomMember) - .add_room_event(EventsFile::PowerLevels, RoomEvent::RoomPowerLevels) + .add_room_event(EventsJson::Member, RoomEvent::RoomMember) + .add_room_event(EventsJson::PowerLevels, RoomEvent::RoomPowerLevels) .build_sync_response(); client.receive_sync_response(&mut response).await.unwrap(); @@ -662,7 +662,7 @@ mod test { let room_id = get_room_id(); let mut response = EventBuilder::default() - .add_state_event(EventsFile::Aliases, StateEvent::RoomAliases) + .add_state_event(EventsJson::Aliases, StateEvent::RoomAliases) .build_sync_response(); client.receive_sync_response(&mut response).await.unwrap(); @@ -680,7 +680,7 @@ mod test { let room_id = get_room_id(); let mut response = EventBuilder::default() - .add_state_event(EventsFile::Alias, StateEvent::RoomCanonicalAlias) + .add_state_event(EventsJson::Alias, StateEvent::RoomCanonicalAlias) .build_sync_response(); client.receive_sync_response(&mut response).await.unwrap(); @@ -698,7 +698,7 @@ mod test { let room_id = get_room_id(); let mut response = EventBuilder::default() - .add_state_event(EventsFile::Name, StateEvent::RoomName) + .add_state_event(EventsJson::Name, StateEvent::RoomName) .build_sync_response(); client.receive_sync_response(&mut response).await.unwrap(); diff --git a/matrix_sdk_base/src/models/room_member.rs b/matrix_sdk_base/src/models/room_member.rs index c2d0674f7..0bb4db7c8 100644 --- a/matrix_sdk_base/src/models/room_member.rs +++ b/matrix_sdk_base/src/models/room_member.rs @@ -198,7 +198,7 @@ impl RoomMember { #[cfg(test)] mod test { - use matrix_sdk_test::{async_test, EventBuilder, EventsFile}; + use matrix_sdk_test::{async_test, EventBuilder, EventsJson}; use crate::events::collections::all::RoomEvent; use crate::events::room::member::MembershipState; @@ -234,8 +234,8 @@ mod test { let room_id = get_room_id(); let mut response = EventBuilder::default() - .add_room_event(EventsFile::Member, RoomEvent::RoomMember) - .add_room_event(EventsFile::PowerLevels, RoomEvent::RoomPowerLevels) + .add_room_event(EventsJson::Member, RoomEvent::RoomMember) + .add_room_event(EventsJson::PowerLevels, RoomEvent::RoomPowerLevels) .build_sync_response(); client.receive_sync_response(&mut response).await.unwrap(); @@ -258,9 +258,9 @@ mod test { let room_id = get_room_id(); let mut response = EventBuilder::default() - .add_room_event(EventsFile::Member, RoomEvent::RoomMember) - .add_room_event(EventsFile::PowerLevels, RoomEvent::RoomPowerLevels) - .add_presence_event(EventsFile::Presence) + .add_room_event(EventsJson::Member, RoomEvent::RoomMember) + .add_room_event(EventsJson::PowerLevels, RoomEvent::RoomPowerLevels) + .add_presence_event(EventsJson::Presence) .build_sync_response(); client.receive_sync_response(&mut response).await.unwrap(); diff --git a/matrix_sdk_test/Cargo.toml b/matrix_sdk_test/Cargo.toml index 4321a85cd..b42c94de6 100644 --- a/matrix_sdk_test/Cargo.toml +++ b/matrix_sdk_test/Cargo.toml @@ -15,3 +15,4 @@ serde_json = "1.0.53" http = "0.2.1" matrix-sdk-common = { version = "0.1.0", path = "../matrix_sdk_common" } matrix-sdk-test-macros = { version = "0.1.0", path = "../matrix_sdk_test_macros" } +lazy_static = "1.4.0" diff --git a/matrix_sdk_test/src/lib.rs b/matrix_sdk_test/src/lib.rs index 0b84be4bf..0dc0456d6 100644 --- a/matrix_sdk_test/src/lib.rs +++ b/matrix_sdk_test/src/lib.rs @@ -15,12 +15,15 @@ use matrix_sdk_common::events::{ EventJson, TryFromRaw, }; use matrix_sdk_common::identifiers::RoomId; +use serde_json::Value as JsonValue; pub use matrix_sdk_test_macros::async_test; -/// Embedded event files +pub mod test_json; + +/// Static `serde_json::Value`s #[derive(Debug)] -pub enum EventsFile { +pub enum EventsJson { Alias, Aliases, Create, @@ -67,15 +70,15 @@ impl EventBuilder { /// Add an event to the room events `Vec`. pub fn add_ephemeral( mut self, - file: EventsFile, + json: EventsJson, variant: fn(Ev) -> Event, ) -> Self { - let val: &str = match file { - EventsFile::Typing => include_str!("../../test_data/events/typing.json"), - _ => panic!("unknown ephemeral event file {:?}", file), + let val: &JsonValue = match json { + EventsJson::Typing => &test_json::TYPING, + _ => panic!("unknown ephemeral event {:?}", json), }; - let event = serde_json::from_str::>(&val) + let event = serde_json::from_value::>(val.clone()) .unwrap() .deserialize() .unwrap(); @@ -87,14 +90,14 @@ impl EventBuilder { #[allow(clippy::match_single_binding, unused)] pub fn add_account( mut self, - file: EventsFile, + json: EventsJson, variant: fn(Ev) -> Event, ) -> Self { - let val: &str = match file { - _ => panic!("unknown account event file {:?}", file), + let val: &JsonValue = match json { + _ => panic!("unknown account event {:?}", json), }; - let event = serde_json::from_str::>(&val) + let event = serde_json::from_value::>(val.clone()) .unwrap() .deserialize() .unwrap(); @@ -105,16 +108,16 @@ impl EventBuilder { /// Add an event to the room events `Vec`. pub fn add_room_event( mut self, - file: EventsFile, + json: EventsJson, variant: fn(Ev) -> RoomEvent, ) -> Self { - let val = match file { - EventsFile::Member => include_str!("../../test_data/events/member.json"), - EventsFile::PowerLevels => include_str!("../../test_data/events/power_levels.json"), - _ => panic!("unknown room event file {:?}", file), + let val: &JsonValue = match json { + EventsJson::Member => &test_json::MEMBER, + EventsJson::PowerLevels => &test_json::POWER_LEVELS, + _ => panic!("unknown room event json {:?}", json), }; - let event = serde_json::from_str::>(&val) + let event = serde_json::from_value::>(val.clone()) .unwrap() .deserialize() .unwrap(); @@ -183,17 +186,17 @@ impl EventBuilder { /// Add a state event to the state events `Vec`. pub fn add_state_event( mut self, - file: EventsFile, + json: EventsJson, variant: fn(Ev) -> StateEvent, ) -> Self { - let val = match file { - EventsFile::Alias => include_str!("../../test_data/events/alias.json"), - EventsFile::Aliases => include_str!("../../test_data/events/aliases.json"), - EventsFile::Name => include_str!("../../test_data/events/name.json"), - _ => panic!("unknown state event file {:?}", file), + let val: &JsonValue = match json { + EventsJson::Alias => &test_json::ALIAS, + EventsJson::Aliases => &test_json::ALIASES, + EventsJson::Name => &test_json::NAME, + _ => panic!("unknown state event {:?}", json), }; - let event = serde_json::from_str::>(&val) + let event = serde_json::from_value::>(val.clone()) .unwrap() .deserialize() .unwrap(); @@ -202,13 +205,13 @@ impl EventBuilder { } /// Add an presence event to the presence events `Vec`. - pub fn add_presence_event(mut self, file: EventsFile) -> Self { - let val = match file { - EventsFile::Presence => include_str!("../../test_data/events/presence.json"), - _ => panic!("unknown presence event file {:?}", file), + pub fn add_presence_event(mut self, json: EventsJson) -> Self { + let val: &JsonValue = match json { + EventsJson::Presence => &test_json::PRESENCE, + _ => panic!("unknown presence event {:?}", json), }; - let event = serde_json::from_str::>(&val) + let event = serde_json::from_value::>(val.clone()) .unwrap() .deserialize() .unwrap(); @@ -338,16 +341,16 @@ pub enum SyncResponseFile { /// Get specific API responses for testing pub fn sync_response(kind: SyncResponseFile) -> SyncResponse { - let data = match kind { - SyncResponseFile::All => include_bytes!("../../test_data/more_sync.json").to_vec(), - SyncResponseFile::Default => include_bytes!("../../test_data/sync.json").to_vec(), - SyncResponseFile::DefaultWithSummary => { - include_bytes!("../../test_data/sync_with_summary.json").to_vec() - } - SyncResponseFile::Invite => include_bytes!("../../test_data/invite_sync.json").to_vec(), - SyncResponseFile::Leave => include_bytes!("../../test_data/leave_sync.json").to_vec(), + let data: &JsonValue = match kind { + SyncResponseFile::All => &test_json::MORE_SYNC, + SyncResponseFile::Default => &test_json::SYNC, + SyncResponseFile::DefaultWithSummary => &test_json::DEFAULT_SYNC, + SyncResponseFile::Invite => &test_json::INVITE_SYNC, + SyncResponseFile::Leave => &test_json::LEAVE_SYNC, }; - let response = Response::builder().body(data.to_vec()).unwrap(); + let response = Response::builder() + .body(data.to_string().as_bytes().to_vec()) + .unwrap(); SyncResponse::try_from(response).unwrap() } diff --git a/matrix_sdk_test/src/test_json/events.rs b/matrix_sdk_test/src/test_json/events.rs new file mode 100644 index 000000000..44af6caf1 --- /dev/null +++ b/matrix_sdk_test/src/test_json/events.rs @@ -0,0 +1,381 @@ +use lazy_static::lazy_static; +use serde_json::{json, Value as JsonValue}; + +lazy_static! { + pub static ref ALIAS: JsonValue = json!({ + "content": { + "alias": "#tutorial:localhost" + }, + "event_id": "$15139375513VdeRF:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.canonical_alias", + "unsigned": { + "age": 703422 + } + }); +} + +lazy_static! { + pub static ref ALIASES: JsonValue = json!({ + "content": { + "aliases": [ + "#tutorial:localhost" + ] + }, + "event_id": "$15139375516NUgtD:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "localhost", + "type": "m.room.aliases", + "unsigned": { + "age": 703422 + } + }); +} + +lazy_static! { + pub static ref CREATE: JsonValue = json!({ + "content": { + "creator": "@example:localhost", + "m.federate": true, + "room_version": "1" + }, + "event_id": "$151957878228ekrDs:localhost", + "origin_server_ts": 15195787, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.create", + "unsigned": { + "age": 139298 + } + }); +} + +lazy_static! { + pub static ref FULLY_READ: JsonValue = json!({ + "content": { + "event_id": "$someplace:example.org" + }, + "room_id": "!somewhere:example.org", + "type": "m.fully_read" + }); +} + +lazy_static! { + pub static ref HISTORY_VISIBILITY: JsonValue = json!({ + "content": { + "history_visibility": "world_readable" + }, + "event_id": "$151957878235ricnD:localhost", + "origin_server_ts": 151957878, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.history_visibility", + "unsigned": { + "age": 1392989 + } + }); +} + +lazy_static! { + pub static ref JOIN_RULES: JsonValue = json!({ + "content": { + "join_rule": "public" + }, + "event_id": "$151957878231iejdB:localhost", + "origin_server_ts": 151957878, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.join_rules", + "unsigned": { + "age": 1392989 + } + }); +} + +lazy_static! { + pub static ref MEMBER: JsonValue = json!({ + "content": { + "avatar_url": null, + "displayname": "example", + "membership": "join" + }, + "event_id": "$151800140517rfvjc:localhost", + "membership": "join", + "origin_server_ts": 151800140, + "sender": "@example:localhost", + "state_key": "@example:localhost", + "type": "m.room.member", + "unsigned": { + "age": 297036, + "replaces_state": "$151800111315tsynI:localhost", + "prev_content": { + "avatar_url": null, + "displayname": "example", + "membership": "invite" + } + } + }); +} + +lazy_static! { + pub static ref MESSAGE_EMOTE: JsonValue = json!({ + "content": { + "body": "is dancing", "format": "org.matrix.custom.html", + "formatted_body": "is dancing", + "msgtype": "m.emote" + }, + "event_id": "$152037280074GZeOm:localhost", + "origin_server_ts": 152037280, + "sender": "@example:localhost", + "type": "m.room.message", + "unsigned": { + "age": 598971 + } + }); +} + +lazy_static! { + pub static ref MESSAGE_NOTICE: JsonValue = json!({ + "origin_server_ts": 153356516, + "sender": "@_neb_github:matrix.org", + "event_id": "$153356516319138IHRIC:matrix.org", + "unsigned": { + "age": 743 + }, + "content": { + "body": "https://github.com/matrix-org/matrix-python-sdk/issues/266 : Consider allowing MatrixClient.__init__ to take sync_token kwarg", + "format": "org.matrix.custom.html", + "formatted_body": "313: nio wins!", + "msgtype": "m.notice" + }, + "type": "m.room.message", + "room_id": "!YHhmBTmGBHGQOlGpaZ:matrix.org" + }); +} + +lazy_static! { + pub static ref MESSAGE_TEXT: JsonValue = json!({ + "content": { + "body": "is dancing", "format": "org.matrix.custom.html", + "formatted_body": "is dancing", + "msgtype": "m.text" + }, + "event_id": "$152037280074GZeOm:localhost", + "origin_server_ts": 152037280, + "sender": "@example:localhost", + "type": "m.room.message", + "unsigned": { + "age": 598971 + } + }); +} + +lazy_static! { + pub static ref NAME: JsonValue = json!({ + "content": { + "name": "room name" + }, + "event_id": "$15139375513VdeRF:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.name", + "unsigned": { + "age": 703422 + } + }); +} + +lazy_static! { + pub static ref POWER_LEVELS: JsonValue = json!({ + "content": { + "ban": 50, + "events": { + "m.room.avatar": 50, + "m.room.canonical_alias": 50, + "m.room.history_visibility": 100, + "m.room.name": 50, + "m.room.power_levels": 100, + "m.room.message": 25 + }, + "events_default": 0, + "invite": 0, + "kick": 50, + "redact": 50, + "state_default": 50, + "users": { + "@example:localhost": 100, + "@bob:localhost": 0 + }, + "users_default": 0 + }, + "event_id": "$15139375512JaHAW:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.power_levels", + "unsigned": { + "age": 703422 + } + } + ); +} + +lazy_static! { + pub static ref PRESENCE: JsonValue = json!({ + "content": { + "avatar_url": "mxc://localhost:wefuiwegh8742w", + "currently_active": false, + "last_active_ago": 1, + "presence": "online", + "status_msg": "Making cupcakes" + }, + "sender": "@example:localhost", + "type": "m.presence" + }); +} + +lazy_static! { + pub static ref REDACTED_INVALID: JsonValue = json!({ + "content": {}, + "event_id": "$15275046980maRLj:localhost", + "origin_server_ts": 1527504698, + "sender": "@example:localhost", + "type": "m.room.message" + }); +} + +lazy_static! { + pub static ref REDACTED_STATE: JsonValue = json!({ + "content": {}, + "event_id": "$example_id:example.org", + "origin_server_ts": 153232493, + "sender": "@example:example.org", + "state_key": "test_state_key", + "type": "m.some.state", + "unsigned": { + "age": 3069315, + "redacted_because": { + "content": {}, + "event_id": "$redaction_example_id:example.org", + "origin_server_ts": 153232494, + "redacts": "$example_id:example.org", + "sender": "@example:example:org", + "type": "m.room.redaction", + "unsigned": {"age": 30693147} + }, + "redacted_by": "$redaction_example_id:example.org" + } + }); +} + +lazy_static! { + pub static ref REDACTED: JsonValue = json!({ + "content": {}, + "event_id": "$15275046980maRLj:localhost", + "origin_server_ts": 1527504698, + "sender": "@example:localhost", + "type": "m.room.message", + "unsigned": { + "age": 19334, + "redacted_because": { + "content": {}, + "event_id": "$15275047031IXQRi:localhost", + "origin_server_ts": 1527504703, + "redacts": "$15275046980maRLj:localhost", + "sender": "@example:localhost", + "type": "m.room.redaction", + "unsigned": { + "age": 14523 + } + }, + "redacted_by": "$15275047031IXQRi:localhost" + } + }); +} + +lazy_static! { + pub static ref REDACTION: JsonValue = json!({ + "content": { + "reason": "😀" + }, + "event_id": "$151957878228ssqrJ:localhost", + "origin_server_ts": 151957878, + "sender": "@example:localhost", + "type": "m.room.redaction", + "redacts": "$151957878228ssqrj:localhost" + }); +} + +lazy_static! { + pub static ref ROOM_AVATAR: JsonValue = json!({ + "content": { + "info": { + "h": 398, + "mimetype": "image/jpeg", + "size": 31037, + "w": 394 + }, + "url": "mxc://domain.com/JWEIFJgwEIhweiWJE" + }, + "event_id": "$143273582443PhrSn:domain.com", + "origin_server_ts": 143273582, + "room_id": "!jEsUZKDJdhlrceRyVU:domain.com", + "sender": "@example:domain.com", + "state_key": "", + "type": "m.room.avatar", + "unsigned": { + "age": 1234 + } + }); +} + +lazy_static! { + pub static ref TAG: JsonValue = json!({ + "content": { + "tags": { + "u.work": { + "order": 0.9 + } + } + }, + "type": "m.tag" + }); +} + +lazy_static! { + pub static ref TOPIC: JsonValue = json!({ + "content": { + "topic": "😀" + }, + "event_id": "$151957878228ssqrJ:localhost", + "origin_server_ts": 151957878, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.topic", + "unsigned": { + "age": 1392989, + "prev_content": { + "topic": "test" + }, + "prev_sender": "@example:localhost", + "replaces_state": "$151957069225EVYKm:localhost" + } + }); +} + +lazy_static! { + pub static ref TYPING: JsonValue = json!({ + "content": { + "user_ids": [ + "@alice:matrix.org", + "@bob:example.com" + ] + }, + "room_id": "!jEsUZKDJdhlrceRyVU:example.org", + "type": "m.typing" + }); +} diff --git a/matrix_sdk_test/src/test_json/mod.rs b/matrix_sdk_test/src/test_json/mod.rs new file mode 100644 index 000000000..1016d9c0e --- /dev/null +++ b/matrix_sdk_test/src/test_json/mod.rs @@ -0,0 +1,11 @@ +//! Test data for the matrix-sdk crates. +//! +//! Exporting each const allows all the test data to have a single source of truth. +//! When running `cargo publish` no external folders are allowed so all the +//! test data needs to be contained within this crate. + +pub mod events; +pub mod sync; + +pub use events::{ALIAS, ALIASES, MEMBER, NAME, POWER_LEVELS, PRESENCE, TYPING}; +pub use sync::{DEFAULT_SYNC, INVITE_SYNC, LEAVE_SYNC, MORE_SYNC, SYNC}; diff --git a/matrix_sdk_test/src/test_json/sync.rs b/matrix_sdk_test/src/test_json/sync.rs new file mode 100644 index 000000000..d235ec8b9 --- /dev/null +++ b/matrix_sdk_test/src/test_json/sync.rs @@ -0,0 +1,1034 @@ +use lazy_static::lazy_static; +use serde_json::{json, Value as JsonValue}; + +lazy_static! { + pub static ref SYNC: JsonValue = json!({ + "device_one_time_keys_count": {}, + "next_batch": "s526_47314_0_7_1_1_1_11444_1", + "device_lists": { + "changed": [ + "@example:example.org" + ], + "left": [] + }, + "rooms": { + "invite": {}, + "join": { + "!SVkFJHzfwvuaIEawgC:localhost": { + "summary": {}, + "account_data": { + "events": [ + { + "content": { + "event_id": "$someplace:example.org" + }, + "room_id": "!roomid:room.com", + "type": "m.fully_read" + }, + { + "content": { + "ignored_users": { + "@someone:example.org": {} + } + }, + "type": "m.ignored_user_list" + } + ] + }, + "ephemeral": { + "events": [ + { + "content": { + "$151680659217152dPKjd:localhost": { + "m.read": { + "@example:localhost": { + "ts": 151680989 + } + } + } + }, + "type": "m.receipt" + } + ] + }, + "state": { + "events": [ + { + "content": { + "join_rule": "public" + }, + "event_id": "$15139375514WsgmR:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.join_rules", + "unsigned": { + "age": 7034220 + } + }, + { + "content": { + "avatar_url": null, + "displayname": "example", + "membership": "join" + }, + "event_id": "$151800140517rfvjc:localhost", + "membership": "join", + "origin_server_ts": 151800140, + "sender": "@example:localhost", + "state_key": "@example:localhost", + "type": "m.room.member", + "unsigned": { + "age": 2970366, + "replaces_state": "$151800111315tsynI:localhost" + } + }, + { + "content": { + "history_visibility": "shared" + }, + "event_id": "$15139375515VaJEY:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.history_visibility", + "unsigned": { + "age": 7034220 + } + }, + { + "content": { + "creator": "@example:localhost" + }, + "event_id": "$15139375510KUZHi:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.create", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "aliases": [ + "#tutorial:localhost" + ] + }, + "event_id": "$15139375516NUgtD:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "localhost", + "type": "m.room.aliases", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "topic": "room topic" + }, + "event_id": "$151957878228ssqrJ:localhost", + "origin_server_ts": 151957878, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.topic", + "unsigned": { + "age": 1392989709, + "prev_content": { + "topic": "test" + }, + "prev_sender": "@example:localhost", + "replaces_state": "$151957069225EVYKm:localhost" + } + }, + { + "content": { + "ban": 50, + "events": { + "m.room.avatar": 50, + "m.room.canonical_alias": 50, + "m.room.history_visibility": 100, + "m.room.name": 50, + "m.room.power_levels": 100 + }, + "events_default": 0, + "invite": 0, + "kick": 50, + "redact": 50, + "state_default": 50, + "users": { + "@example:localhost": 100 + }, + "users_default": 0 + }, + "event_id": "$15139375512JaHAW:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.power_levels", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "alias": "#tutorial:localhost" + }, + "event_id": "$15139375513VdeRF:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.canonical_alias", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "avatar_url": null, + "displayname": "example2", + "membership": "join" + }, + "event_id": "$152034824468gOeNB:localhost", + "membership": "join", + "origin_server_ts": 152034824, + "sender": "@example2:localhost", + "state_key": "@example2:localhost", + "type": "m.room.member", + "unsigned": { + "age": 623527289, + "prev_content": { + "membership": "leave" + }, + "prev_sender": "@example:localhost", + "replaces_state": "$152034819067QWJxM:localhost" + } + }, + { + "content": { + "membership": "leave", + "reason": "offline", + "avatar_url": "avatar.com", + "displayname": "example" + }, + "event_id": "$1585345508297748AIUBh:matrix.org", + "origin_server_ts": 158534550, + "sender": "@example:localhost", + "state_key": "@example:localhost", + "type": "m.room.member", + "unsigned": { + "replaces_state": "$1585345354296486IGZfp:localhost", + "prev_content": { + "avatar_url": "avatar.com", + "displayname": "example", + "membership": "join" + }, + "prev_sender": "@example2:localhost", + "age": 6992 + }, + "room_id": "!roomid:room.com" + } + ] + }, + "timeline": { + "events": [ + { + "content": { + "body": "baba", + "format": "org.matrix.custom.html", + "formatted_body": "baba", + "msgtype": "m.text" + }, + "event_id": "$152037280074GZeOm:localhost", + "origin_server_ts": 152037280, + "sender": "@example:localhost", + "type": "m.room.message", + "unsigned": { + "age": 598971425 + } + } + ], + "limited": true, + "prev_batch": "t392-516_47314_0_7_1_1_1_11444_1" + }, + "unread_notifications": { + "highlight_count": 0, + "notification_count": 11 + } + } + }, + "leave": {} + }, + "to_device": { + "events": [] + }, + "presence": { + "events": [ + { + "content": { + "avatar_url": "mxc://localhost:wefuiwegh8742w", + "currently_active": false, + "last_active_ago": 1, + "presence": "online", + "status_msg": "Making cupcakes" + }, + "sender": "@example:localhost", + "type": "m.presence" + } + ] + } + }); +} + +lazy_static! { + pub static ref DEFAULT_SYNC: JsonValue = json!({ + "device_one_time_keys_count": {}, + "next_batch": "s526_47314_0_7_1_1_1_11444_1", + "device_lists": { + "changed": [ + "@example:example.org" + ], + "left": [] + }, + "rooms": { + "invite": {}, + "join": { + "!SVkFJHzfwvuaIEawgC:localhost": { + "summary": { + "m.heroes": [ + "@alice:example.com", + "@bob:example.com" + ], + "m.joined_member_count": 2, + "m.invited_member_count": 0 + }, + "account_data": { + "events": [ + { + "content": { + "event_id": "$someplace:example.org" + }, + "room_id": "!roomid:room.com", + "type": "m.fully_read" + }, + { + "content": { + "ignored_users": { + "@someone:example.org": {} + } + }, + "type": "m.ignored_user_list" + } + ] + }, + "ephemeral": { + "events": [ + { + "content": { + "$151680659217152dPKjd:localhost": { + "m.read": { + "@example:localhost": { + "ts": 151680989 + } + } + } + }, + "type": "m.receipt" + } + ] + }, + "state": { + "events": [ + { + "content": { + "join_rule": "public" + }, + "event_id": "$15139375514WsgmR:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.join_rules", + "unsigned": { + "age": 7034220 + } + }, + { + "content": { + "avatar_url": null, + "displayname": "example", + "membership": "join" + }, + "event_id": "$151800140517rfvjc:localhost", + "membership": "join", + "origin_server_ts": 151800140, + "sender": "@example:localhost", + "state_key": "@example:localhost", + "type": "m.room.member", + "unsigned": { + "age": 297036, + "replaces_state": "$151800111315tsynI:localhost" + } + }, + { + "content": { + "history_visibility": "shared" + }, + "event_id": "$15139375515VaJEY:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.history_visibility", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "creator": "@example:localhost" + }, + "event_id": "$15139375510KUZHi:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.create", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "topic": "room topic" + }, + "event_id": "$151957878228ssqrJ:localhost", + "origin_server_ts": 151957878, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.topic", + "unsigned": { + "age": 1392989709, + "prev_content": { + "topic": "test" + }, + "prev_sender": "@example:localhost", + "replaces_state": "$151957069225EVYKm:localhost" + } + }, + { + "content": { + "ban": 50, + "events": { + "m.room.avatar": 50, + "m.room.canonical_alias": 50, + "m.room.history_visibility": 100, + "m.room.name": 50, + "m.room.power_levels": 100 + }, + "events_default": 0, + "invite": 0, + "kick": 50, + "redact": 50, + "state_default": 50, + "users": { + "@example:localhost": 100 + }, + "users_default": 0 + }, + "event_id": "$15139375512JaHAW:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.power_levels", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "avatar_url": null, + "displayname": "example2", + "membership": "join" + }, + "event_id": "$152034824468gOeNB:localhost", + "membership": "join", + "origin_server_ts": 152034824, + "sender": "@example2:localhost", + "state_key": "@example2:localhost", + "type": "m.room.member", + "unsigned": { + "age": 623527289, + "prev_content": { + "membership": "leave" + }, + "prev_sender": "@example:localhost", + "replaces_state": "$152034819067QWJxM:localhost" + } + }, + { + "content": { + "membership": "leave", + "reason": "offline", + "avatar_url": "avatar.com", + "displayname": "example" + }, + "event_id": "$1585345508297748AIUBh:matrix.org", + "origin_server_ts": 158534550, + "sender": "@example:localhost", + "state_key": "@example:localhost", + "type": "m.room.member", + "unsigned": { + "replaces_state": "$1585345354296486IGZfp:localhost", + "prev_content": { + "avatar_url": "avatar.com", + "displayname": "example", + "membership": "join" + }, + "prev_sender": "@example2:localhost", + "age": 6992 + }, + "room_id": "!roomid:room.com" + } + ] + }, + "timeline": { + "events": [ + { + "content": { + "body": "baba", + "format": "org.matrix.custom.html", + "formatted_body": "baba", + "msgtype": "m.text" + }, + "event_id": "$152037280074GZeOm:localhost", + "origin_server_ts": 152037280, + "sender": "@example:localhost", + "type": "m.room.message", + "unsigned": { + "age": 598971425 + } + } + ], + "limited": true, + "prev_batch": "t392-516_47314_0_7_1_1_1_11444_1" + }, + "unread_notifications": { + "highlight_count": 0, + "notification_count": 11 + } + } + }, + "leave": {} + }, + "to_device": { + "events": [] + }, + "presence": { + "events": [ + { + "content": { + "avatar_url": "mxc://localhost:wefuiwegh8742w", + "currently_active": false, + "last_active_ago": 1, + "presence": "online", + "status_msg": "Making cupcakes" + }, + "sender": "@example:localhost", + "type": "m.presence" + } + ] + } + }); +} + +lazy_static! { + pub static ref MORE_SYNC: JsonValue = json!({ + "device_one_time_keys_count": {}, + "next_batch": "s526_47314_0_7_1_1_1_11444_1", + "device_lists": { + "changed": [ + "@example:example.org" + ], + "left": [] + }, + "rooms": { + "invite": {}, + "join": { + "!SVkFJHzfwvuaIEawgC:localhost": { + "summary": {}, + "account_data": { + "events": [] + }, + "ephemeral": { + "events": [ + { + "content": { + "$151680659217152dPKjd:localhost": { + "m.read": { + "@example:localhost": { + "ts": 151680989 + } + } + } + }, + "type": "m.receipt" + }, + { + "content": { + "user_ids": [ + "@alice:matrix.org", + "@bob:example.com" + ] + }, + "room_id": "!jEsUZKDJdhlrceRyVU:example.org", + "type": "m.typing" + } + ] + }, + "state": { + "events": [] + }, + "timeline": { + "events": [ + { + "content": { + "body": "baba", + "format": "org.matrix.custom.html", + "formatted_body": "baba", + "msgtype": "m.text" + }, + "event_id": "$152037280074GZeOm:localhost", + "origin_server_ts": 152037280, + "sender": "@example:localhost", + "type": "m.room.message", + "unsigned": { + "age": 598971425 + } + }, + { + "content": { + "body": " * edited message", + "m.new_content": { + "body": "edited message", + "msgtype": "m.text" + }, + "m.relates_to": { + "event_id": "some event id", + "rel_type": "m.replace" + }, + "msgtype": "m.text" + }, + "event_id": "edit event id", + "origin_server_ts": 159026265, + "sender": "@alice:matrix.org", + "type": "m.room.message", + "unsigned": { + "age": 85 + } + }, + { + "content": { + "reason": "😀" + }, + "event_id": "$151957878228ssqrJ:localhost", + "origin_server_ts": 151957878, + "sender": "@example:localhost", + "type": "m.room.redaction", + "redacts": "$151957878228ssqrj:localhost" + }, + { + "content": {}, + "event_id": "$15275046980maRLj:localhost", + "origin_server_ts": 152750469, + "sender": "@example:localhost", + "type": "m.room.message", + "unsigned": { + "age": 19334, + "redacted_because": { + "content": {}, + "event_id": "$15275047031IXQRi:localhost", + "origin_server_ts": 152750470, + "redacts": "$15275046980maRLj:localhost", + "sender": "@example:localhost", + "type": "m.room.redaction", + "unsigned": { + "age": 14523 + } + }, + "redacted_by": "$15275047031IXQRi:localhost" + } + }, + { + "content": { + "m.relates_to": { + "event_id": "some event id", + "key": "👍", + "rel_type": "m.annotation" + } + }, + "event_id": "event id", + "origin_server_ts": 159027581, + "sender": "@alice:matrix.org", + "type": "m.reaction", + "unsigned": { + "age": 85 + } + } + ], + "limited": true, + "prev_batch": "t392-516_47314_0_7_1_1_1_11444_1" + }, + "unread_notifications": { + "highlight_count": 0, + "notification_count": 11 + } + } + }, + "leave": {} + }, + "to_device": { + "events": [] + }, + "presence": { + "events": [] + } + }); +} + +lazy_static! { + pub static ref INVITE_SYNC: JsonValue = json!({ + "device_one_time_keys_count": {}, + "next_batch": "s526_47314_0_7_1_1_1_11444_1", + "device_lists": { + "changed": [ + "@example:example.org" + ], + "left": [] + }, + "rooms": { + "invite": { + "!696r7674:example.com": { + "invite_state": { + "events": [ + { + "sender": "@alice:example.com", + "type": "m.room.name", + "state_key": "", + "content": { + "name": "My Room Name" + } + }, + { + "sender": "@alice:example.com", + "type": "m.room.member", + "state_key": "@bob:example.com", + "content": { + "membership": "invite" + } + } + ] + } + } + }, + "join": {}, + "leave": {} + }, + "to_device": { + "events": [] + }, + "presence": { + "events": [ + { + "content": { + "avatar_url": "mxc://localhost:wefuiwegh8742w", + "currently_active": false, + "last_active_ago": 1, + "presence": "online", + "status_msg": "Making cupcakes" + }, + "sender": "@example:localhost", + "type": "m.presence" + } + ] + } + }); +} + +lazy_static! { + pub static ref LEAVE_SYNC: JsonValue = json!({ + "device_one_time_keys_count": {}, + "next_batch": "s526_47314_0_7_1_1_1_11444_1", + "device_lists": { + "changed": [ + "@example:example.org" + ], + "left": [] + }, + "rooms": { + "invite": {}, + "join": {}, + "leave": { + "!SVkFJHzfwvuaIEawgC:localhost": { + "summary": {}, + "account_data": { + "events": [ + { + "content": { + "event_id": "$someplace:example.org" + }, + "room_id": "!roomid:room.com", + "type": "m.fully_read" + }, + { + "content": { + "ignored_users": { + "@someone:example.org": {} + } + }, + "type": "m.ignored_user_list" + } + ] + }, + "ephemeral": { + "events": [ + { + "content": { + "$151680659217152dPKjd:localhost": { + "m.read": { + "@example:localhost": { + "ts": 151680989 + } + } + } + }, + "type": "m.receipt" + } + ] + }, + "state": { + "events": [ + { + "content": { + "join_rule": "public" + }, + "event_id": "$15139375514WsgmR:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.join_rules", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "avatar_url": null, + "displayname": "example", + "membership": "join" + }, + "event_id": "$151800140517rfvjc:localhost", + "membership": "join", + "origin_server_ts": 151800140, + "sender": "@example:localhost", + "state_key": "@example:localhost", + "type": "m.room.member", + "unsigned": { + "age": 297036, + "replaces_state": "$151800111315tsynI:localhost" + } + }, + { + "content": { + "history_visibility": "shared" + }, + "event_id": "$15139375515VaJEY:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.history_visibility", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "creator": "@example:localhost" + }, + "event_id": "$15139375510KUZHi:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.create", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "aliases": [ + "#tutorial:localhost" + ] + }, + "event_id": "$15139375516NUgtD:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "localhost", + "type": "m.room.aliases", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "topic": "room topic" + }, + "event_id": "$151957878228ssqrJ:localhost", + "origin_server_ts": 151957878, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.topic", + "unsigned": { + "age": 1392989709, + "prev_content": { + "topic": "test" + }, + "prev_sender": "@example:localhost", + "replaces_state": "$151957069225EVYKm:localhost" + } + }, + { + "content": { + "ban": 50, + "events": { + "m.room.avatar": 50, + "m.room.canonical_alias": 50, + "m.room.history_visibility": 100, + "m.room.name": 50, + "m.room.power_levels": 100 + }, + "events_default": 0, + "invite": 0, + "kick": 50, + "redact": 50, + "state_default": 50, + "users": { + "@example:localhost": 100 + }, + "users_default": 0 + }, + "event_id": "$15139375512JaHAW:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.power_levels", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "alias": "#tutorial:localhost" + }, + "event_id": "$15139375513VdeRF:localhost", + "origin_server_ts": 151393755, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.canonical_alias", + "unsigned": { + "age": 703422 + } + }, + { + "content": { + "avatar_url": null, + "displayname": "example2", + "membership": "join" + }, + "event_id": "$152034824468gOeNB:localhost", + "membership": "join", + "origin_server_ts": 152034824, + "sender": "@example2:localhost", + "state_key": "@example2:localhost", + "type": "m.room.member", + "unsigned": { + "age": 623527289, + "prev_content": { + "membership": "leave" + }, + "prev_sender": "@example:localhost", + "replaces_state": "$152034819067QWJxM:localhost" + } + }, + { + "content": { + "membership": "leave", + "reason": "offline", + "avatar_url": "avatar.com", + "displayname": "example" + }, + "event_id": "$1585345508297748AIUBh:matrix.org", + "origin_server_ts": 158534550, + "sender": "@example:localhost", + "state_key": "@example:localhost", + "type": "m.room.member", + "unsigned": { + "replaces_state": "$1585345354296486IGZfp:localhost", + "prev_content": { + "avatar_url": "avatar.com", + "displayname": "example", + "membership": "join" + }, + "prev_sender": "@example2:localhost", + "age": 6992 + }, + "room_id": "!roomid:room.com" + } + ] + }, + "timeline": { + "events": [ + { + "content": { + "body": "baba", + "format": "org.matrix.custom.html", + "formatted_body": "baba", + "msgtype": "m.text" + }, + "event_id": "$152037280074GZeOm:localhost", + "origin_server_ts": 152037280, + "sender": "@example:localhost", + "type": "m.room.message", + "unsigned": { + "age": 598971425 + } + } + ], + "limited": true, + "prev_batch": "t392-516_47314_0_7_1_1_1_11444_1" + }, + "unread_notifications": { + "highlight_count": 0, + "notification_count": 11 + } + } + } + }, + "to_device": { + "events": [] + }, + "presence": { + "events": [ + { + "content": { + "avatar_url": "mxc://localhost:wefuiwegh8742w", + "currently_active": false, + "last_active_ago": 1, + "presence": "online", + "status_msg": "Making cupcakes" + }, + "sender": "@example:localhost", + "type": "m.presence" + } + ] + } + }); +}