From d455b0d318add6fedca8fbc5efe57fc2a441b8f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Wed, 12 Jan 2022 16:42:04 +0100 Subject: [PATCH] test(base): Use common data for store tests --- .../matrix-sdk-base/src/store/memory_store.rs | 86 ++++++------ crates/matrix-sdk-base/src/store/mod.rs | 21 +++ .../src/store/sled_store/mod.rs | 125 ++++++------------ crates/matrix-sdk-test/src/lib.rs | 4 + .../matrix-sdk-test/src/test_json/events.rs | 32 +++++ crates/matrix-sdk-test/src/test_json/mod.rs | 5 +- 6 files changed, 146 insertions(+), 127 deletions(-) diff --git a/crates/matrix-sdk-base/src/store/memory_store.rs b/crates/matrix-sdk-base/src/store/memory_store.rs index eb803acd9..dbd2a16bc 100644 --- a/crates/matrix-sdk-base/src/store/memory_store.rs +++ b/crates/matrix-sdk-base/src/store/memory_store.rs @@ -588,107 +588,105 @@ impl StateStore for MemoryStore { #[cfg(test)] mod test { - use matrix_sdk_test::async_test; + use matrix_sdk_test::{async_test, test_json}; use ruma::{ - api::client::r0::media::get_content_thumbnail::Method, event_id, mxc_uri, - receipt::ReceiptType, room_id, uint, user_id, UserId, + api::client::r0::media::get_content_thumbnail::Method, + events::{AnyEphemeralRoomEventContent, AnySyncEphemeralRoomEvent}, + mxc_uri, + receipt::ReceiptType, + uint, }; - use serde_json::json; + use serde_json::Value as JsonValue; use super::{MemoryStore, StateChanges}; - use crate::media::{MediaFormat, MediaRequest, MediaThumbnailSize, MediaType}; - - fn user_id() -> &'static UserId { - user_id!("@example:localhost") - } + use crate::{ + media::{MediaFormat, MediaRequest, MediaThumbnailSize, MediaType}, + store::test::{first_receipt_event_id, room_id, second_receipt_event_id, user_id}, + }; #[async_test] async fn test_receipts_saving() { let store = MemoryStore::new(); - let room_id = room_id!("!test:localhost"); + let user_id = user_id(); + let room_id = room_id(); + let first_event_id = first_receipt_event_id(); + let second_event_id = second_receipt_event_id(); - let first_event_id = event_id!("$1435641916114394fHBLK:matrix.org").to_owned(); - let second_event_id = event_id!("$fHBLK1435641916114394:matrix.org").to_owned(); + let first_receipt_json: &JsonValue = &test_json::READ_RECEIPT; + let first_receipt_event = + serde_json::from_value::(first_receipt_json.clone()) + .unwrap(); + let first_receipt_content = match first_receipt_event.content() { + AnyEphemeralRoomEventContent::Receipt(content) => content, + _ => panic!(), + }; - let first_receipt_event = serde_json::from_value(json!({ - first_event_id.clone(): { - "m.read": { - user_id().to_owned(): { - "ts": 1436451550453u64 - } - } - } - })) - .unwrap(); - - let second_receipt_event = serde_json::from_value(json!({ - second_event_id.clone(): { - "m.read": { - user_id().to_owned(): { - "ts": 1436451551453u64 - } - } - } - })) - .unwrap(); + let second_receipt_json: &JsonValue = &test_json::READ_RECEIPT_OTHER; + let second_receipt_event = + serde_json::from_value::(second_receipt_json.clone()) + .unwrap(); + let second_receipt_content = match second_receipt_event.content() { + AnyEphemeralRoomEventContent::Receipt(content) => content, + _ => panic!(), + }; assert!(store - .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id()) + .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id) .await .unwrap() .is_none()); assert!(store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &first_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, first_event_id) .await .unwrap() .is_empty()); assert!(store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &second_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, second_event_id) .await .unwrap() .is_empty()); let mut changes = StateChanges::default(); - changes.add_receipts(room_id, first_receipt_event); + changes.add_receipts(room_id, first_receipt_content); store.save_changes(&changes).await.unwrap(); assert!(store - .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id()) + .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id) .await .unwrap() .is_some(),); assert_eq!( store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &first_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, first_event_id) .await .unwrap() .len(), 1 ); assert!(store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &second_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, second_event_id) .await .unwrap() .is_empty()); let mut changes = StateChanges::default(); - changes.add_receipts(room_id, second_receipt_event); + changes.add_receipts(room_id, second_receipt_content); store.save_changes(&changes).await.unwrap(); assert!(store - .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id()) + .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id) .await .unwrap() .is_some()); assert!(store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &first_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, first_event_id) .await .unwrap() .is_empty()); assert_eq!( store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &second_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, second_event_id) .await .unwrap() .len(), diff --git a/crates/matrix-sdk-base/src/store/mod.rs b/crates/matrix-sdk-base/src/store/mod.rs index 83b423439..6a0482486 100644 --- a/crates/matrix-sdk-base/src/store/mod.rs +++ b/crates/matrix-sdk-base/src/store/mod.rs @@ -571,3 +571,24 @@ impl StateChanges { self.receipts.insert(room_id.to_owned(), event); } } + +#[cfg(test)] +mod test { + use ruma::{event_id, room_id, user_id, EventId, RoomId, UserId}; + + pub(crate) fn user_id() -> &'static UserId { + user_id!("@example:localhost") + } + + pub(crate) fn room_id() -> &'static RoomId { + room_id!("!test:localhost") + } + + pub(crate) fn first_receipt_event_id() -> &'static EventId { + event_id!("$example") + } + + pub(crate) fn second_receipt_event_id() -> &'static EventId { + event_id!("$other") + } +} diff --git a/crates/matrix-sdk-base/src/store/sled_store/mod.rs b/crates/matrix-sdk-base/src/store/sled_store/mod.rs index 97be63b3a..565776ff4 100644 --- a/crates/matrix-sdk-base/src/store/sled_store/mod.rs +++ b/crates/matrix-sdk-base/src/store/sled_store/mod.rs @@ -991,77 +991,43 @@ impl StateStore for SledStore { #[cfg(test)] mod test { - use matrix_sdk_test::async_test; + use matrix_sdk_test::{async_test, test_json}; use ruma::{ api::client::r0::media::get_content_thumbnail::Method, - event_id, events::{ - room::{ - member::{MembershipState, RoomMemberEventContent}, - power_levels::RoomPowerLevelsEventContent, - }, - AnySyncStateEvent, EventType, Unsigned, + AnyEphemeralRoomEventContent, AnySyncEphemeralRoomEvent, AnySyncStateEvent, EventType, }, mxc_uri, receipt::ReceiptType, - room_id, serde::Raw, - uint, user_id, MilliSecondsSinceUnixEpoch, UserId, + uint, }; - use serde_json::json; + use serde_json::Value as JsonValue; use super::{Result, SledStore, StateChanges}; use crate::{ deserialized_responses::MemberEvent, media::{MediaFormat, MediaRequest, MediaThumbnailSize, MediaType}, + store::test::{first_receipt_event_id, room_id, second_receipt_event_id, user_id}, StateStore, }; - fn user_id() -> &'static UserId { - user_id!("@example:localhost") - } - - fn power_level_event() -> Raw { - let content = RoomPowerLevelsEventContent::default(); - - let event = json!({ - "event_id": "$h29iv0s8:example.com", - "content": content, - "sender": user_id(), - "type": "m.room.power_levels", - "origin_server_ts": 0u64, - "state_key": "", - "unsigned": Unsigned::default(), - }); - - serde_json::from_value(event).unwrap() - } - - fn membership_event() -> MemberEvent { - MemberEvent { - event_id: event_id!("$h29iv0s8:example.com").to_owned(), - content: RoomMemberEventContent::new(MembershipState::Join), - sender: user_id().to_owned(), - origin_server_ts: MilliSecondsSinceUnixEpoch::now(), - state_key: user_id().to_owned(), - prev_content: None, - unsigned: Unsigned::default(), - } - } - #[async_test] async fn test_member_saving() { let store = SledStore::open().unwrap(); - let room_id = room_id!("!test:localhost"); + + let room_id = room_id(); let user_id = user_id(); assert!(store.get_member_event(room_id, user_id).await.unwrap().is_none()); let mut changes = StateChanges::default(); + let json: &JsonValue = &test_json::MEMBER; + let membership_event = serde_json::from_value::(json.clone()).unwrap(); changes .members .entry(room_id.to_owned()) .or_default() - .insert(user_id.to_owned(), membership_event()); + .insert(user_id.to_owned(), membership_event); store.save_changes(&changes).await.unwrap(); assert!(store.get_member_event(room_id, user_id).await.unwrap().is_some()); @@ -1073,9 +1039,10 @@ mod test { #[async_test] async fn test_power_level_saving() { let store = SledStore::open().unwrap(); - let room_id = room_id!("!test:localhost"); + let room_id = room_id(); - let raw_event = power_level_event(); + let json: &JsonValue = &test_json::POWER_LEVELS; + let raw_event = serde_json::from_value::>(json.clone()).unwrap(); let event = raw_event.deserialize().unwrap(); assert!(store @@ -1098,89 +1065,85 @@ mod test { async fn test_receipts_saving() { let store = SledStore::open().unwrap(); - let room_id = room_id!("!test:localhost"); + let user_id = user_id(); + let room_id = room_id(); + let first_event_id = first_receipt_event_id(); + let second_event_id = second_receipt_event_id(); - let first_event_id = event_id!("$1435641916114394fHBLK:matrix.org").to_owned(); - let second_event_id = event_id!("$fHBLK1435641916114394:matrix.org").to_owned(); + let first_receipt_json: &JsonValue = &test_json::READ_RECEIPT; + let first_receipt_event = + serde_json::from_value::(first_receipt_json.clone()) + .unwrap(); + let first_receipt_content = match first_receipt_event.content() { + AnyEphemeralRoomEventContent::Receipt(content) => content, + _ => panic!(), + }; - let first_receipt_event = serde_json::from_value(json!({ - first_event_id.clone(): { - "m.read": { - user_id().to_owned(): { - "ts": 1436451550453u64 - } - } - } - })) - .unwrap(); - - let second_receipt_event = serde_json::from_value(json!({ - second_event_id.clone(): { - "m.read": { - user_id().to_owned(): { - "ts": 1436451551453u64 - } - } - } - })) - .unwrap(); + let second_receipt_json: &JsonValue = &test_json::READ_RECEIPT_OTHER; + let second_receipt_event = + serde_json::from_value::(second_receipt_json.clone()) + .unwrap(); + let second_receipt_content = match second_receipt_event.content() { + AnyEphemeralRoomEventContent::Receipt(content) => content, + _ => panic!(), + }; assert!(store - .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id()) + .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id) .await .unwrap() .is_none()); assert!(store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &first_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, first_event_id) .await .unwrap() .is_empty()); assert!(store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &second_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, second_event_id) .await .unwrap() .is_empty()); let mut changes = StateChanges::default(); - changes.add_receipts(room_id, first_receipt_event); + changes.add_receipts(room_id, first_receipt_content); store.save_changes(&changes).await.unwrap(); assert!(store - .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id()) + .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id) .await .unwrap() .is_some(),); assert_eq!( store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &first_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, first_event_id) .await .unwrap() .len(), 1 ); assert!(store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &second_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, second_event_id) .await .unwrap() .is_empty()); let mut changes = StateChanges::default(); - changes.add_receipts(room_id, second_receipt_event); + changes.add_receipts(room_id, second_receipt_content); store.save_changes(&changes).await.unwrap(); assert!(store - .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id()) + .get_user_room_receipt_event(room_id, ReceiptType::Read, user_id) .await .unwrap() .is_some()); assert!(store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &first_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, first_event_id) .await .unwrap() .is_empty()); assert_eq!( store - .get_event_room_receipt_events(room_id, ReceiptType::Read, &second_event_id) + .get_event_room_receipt_events(room_id, ReceiptType::Read, second_event_id) .await .unwrap() .len(), diff --git a/crates/matrix-sdk-test/src/lib.rs b/crates/matrix-sdk-test/src/lib.rs index de3b32942..5fb998552 100644 --- a/crates/matrix-sdk-test/src/lib.rs +++ b/crates/matrix-sdk-test/src/lib.rs @@ -33,6 +33,8 @@ pub enum EventsJson { Name, PowerLevels, Presence, + ReadReceipt, + ReadReceiptOther, RedactedInvalid, RedactedState, Redacted, @@ -108,6 +110,8 @@ impl EventBuilder { /// Add an event to the room events `Vec`. pub fn add_ephemeral(&mut self, json: EventsJson) -> &mut Self { let val: &JsonValue = match json { + EventsJson::ReadReceipt => &test_json::READ_RECEIPT, + EventsJson::ReadReceiptOther => &test_json::READ_RECEIPT_OTHER, EventsJson::Typing => &test_json::TYPING, _ => panic!("unknown ephemeral event {:?}", json), }; diff --git a/crates/matrix-sdk-test/src/test_json/events.rs b/crates/matrix-sdk-test/src/test_json/events.rs index 11431a038..4d666416b 100644 --- a/crates/matrix-sdk-test/src/test_json/events.rs +++ b/crates/matrix-sdk-test/src/test_json/events.rs @@ -498,6 +498,38 @@ lazy_static! { }); } +lazy_static! { + pub static ref READ_RECEIPT: JsonValue = json!({ + "content": { + "$example": { + "m.read": { + "@example:localhost": { + "ts": 1436451550 + } + } + } + }, + "room_id": "!test:localhost", + "type": "m.receipt" + }); +} + +lazy_static! { + pub static ref READ_RECEIPT_OTHER: JsonValue = json!({ + "content": { + "$other": { + "m.read": { + "@example:localhost": { + "ts": 1436964550 + } + } + } + }, + "room_id": "!test:localhost", + "type": "m.receipt" + }); +} + lazy_static! { pub static ref REDACTED_INVALID: JsonValue = json!({ "content": {}, diff --git a/crates/matrix-sdk-test/src/test_json/mod.rs b/crates/matrix-sdk-test/src/test_json/mod.rs index ad5ecab02..57a624fc6 100644 --- a/crates/matrix-sdk-test/src/test_json/mod.rs +++ b/crates/matrix-sdk-test/src/test_json/mod.rs @@ -14,8 +14,9 @@ pub mod sync; pub use events::{ ALIAS, ALIASES, EVENT_ID, KEYS_QUERY, KEYS_UPLOAD, LOGIN, LOGIN_RESPONSE_ERR, LOGIN_TYPES, LOGIN_WITH_DISCOVERY, LOGOUT, MEMBER, MEMBER_NAME_CHANGE, MESSAGE_EDIT, MESSAGE_TEXT, NAME, - POWER_LEVELS, PRESENCE, PUBLIC_ROOMS, REACTION, REDACTED, REDACTED_INVALID, REDACTED_STATE, - REDACTION, REGISTRATION_RESPONSE_ERR, ROOM_ID, ROOM_MESSAGES, TYPING, + POWER_LEVELS, PRESENCE, PUBLIC_ROOMS, REACTION, READ_RECEIPT, READ_RECEIPT_OTHER, REDACTED, + REDACTED_INVALID, REDACTED_STATE, REDACTION, REGISTRATION_RESPONSE_ERR, ROOM_ID, ROOM_MESSAGES, + TYPING, }; pub use members::MEMBERS; pub use sync::{