mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-18 05:30:33 -04:00
test(base): Use common data for store tests
This commit is contained in:
@@ -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(),
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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),
|
||||
};
|
||||
|
||||
@@ -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": {},
|
||||
|
||||
@@ -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::{
|
||||
|
||||
Reference in New Issue
Block a user