Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions crates/matrix-sdk-ui/src/timeline/tests/read_receipts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,58 @@ async fn test_initial_public_main_thread_receipt() {
assert_eq!(receipt_event_id, event_id);
}

#[async_test]
async fn test_initial_public_unthreaded_receipt_main_threaded_timeline() {
let event_id = owned_event_id!("$event_with_receipt");

// Add initial private receipt on the main thread.
let mut initial_user_receipts = ReadReceiptMap::new();
initial_user_receipts
.entry(ReceiptType::Read)
.or_default()
.entry(ReceiptThread::Unthreaded)
.or_default()
.insert(
ALICE.to_owned(),
(event_id.clone(), Receipt::new(ruma::MilliSecondsSinceUnixEpoch(uint!(10)))),
);

let timeline = TestTimelineBuilder::new()
.focus(TimelineFocus::Live { hide_threaded_events: true })
.provider(TestRoomDataProvider::default().with_initial_user_receipts(initial_user_receipts))
.settings(TimelineSettings { track_read_receipts: true, ..Default::default() })
.build();

let (receipt_event_id, _) = timeline.controller.latest_user_read_receipt(*ALICE).await.unwrap();
assert_eq!(receipt_event_id, event_id);
}

#[async_test]
async fn test_initial_public_unthreaded_receipt_other_threaded_timeline() {
let event_id = owned_event_id!("$event_with_receipt");

// Add initial private receipt on the main thread.
let mut initial_user_receipts = ReadReceiptMap::new();
initial_user_receipts
.entry(ReceiptType::Read)
.or_default()
.entry(ReceiptThread::Unthreaded)
.or_default()
.insert(
ALICE.to_owned(),
(event_id.clone(), Receipt::new(ruma::MilliSecondsSinceUnixEpoch(uint!(10)))),
);

let timeline = TestTimelineBuilder::new()
.focus(TimelineFocus::Thread { root_event_id: owned_event_id!("$some_thread_root") })
.provider(TestRoomDataProvider::default().with_initial_user_receipts(initial_user_receipts))
.settings(TimelineSettings { track_read_receipts: true, ..Default::default() })
.build();

let (receipt_event_id, _) = timeline.controller.latest_user_read_receipt(*ALICE).await.unwrap();
assert_eq!(receipt_event_id, event_id);
}

#[async_test]
async fn test_initial_private_unthreaded_receipt() {
let event_id = owned_event_id!("$event_with_receipt");
Expand Down Expand Up @@ -610,6 +662,58 @@ async fn test_initial_private_main_thread_receipt() {
assert_eq!(receipt_event_id, event_id);
}

#[async_test]
async fn test_initial_private_unthreaded_receipt_main_threaded_timeline() {
let event_id = owned_event_id!("$event_with_receipt");

// Add initial private receipt on the main thread.
let mut initial_user_receipts = ReadReceiptMap::new();
initial_user_receipts
.entry(ReceiptType::ReadPrivate)
.or_default()
.entry(ReceiptThread::Unthreaded)
.or_default()
.insert(
ALICE.to_owned(),
(event_id.clone(), Receipt::new(ruma::MilliSecondsSinceUnixEpoch(uint!(10)))),
);

let timeline = TestTimelineBuilder::new()
.focus(TimelineFocus::Live { hide_threaded_events: true })
.provider(TestRoomDataProvider::default().with_initial_user_receipts(initial_user_receipts))
.settings(TimelineSettings { track_read_receipts: true, ..Default::default() })
.build();

let (receipt_event_id, _) = timeline.controller.latest_user_read_receipt(*ALICE).await.unwrap();
assert_eq!(receipt_event_id, event_id);
}

#[async_test]
async fn test_initial_private_unthreaded_receipt_other_threaded_timeline() {
let event_id = owned_event_id!("$event_with_receipt");

// Add initial private receipt on the main thread.
let mut initial_user_receipts = ReadReceiptMap::new();
initial_user_receipts
.entry(ReceiptType::ReadPrivate)
.or_default()
.entry(ReceiptThread::Unthreaded)
.or_default()
.insert(
ALICE.to_owned(),
(event_id.clone(), Receipt::new(ruma::MilliSecondsSinceUnixEpoch(uint!(10)))),
);

let timeline = TestTimelineBuilder::new()
.focus(TimelineFocus::Thread { root_event_id: owned_event_id!("$some_thread_root") })
.provider(TestRoomDataProvider::default().with_initial_user_receipts(initial_user_receipts))
.settings(TimelineSettings { track_read_receipts: true, ..Default::default() })
.build();

let (receipt_event_id, _) = timeline.controller.latest_user_read_receipt(*ALICE).await.unwrap();
assert_eq!(receipt_event_id, event_id);
}

#[async_test]
async fn test_clear_read_receipts() {
let room_id = room_id!("!room:localhost");
Expand Down