Skip to content

Commit 0d4fac5

Browse files
zecakehjplatte
authored andcommitted
test(base): Test collision between threaded and unthreaded receipts in store
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
1 parent 2e49719 commit 0d4fac5

File tree

1 file changed

+145
-37
lines changed

1 file changed

+145
-37
lines changed

crates/matrix-sdk-base/src/store/integration_tests.rs

Lines changed: 145 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ macro_rules! statestore_integration_tests {
3535
use ruma::{
3636
api::client::media::get_content_thumbnail::v3::Method,
3737
events::room::MediaSource,
38-
mxc_uri, uint,
38+
mxc_uri,
3939
};
4040

4141
use $crate::media::{MediaFormat, MediaRequest, MediaThumbnailSize};
@@ -150,7 +150,7 @@ macro_rules! statestore_integration_tests {
150150
},
151151
room_id,
152152
serde::Raw,
153-
user_id, EventId, OwnedEventId, RoomId, UserId,
153+
uint, user_id, EventId, OwnedEventId, RoomId, UserId,
154154
};
155155
use serde_json::{json, Value as JsonValue};
156156

@@ -596,11 +596,15 @@ macro_rules! statestore_integration_tests {
596596
let first_event_id = event_id!("$1435641916114394fHBLK:matrix.org");
597597
let second_event_id = event_id!("$fHBLK1435641916114394:matrix.org");
598598

599+
let first_receipt_ts = uint!(1436451550);
600+
let second_receipt_ts = uint!(1436451653);
601+
let third_receipt_ts = uint!(1436474532);
602+
599603
let first_receipt_event = serde_json::from_value(json!({
600604
first_event_id: {
601605
"m.read": {
602606
user_id(): {
603-
"ts": 1436451550453u64
607+
"ts": first_receipt_ts,
604608
}
605609
}
606610
}
@@ -611,7 +615,19 @@ macro_rules! statestore_integration_tests {
611615
second_event_id: {
612616
"m.read": {
613617
user_id(): {
614-
"ts": 1436451551453u64
618+
"ts": second_receipt_ts,
619+
}
620+
}
621+
}
622+
}))
623+
.expect("json creation failed");
624+
625+
let third_receipt_event = serde_json::from_value(json!({
626+
second_event_id: {
627+
"m.read": {
628+
user_id(): {
629+
"ts": third_receipt_ts,
630+
"thread_id": "main",
615631
}
616632
}
617633
}
@@ -626,7 +642,7 @@ macro_rules! statestore_integration_tests {
626642
user_id()
627643
)
628644
.await
629-
.expect("failed to read user room receipt")
645+
.expect("failed to read unthreaded user room receipt")
630646
.is_none());
631647
assert!(store
632648
.get_event_room_receipt_events(
@@ -636,7 +652,7 @@ macro_rules! statestore_integration_tests {
636652
&first_event_id
637653
)
638654
.await
639-
.expect("failed to read user room receipt for 1")
655+
.expect("failed to read unthreaded event room receipt for 1")
640656
.is_empty());
641657
assert!(store
642658
.get_event_room_receipt_events(
@@ -646,37 +662,41 @@ macro_rules! statestore_integration_tests {
646662
&second_event_id
647663
)
648664
.await
649-
.expect("failed to read user room receipt for 2")
665+
.expect("failed to read unthreaded event room receipt for 2")
650666
.is_empty());
651667

652668
let mut changes = StateChanges::default();
653669
changes.add_receipts(room_id, first_receipt_event);
654670

655671
store.save_changes(&changes).await.expect("writing changes fauked");
656-
assert!(store
672+
let (unthreaded_user_receipt_event_id, unthreaded_user_receipt) = store
657673
.get_user_room_receipt_event(
658674
room_id,
659675
ReceiptType::Read,
660676
ReceiptThread::Unthreaded,
661677
user_id()
662678
)
663679
.await
664-
.expect("failed to read user room receipt after save")
665-
.is_some());
680+
.expect("failed to read unthreaded user room receipt after save")
681+
.unwrap();
682+
assert_eq!(unthreaded_user_receipt_event_id, first_event_id);
683+
assert_eq!(unthreaded_user_receipt.ts.unwrap().0, first_receipt_ts);
684+
let first_event_unthreaded_receipts = store
685+
.get_event_room_receipt_events(
686+
room_id,
687+
ReceiptType::Read,
688+
ReceiptThread::Unthreaded,
689+
&first_event_id
690+
)
691+
.await
692+
.expect("failed to read unthreaded event room receipt for 1 after save");
666693
assert_eq!(
667-
store
668-
.get_event_room_receipt_events(
669-
room_id,
670-
ReceiptType::Read,
671-
ReceiptThread::Unthreaded,
672-
&first_event_id
673-
)
674-
.await
675-
.expect("failed to read user room receipt for 1 after save")
676-
.len(),
694+
first_event_unthreaded_receipts.len(),
677695
1,
678-
"Found a wrong number of receipts for 1 after save"
696+
"Found a wrong number of unthreaded receipts for 1 after save"
679697
);
698+
assert_eq!(first_event_unthreaded_receipts[0].0, user_id());
699+
assert_eq!(first_event_unthreaded_receipts[0].1.ts.unwrap().0, first_receipt_ts);
680700
assert!(store
681701
.get_event_room_receipt_events(
682702
room_id,
@@ -685,23 +705,25 @@ macro_rules! statestore_integration_tests {
685705
&second_event_id
686706
)
687707
.await
688-
.expect("failed to read user room receipt for 2 after save")
708+
.expect("failed to read unthreaded event room receipt for 2 after save")
689709
.is_empty());
690710

691711
let mut changes = StateChanges::default();
692712
changes.add_receipts(room_id, second_receipt_event);
693713

694714
store.save_changes(&changes).await.expect("Saving works");
695-
assert!(store
715+
let (unthreaded_user_receipt_event_id, unthreaded_user_receipt) = store
696716
.get_user_room_receipt_event(
697717
room_id,
698718
ReceiptType::Read,
699719
ReceiptThread::Unthreaded,
700720
user_id()
701721
)
702722
.await
703-
.expect("Getting user room receipts failed")
704-
.is_some());
723+
.expect("Getting unthreaded user room receipt after save failed")
724+
.unwrap();
725+
assert_eq!(unthreaded_user_receipt_event_id, second_event_id);
726+
assert_eq!(unthreaded_user_receipt.ts.unwrap().0, second_receipt_ts);
705727
assert!(store
706728
.get_event_room_receipt_events(
707729
room_id,
@@ -710,22 +732,108 @@ macro_rules! statestore_integration_tests {
710732
&first_event_id
711733
)
712734
.await
713-
.expect("Getting event room receipt events for first event failed")
735+
.expect("Getting unthreaded event room receipt events for first event failed")
714736
.is_empty());
737+
let second_event_unthreaded_receipts = store
738+
.get_event_room_receipt_events(
739+
room_id,
740+
ReceiptType::Read,
741+
ReceiptThread::Unthreaded,
742+
&second_event_id
743+
)
744+
.await
745+
.expect("Getting unthreaded event room receipt events for second event failed");
715746
assert_eq!(
716-
store
717-
.get_event_room_receipt_events(
718-
room_id,
719-
ReceiptType::Read,
720-
ReceiptThread::Unthreaded,
721-
&second_event_id
722-
)
723-
.await
724-
.expect("Getting event room receipt events for second event failed")
725-
.len(),
747+
second_event_unthreaded_receipts.len(),
748+
1,
749+
"Found a wrong number of unthreaded receipts for second event after save"
750+
);
751+
assert_eq!(second_event_unthreaded_receipts[0].0, user_id());
752+
assert_eq!(second_event_unthreaded_receipts[0].1.ts.unwrap().0, second_receipt_ts);
753+
754+
assert!(store
755+
.get_user_room_receipt_event(
756+
room_id,
757+
ReceiptType::Read,
758+
ReceiptThread::Main,
759+
user_id()
760+
)
761+
.await
762+
.expect("failed to read threaded user room receipt")
763+
.is_none());
764+
assert!(store
765+
.get_event_room_receipt_events(
766+
room_id,
767+
ReceiptType::Read,
768+
ReceiptThread::Main,
769+
&second_event_id
770+
)
771+
.await
772+
.expect("Getting threaded event room receipts for 2 failed")
773+
.is_empty());
774+
775+
let mut changes = StateChanges::default();
776+
changes.add_receipts(room_id, third_receipt_event);
777+
778+
store.save_changes(&changes).await.expect("Saving works");
779+
// Unthreaded receipts should not have changed.
780+
let (unthreaded_user_receipt_event_id, unthreaded_user_receipt) = store
781+
.get_user_room_receipt_event(
782+
room_id,
783+
ReceiptType::Read,
784+
ReceiptThread::Unthreaded,
785+
user_id()
786+
)
787+
.await
788+
.expect("Getting unthreaded user room receipt after save failed")
789+
.unwrap();
790+
assert_eq!(unthreaded_user_receipt_event_id, second_event_id);
791+
assert_eq!(unthreaded_user_receipt.ts.unwrap().0, second_receipt_ts);
792+
let second_event_unthreaded_receipts = store
793+
.get_event_room_receipt_events(
794+
room_id,
795+
ReceiptType::Read,
796+
ReceiptThread::Unthreaded,
797+
&second_event_id
798+
)
799+
.await
800+
.expect("Getting unthreaded event room receipt events for second event failed");
801+
assert_eq!(
802+
second_event_unthreaded_receipts.len(),
803+
1,
804+
"Found a wrong number of unthreaded receipts for second event after save"
805+
);
806+
assert_eq!(second_event_unthreaded_receipts[0].0, user_id());
807+
assert_eq!(second_event_unthreaded_receipts[0].1.ts.unwrap().0, second_receipt_ts);
808+
// Threaded receipts should have changed
809+
let (threaded_user_receipt_event_id, threaded_user_receipt) = store
810+
.get_user_room_receipt_event(
811+
room_id,
812+
ReceiptType::Read,
813+
ReceiptThread::Main,
814+
user_id()
815+
)
816+
.await
817+
.expect("Getting threaded user room receipt after save failed")
818+
.unwrap();
819+
assert_eq!(threaded_user_receipt_event_id, second_event_id);
820+
assert_eq!(threaded_user_receipt.ts.unwrap().0, third_receipt_ts);
821+
let second_event_threaded_receipts = store
822+
.get_event_room_receipt_events(
823+
room_id,
824+
ReceiptType::Read,
825+
ReceiptThread::Main,
826+
&second_event_id
827+
)
828+
.await
829+
.expect("Getting threaded event room receipt events for second event failed");
830+
assert_eq!(
831+
second_event_threaded_receipts.len(),
726832
1,
727-
"Found a wrong number of receipts for second event after save"
833+
"Found a wrong number of threaded receipts for second event after save"
728834
);
835+
assert_eq!(second_event_threaded_receipts[0].0, user_id());
836+
assert_eq!(second_event_threaded_receipts[0].1.ts.unwrap().0, third_receipt_ts);
729837
}
730838

731839
#[async_test]

0 commit comments

Comments
 (0)