From dff1886015245d55667744c6abaaead25a196bfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Mon, 19 May 2025 11:49:58 +0200 Subject: [PATCH] test(sdk): Add tests for unsetting the unread flag when sending receipts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kévin Commaille --- .../tests/integration/room/joined.rs | 70 ++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/crates/matrix-sdk/tests/integration/room/joined.rs b/crates/matrix-sdk/tests/integration/room/joined.rs index 2736ce64b..97b9457c0 100644 --- a/crates/matrix-sdk/tests/integration/room/joined.rs +++ b/crates/matrix-sdk/tests/integration/room/joined.rs @@ -19,8 +19,8 @@ use matrix_sdk_test::{ event_factory::EventFactory, mocks::mock_encryption_state, test_json::{self, sync::CUSTOM_ROOM_POWER_LEVELS}, - GlobalAccountDataTestEvent, JoinedRoomBuilder, StateTestEvent, SyncResponseBuilder, - DEFAULT_TEST_ROOM_ID, + GlobalAccountDataTestEvent, JoinedRoomBuilder, RoomAccountDataTestEvent, StateTestEvent, + SyncResponseBuilder, DEFAULT_TEST_ROOM_ID, }; use ruma::{ api::client::{membership::Invite3pidInit, receipt::create_receipt::v3::ReceiptType}, @@ -234,6 +234,42 @@ async fn test_send_single_receipt() { .unwrap(); } +#[async_test] +async fn test_send_single_receipt_with_unread_flag() { + let event_id = owned_event_id!("$xxxxxx:example.org"); + + let server = MatrixMockServer::new().await; + let client = server.client_builder().build().await; + + server.mock_send_receipt(ReceiptType::Read).ok().expect(2).mount().await; + + // Initial sync with our test room, marked unread. + let room = server + .sync_room( + &client, + JoinedRoomBuilder::default().add_account_data(RoomAccountDataTestEvent::MarkedUnread), + ) + .await; + assert!(room.is_marked_unread()); + + // An unthreaded receipt triggers a marked unread update. + { + let _guard = server + .mock_set_room_account_data(RoomAccountDataEventType::MarkedUnread) + .ok() + .mock_once() + .mount_as_scoped() + .await; + + room.send_single_receipt(ReceiptType::Read, ReceiptThread::Unthreaded, event_id.clone()) + .await + .unwrap(); + } + + // A threaded read receipt update doesn't trigger a marked unread update. + room.send_single_receipt(ReceiptType::Read, ReceiptThread::Main, event_id).await.unwrap(); +} + #[async_test] async fn test_send_multiple_receipts() { let server = MatrixMockServer::new().await; @@ -248,6 +284,36 @@ async fn test_send_multiple_receipts() { room.send_multiple_receipts(receipts).await.unwrap(); } +#[async_test] +async fn test_send_multiple_receipts_with_unread_flag() { + let event_id = owned_event_id!("$xxxxxx:example.org"); + + let server = MatrixMockServer::new().await; + let client = server.client_builder().build().await; + + server.mock_send_read_markers().ok().mock_once().mount().await; + server + .mock_set_room_account_data(RoomAccountDataEventType::MarkedUnread) + .ok() + .mock_once() + .mount() + .await; + + // Initial sync with our test room, marked unread. + let room = server + .sync_room( + &client, + JoinedRoomBuilder::default().add_account_data(RoomAccountDataTestEvent::MarkedUnread), + ) + .await; + assert!(room.is_marked_unread()); + + // Sending receipts triggers a marked unread update. + room.send_multiple_receipts(Receipts::new().public_read_receipt(event_id.clone())) + .await + .unwrap(); +} + #[async_test] async fn test_typing_notice() { let (client, server) = logged_in_client_with_server().await;