From bdd01628313606a9a203f2f31d42ea1d4b6e02bc Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Mon, 30 Mar 2026 11:40:19 +0200 Subject: [PATCH] tests(event cache): make tests more resilient to the order of event cache updates --- .../src/event_cache/automatic_pagination.rs | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/crates/matrix-sdk/src/event_cache/automatic_pagination.rs b/crates/matrix-sdk/src/event_cache/automatic_pagination.rs index 931dd65b8..df40c5561 100644 --- a/crates/matrix-sdk/src/event_cache/automatic_pagination.rs +++ b/crates/matrix-sdk/src/event_cache/automatic_pagination.rs @@ -89,6 +89,7 @@ mod tests { use std::time::Duration; use assert_matches::assert_matches; + use eyeball_im::VectorDiff; use matrix_sdk_base::sleep::sleep; use matrix_sdk_test::{BOB, JoinedRoomBuilder, async_test, event_factory::EventFactory}; use ruma::{event_id, room_id}; @@ -124,7 +125,17 @@ mod tests { let room_id = room_id!("!omelette:fromage.fr"); let f = EventFactory::new().room(room_id).sender(*BOB); - let room = server + let room = server.sync_joined_room(&client, room_id).await; + + let (room_event_cache, _drop_handles) = room.event_cache().await.unwrap(); + + // Starting with an empty, inactive room, + let (room_events, mut room_cache_updates) = room_event_cache.subscribe().await.unwrap(); + assert!(room_events.is_empty()); + assert!(room_cache_updates.is_empty()); + + // We get a gappy sync (so as to have a previous-batch token), + server .sync_room( &client, JoinedRoomBuilder::new(room_id) @@ -133,12 +144,14 @@ mod tests { ) .await; - let (room_event_cache, _drop_handles) = room.event_cache().await.unwrap(); - - // Starting with an empty, inactive room, - let (room_events, mut room_cache_updates) = room_event_cache.subscribe().await.unwrap(); - assert!(room_events.is_empty()); - assert!(room_cache_updates.is_empty()); + { + assert_let_timeout!( + Ok(RoomEventCacheUpdate::UpdateTimelineEvents(update)) = room_cache_updates.recv() + ); + assert_eq!(update.diffs.len(), 1); + assert_matches!(update.diffs[0], VectorDiff::Clear); + assert_matches!(update.origin, EventsOrigin::Sync); + } // Set up the mock for /messages, server @@ -210,9 +223,14 @@ mod tests { ) .await; - assert_let_timeout!( - Ok(RoomEventCacheUpdate::UpdateTimelineEvents(_)) = room_cache_updates.recv() - ); + { + assert_let_timeout!( + Ok(RoomEventCacheUpdate::UpdateTimelineEvents(update)) = room_cache_updates.recv() + ); + assert_eq!(update.diffs.len(), 1); + assert_matches!(update.diffs[0], VectorDiff::Clear); + assert_matches!(update.origin, EventsOrigin::Sync); + } // Set up the mock for /messages, so that it returns another prev-batch token, server