Skip to content

Commit d45ef56

Browse files
committed
test(sdk): Add a new test for RoomEventCache::rfind_event_in_memory_by.
1 parent 42ee967 commit d45ef56

File tree

1 file changed

+106
-8
lines changed
  • crates/matrix-sdk/src/event_cache/room

1 file changed

+106
-8
lines changed

crates/matrix-sdk/src/event_cache/room/mod.rs

Lines changed: 106 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1718,7 +1718,7 @@ mod tests {
17181718
use crate::test_utils::logged_in_client;
17191719

17201720
#[async_test]
1721-
async fn test_event_with_edit_relation() {
1721+
async fn test_find_event_by_id_with_edit_relation() {
17221722
let original_id = event_id!("$original");
17231723
let related_id = event_id!("$related");
17241724
let room_id = room_id!("!galette:saucisse.bzh");
@@ -1740,7 +1740,7 @@ mod tests {
17401740
}
17411741

17421742
#[async_test]
1743-
async fn test_event_with_thread_reply_relation() {
1743+
async fn test_find_event_by_id_with_thread_reply_relation() {
17441744
let original_id = event_id!("$original");
17451745
let related_id = event_id!("$related");
17461746
let room_id = room_id!("!galette:saucisse.bzh");
@@ -1756,7 +1756,7 @@ mod tests {
17561756
}
17571757

17581758
#[async_test]
1759-
async fn test_event_with_reaction_relation() {
1759+
async fn test_find_event_by_id_with_reaction_relation() {
17601760
let original_id = event_id!("$original");
17611761
let related_id = event_id!("$related");
17621762
let room_id = room_id!("!galette:saucisse.bzh");
@@ -1772,7 +1772,7 @@ mod tests {
17721772
}
17731773

17741774
#[async_test]
1775-
async fn test_event_with_poll_response_relation() {
1775+
async fn test_find_event_by_id_with_poll_response_relation() {
17761776
let original_id = event_id!("$original");
17771777
let related_id = event_id!("$related");
17781778
let room_id = room_id!("!galette:saucisse.bzh");
@@ -1790,7 +1790,7 @@ mod tests {
17901790
}
17911791

17921792
#[async_test]
1793-
async fn test_event_with_poll_end_relation() {
1793+
async fn test_find_event_by_id_with_poll_end_relation() {
17941794
let original_id = event_id!("$original");
17951795
let related_id = event_id!("$related");
17961796
let room_id = room_id!("!galette:saucisse.bzh");
@@ -1808,7 +1808,7 @@ mod tests {
18081808
}
18091809

18101810
#[async_test]
1811-
async fn test_event_with_filtered_relationships() {
1811+
async fn test_find_event_by_id_with_filtered_relationships() {
18121812
let original_id = event_id!("$original");
18131813
let related_id = event_id!("$related");
18141814
let associated_related_id = event_id!("$recursive_related");
@@ -1868,7 +1868,7 @@ mod tests {
18681868
}
18691869

18701870
#[async_test]
1871-
async fn test_event_with_recursive_relation() {
1871+
async fn test_find_event_by_id_with_recursive_relation() {
18721872
let original_id = event_id!("$original");
18731873
let related_id = event_id!("$related");
18741874
let associated_related_id = event_id!("$recursive_related");
@@ -1987,7 +1987,7 @@ mod timed_tests {
19871987
use ruma::{
19881988
event_id,
19891989
events::{AnySyncMessageLikeEvent, AnySyncTimelineEvent},
1990-
room_id, user_id,
1990+
room_id, user_id, OwnedUserId,
19911991
};
19921992
use tokio::task::yield_now;
19931993

@@ -2983,4 +2983,102 @@ mod timed_tests {
29832983
assert_eq!(events3.len(), 1);
29842984
assert_eq!(events3[0].event_id().as_deref(), Some(evid2));
29852985
}
2986+
2987+
#[async_test]
2988+
async fn test_rfind_event_in_memory_by() {
2989+
let user_id = user_id!("@mnt_io:matrix.org");
2990+
let room_id = room_id!("!raclette:patate.ch");
2991+
let client = MockClientBuilder::new("http://localhost".to_owned()).build().await;
2992+
2993+
let event_factory = EventFactory::new().room(room_id);
2994+
2995+
let event_id_0 = event_id!("$ev0");
2996+
let event_id_1 = event_id!("$ev1");
2997+
let event_id_2 = event_id!("$ev2");
2998+
let event_id_3 = event_id!("$ev3");
2999+
3000+
let event_0 =
3001+
event_factory.text_msg("hello").sender(*BOB).event_id(event_id_0).into_event();
3002+
let event_1 =
3003+
event_factory.text_msg("world").sender(*ALICE).event_id(event_id_1).into_event();
3004+
let event_2 = event_factory.text_msg("!").sender(*ALICE).event_id(event_id_2).into_event();
3005+
let event_3 =
3006+
event_factory.text_msg("eh!").sender(user_id).event_id(event_id_3).into_event();
3007+
3008+
// Fill the event cache store with an initial linked chunk of 2 chunks, and 4
3009+
// events.
3010+
{
3011+
let store = client.event_cache_store();
3012+
let store = store.lock().await.unwrap();
3013+
store
3014+
.handle_linked_chunk_updates(
3015+
LinkedChunkId::Room(room_id),
3016+
vec![
3017+
Update::NewItemsChunk {
3018+
previous: None,
3019+
new: ChunkIdentifier::new(0),
3020+
next: None,
3021+
},
3022+
Update::PushItems {
3023+
at: Position::new(ChunkIdentifier::new(0), 0),
3024+
items: vec![event_3],
3025+
},
3026+
Update::NewItemsChunk {
3027+
previous: Some(ChunkIdentifier::new(0)),
3028+
new: ChunkIdentifier::new(1),
3029+
next: None,
3030+
},
3031+
Update::PushItems {
3032+
at: Position::new(ChunkIdentifier::new(1), 0),
3033+
items: vec![event_0, event_1, event_2],
3034+
},
3035+
],
3036+
)
3037+
.await
3038+
.unwrap();
3039+
}
3040+
3041+
let event_cache = client.event_cache();
3042+
event_cache.subscribe().unwrap();
3043+
3044+
client.base_client().get_or_create_room(room_id, matrix_sdk_base::RoomState::Joined);
3045+
let room = client.get_room(room_id).unwrap();
3046+
let (room_event_cache, _drop_handles) = room.event_cache().await.unwrap();
3047+
3048+
// Look for an event from `BOB`: it must be `event_0`.
3049+
assert_matches!(
3050+
room_event_cache
3051+
.rfind_event_in_memory_by(|event| {
3052+
event.raw().get_field::<OwnedUserId>("sender").unwrap().as_deref() == Some(*BOB)
3053+
})
3054+
.await,
3055+
Some(event) => {
3056+
assert_eq!(event.event_id().as_deref(), Some(event_id_0));
3057+
}
3058+
);
3059+
3060+
// Look for an event from `ALICE`: it must be `event_2`, right before `event_1`
3061+
// because events are looked for in reverse order.
3062+
assert_matches!(
3063+
room_event_cache
3064+
.rfind_event_in_memory_by(|event| {
3065+
event.raw().get_field::<OwnedUserId>("sender").unwrap().as_deref() == Some(*ALICE)
3066+
})
3067+
.await,
3068+
Some(event) => {
3069+
assert_eq!(event.event_id().as_deref(), Some(event_id_2));
3070+
}
3071+
);
3072+
3073+
// Look for an event that is inside the storage, but not loaded.
3074+
assert!(room_event_cache
3075+
.rfind_event_in_memory_by(|event| {
3076+
event.raw().get_field::<OwnedUserId>("sender").unwrap().as_deref() == Some(user_id)
3077+
})
3078+
.await
3079+
.is_none());
3080+
3081+
// Look for an event that doesn't exist.
3082+
assert!(room_event_cache.rfind_event_in_memory_by(|_| false).await.is_none());
3083+
}
29863084
}

0 commit comments

Comments
 (0)