@@ -581,21 +581,181 @@ impl StateChanges {
581
581
582
582
#[ cfg( test) ]
583
583
mod test {
584
- use ruma:: { event_id, room_id, user_id, EventId , RoomId , UserId } ;
584
+ use std:: collections:: { BTreeMap , BTreeSet } ;
585
+
586
+ use matrix_sdk_common:: deserialized_responses:: { MemberEvent , StrippedMemberEvent } ;
587
+ use matrix_sdk_test:: test_json;
588
+ use ruma:: {
589
+ device_id, event_id,
590
+ events:: {
591
+ presence:: PresenceEvent , AnyEphemeralRoomEventContent , AnyGlobalAccountDataEvent ,
592
+ AnyRoomAccountDataEvent , AnyStrippedStateEvent , AnySyncEphemeralRoomEvent ,
593
+ AnySyncStateEvent , EventContent ,
594
+ } ,
595
+ room_id,
596
+ serde:: Raw ,
597
+ user_id, EventId , RoomId , UserId ,
598
+ } ;
599
+ use serde_json:: Value as JsonValue ;
600
+
601
+ use super :: { Result , StateChanges , StateStore , Store } ;
602
+ use crate :: { RoomType , Session } ;
585
603
586
604
pub ( crate ) fn user_id ( ) -> & ' static UserId {
587
605
user_id ! ( "@example:localhost" )
588
606
}
589
607
608
+ pub ( crate ) fn invited_user_id ( ) -> & ' static UserId {
609
+ user_id ! ( "@invited:localhost" )
610
+ }
611
+
590
612
pub ( crate ) fn room_id ( ) -> & ' static RoomId {
591
613
room_id ! ( "!test:localhost" )
592
614
}
593
615
616
+ pub ( crate ) fn stripped_room_id ( ) -> & ' static RoomId {
617
+ room_id ! ( "!stripped:localhost" )
618
+ }
619
+
594
620
pub ( crate ) fn first_receipt_event_id ( ) -> & ' static EventId {
595
621
event_id ! ( "$example" )
596
622
}
597
623
598
624
pub ( crate ) fn second_receipt_event_id ( ) -> & ' static EventId {
599
625
event_id ! ( "$other" )
600
626
}
627
+
628
+ /// Populate the given `StateStore`.
629
+ pub ( crate ) async fn populated_store ( inner : Box < dyn StateStore > ) -> Result < Store > {
630
+ let mut changes = StateChanges :: default ( ) ;
631
+ let store = Store :: new ( inner) ;
632
+
633
+ let user_id = user_id ( ) ;
634
+ let invited_user_id = invited_user_id ( ) ;
635
+ let room_id = room_id ( ) ;
636
+ let stripped_room_id = stripped_room_id ( ) ;
637
+ let device_id = device_id ! ( "device" ) ;
638
+
639
+ let session = Session {
640
+ access_token : "token" . to_string ( ) ,
641
+ user_id : user_id. to_owned ( ) ,
642
+ device_id : device_id. to_owned ( ) ,
643
+ } ;
644
+ store. restore_session ( session) . await . unwrap ( ) ;
645
+
646
+ changes. sync_token = Some ( "t392-516_47314_0_7_1_1_1_11444_1" . to_string ( ) ) ;
647
+
648
+ let presence_json: & JsonValue = & test_json:: PRESENCE ;
649
+ let presence_raw =
650
+ serde_json:: from_value :: < Raw < PresenceEvent > > ( presence_json. clone ( ) ) . unwrap ( ) ;
651
+ let presence_event = presence_raw. deserialize ( ) . unwrap ( ) ;
652
+ changes. add_presence_event ( presence_event, presence_raw) ;
653
+
654
+ let pushrules_json: & JsonValue = & test_json:: PUSH_RULES ;
655
+ let pushrules_raw =
656
+ serde_json:: from_value :: < Raw < AnyGlobalAccountDataEvent > > ( pushrules_json. clone ( ) )
657
+ . unwrap ( ) ;
658
+ let pushrules_event = pushrules_raw. deserialize ( ) . unwrap ( ) ;
659
+ changes. add_account_data ( pushrules_event, pushrules_raw) ;
660
+
661
+ let mut room = store. get_or_create_room ( room_id, RoomType :: Joined ) . await . clone_info ( ) ;
662
+ room. mark_as_left ( ) ;
663
+
664
+ let tag_json: & JsonValue = & test_json:: TAG ;
665
+ let tag_raw =
666
+ serde_json:: from_value :: < Raw < AnyRoomAccountDataEvent > > ( tag_json. clone ( ) ) . unwrap ( ) ;
667
+ let tag_event = tag_raw. deserialize ( ) . unwrap ( ) ;
668
+ changes. add_room_account_data ( room_id, tag_event, tag_raw) ;
669
+
670
+ let name_json: & JsonValue = & test_json:: NAME ;
671
+ let name_raw = serde_json:: from_value :: < Raw < AnySyncStateEvent > > ( name_json. clone ( ) ) . unwrap ( ) ;
672
+ let name_event = name_raw. deserialize ( ) . unwrap ( ) ;
673
+ room. handle_state_event ( & name_event. content ( ) ) ;
674
+ changes. add_state_event ( room_id, name_event, name_raw) ;
675
+
676
+ let topic_json: & JsonValue = & test_json:: TOPIC ;
677
+ let topic_raw =
678
+ serde_json:: from_value :: < Raw < AnySyncStateEvent > > ( topic_json. clone ( ) ) . unwrap ( ) ;
679
+ let topic_event = topic_raw. deserialize ( ) . unwrap ( ) ;
680
+ room. handle_state_event ( & topic_event. content ( ) ) ;
681
+ changes. add_state_event ( room_id, topic_event, topic_raw) ;
682
+
683
+ let mut room_ambiguity_map = BTreeMap :: new ( ) ;
684
+ let mut room_profiles = BTreeMap :: new ( ) ;
685
+ let mut room_members = BTreeMap :: new ( ) ;
686
+
687
+ let member_json: & JsonValue = & test_json:: MEMBER ;
688
+ let member_event = serde_json:: from_value :: < MemberEvent > ( member_json. clone ( ) ) . unwrap ( ) ;
689
+ let member_event_content = member_event. content . clone ( ) ;
690
+ room_ambiguity_map. insert (
691
+ member_event_content. displayname . clone ( ) . unwrap ( ) ,
692
+ BTreeSet :: from ( [ user_id. to_owned ( ) ] ) ,
693
+ ) ;
694
+ room_profiles. insert ( user_id. to_owned ( ) , member_event. content . clone ( ) ) ;
695
+ room_members. insert ( user_id. to_owned ( ) , member_event) ;
696
+
697
+ let member_state_raw =
698
+ serde_json:: from_value :: < Raw < AnySyncStateEvent > > ( member_json. clone ( ) ) . unwrap ( ) ;
699
+ let member_state_event = member_state_raw. deserialize ( ) . unwrap ( ) ;
700
+ changes. add_state_event ( room_id, member_state_event, member_state_raw) ;
701
+
702
+ let invited_member_json: & JsonValue = & test_json:: MEMBER_INVITE ;
703
+ let invited_member_event =
704
+ serde_json:: from_value :: < MemberEvent > ( invited_member_json. clone ( ) ) . unwrap ( ) ;
705
+ room_ambiguity_map
706
+ . entry ( member_event_content. displayname . clone ( ) . unwrap ( ) )
707
+ . or_default ( )
708
+ . insert ( invited_user_id. to_owned ( ) ) ;
709
+ room_profiles. insert ( invited_user_id. to_owned ( ) , invited_member_event. content . clone ( ) ) ;
710
+ room_members. insert ( invited_user_id. to_owned ( ) , invited_member_event) ;
711
+
712
+ let invited_member_state_raw =
713
+ serde_json:: from_value :: < Raw < AnySyncStateEvent > > ( invited_member_json. clone ( ) ) . unwrap ( ) ;
714
+ let invited_member_state_event = invited_member_state_raw. deserialize ( ) . unwrap ( ) ;
715
+ changes. add_state_event ( room_id, invited_member_state_event, invited_member_state_raw) ;
716
+
717
+ let receipt_json: & JsonValue = & test_json:: READ_RECEIPT ;
718
+ let receipt_event =
719
+ serde_json:: from_value :: < AnySyncEphemeralRoomEvent > ( receipt_json. clone ( ) ) . unwrap ( ) ;
720
+ let receipt_content = match receipt_event. content ( ) {
721
+ AnyEphemeralRoomEventContent :: Receipt ( content) => content,
722
+ _ => panic ! ( ) ,
723
+ } ;
724
+ changes. add_receipts ( room_id, receipt_content) ;
725
+
726
+ changes. ambiguity_maps . insert ( room_id. to_owned ( ) , room_ambiguity_map) ;
727
+ changes. profiles . insert ( room_id. to_owned ( ) , room_profiles) ;
728
+ changes. members . insert ( room_id. to_owned ( ) , room_members) ;
729
+ changes. add_room ( room) ;
730
+
731
+ let mut stripped_room =
732
+ store. get_or_create_stripped_room ( stripped_room_id) . await . clone_info ( ) ;
733
+
734
+ let stripped_name_json: & JsonValue = & test_json:: NAME_STRIPPED ;
735
+ let stripped_name_raw =
736
+ serde_json:: from_value :: < Raw < AnyStrippedStateEvent > > ( stripped_name_json. clone ( ) )
737
+ . unwrap ( ) ;
738
+ let stripped_name_event = stripped_name_raw. deserialize ( ) . unwrap ( ) ;
739
+ stripped_room. handle_state_event ( & stripped_name_event. content ( ) ) ;
740
+ changes. stripped_state . insert (
741
+ stripped_room_id. to_owned ( ) ,
742
+ BTreeMap :: from ( [ (
743
+ stripped_name_event. content ( ) . event_type ( ) . to_owned ( ) ,
744
+ BTreeMap :: from ( [ (
745
+ stripped_name_event. state_key ( ) . to_owned ( ) ,
746
+ stripped_name_raw. clone ( ) ,
747
+ ) ] ) ,
748
+ ) ] ) ,
749
+ ) ;
750
+ changes. invited_room_info . insert ( stripped_room_id. to_owned ( ) , stripped_room. clone ( ) ) ;
751
+ changes. add_stripped_room ( stripped_room) ;
752
+
753
+ let stripped_member_json: & JsonValue = & test_json:: MEMBER_STRIPPED ;
754
+ let stripped_member_event =
755
+ serde_json:: from_value :: < StrippedMemberEvent > ( stripped_member_json. clone ( ) ) . unwrap ( ) ;
756
+ changes. add_stripped_member ( stripped_room_id, stripped_member_event) ;
757
+
758
+ store. save_changes ( & changes) . await ?;
759
+ Ok ( store)
760
+ }
601
761
}
0 commit comments