test(base): Use common data for store tests

This commit is contained in:
Kévin Commaille
2022-01-12 16:42:04 +01:00
parent c79e62d80e
commit d455b0d318
6 changed files with 146 additions and 127 deletions

View File

@@ -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::<AnySyncEphemeralRoomEvent>(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::<AnySyncEphemeralRoomEvent>(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(),

View File

@@ -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")
}
}

View File

@@ -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<AnySyncStateEvent> {
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::<MemberEvent>(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::<Raw<AnySyncStateEvent>>(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::<AnySyncEphemeralRoomEvent>(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::<AnySyncEphemeralRoomEvent>(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(),

View File

@@ -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),
};

View File

@@ -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": {},

View File

@@ -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::{