@@ -3714,6 +3714,80 @@ def test_rooms_required_state_lazy_loading_room_members(self) -> None:
3714
3714
)
3715
3715
self .assertIsNone (channel .json_body ["rooms" ][room_id1 ].get ("invite_state" ))
3716
3716
3717
+ def test_rooms_required_state_me (self ) -> None :
3718
+ """
3719
+ Test `rooms.required_state` correctly handles $ME.
3720
+ """
3721
+ user1_id = self .register_user ("user1" , "pass" )
3722
+ user1_tok = self .login (user1_id , "pass" )
3723
+ user2_id = self .register_user ("user2" , "pass" )
3724
+ user2_tok = self .login (user2_id , "pass" )
3725
+
3726
+ room_id1 = self .helper .create_room_as (user2_id , tok = user2_tok )
3727
+ self .helper .join (room_id1 , user1_id , tok = user1_tok )
3728
+
3729
+ self .helper .send (room_id1 , "1" , tok = user2_tok )
3730
+
3731
+ # Also send normal state events with state keys of the users, first
3732
+ # change the power levels to allow this.
3733
+ self .helper .send_state (
3734
+ room_id1 ,
3735
+ event_type = EventTypes .PowerLevels ,
3736
+ body = {"users" : {user1_id : 50 , user2_id : 100 }},
3737
+ tok = user2_tok ,
3738
+ )
3739
+ self .helper .send_state (
3740
+ room_id1 ,
3741
+ event_type = "org.matrix.foo" ,
3742
+ state_key = user1_id ,
3743
+ body = {},
3744
+ tok = user1_tok ,
3745
+ )
3746
+ self .helper .send_state (
3747
+ room_id1 ,
3748
+ event_type = "org.matrix.foo" ,
3749
+ state_key = user2_id ,
3750
+ body = {},
3751
+ tok = user2_tok ,
3752
+ )
3753
+
3754
+ # Make the Sliding Sync request with a request for '$ME'.
3755
+ channel = self .make_request (
3756
+ "POST" ,
3757
+ self .sync_endpoint ,
3758
+ {
3759
+ "lists" : {
3760
+ "foo-list" : {
3761
+ "ranges" : [[0 , 1 ]],
3762
+ "required_state" : [
3763
+ [EventTypes .Create , "" ],
3764
+ [EventTypes .Member , StateValues .ME ],
3765
+ ["org.matrix.foo" , StateValues .ME ],
3766
+ ],
3767
+ "timeline_limit" : 3 ,
3768
+ }
3769
+ }
3770
+ },
3771
+ access_token = user1_tok ,
3772
+ )
3773
+ self .assertEqual (channel .code , 200 , channel .json_body )
3774
+
3775
+ state_map = self .get_success (
3776
+ self .storage_controllers .state .get_current_state (room_id1 )
3777
+ )
3778
+
3779
+ # Only user2 and user3 sent events in the 3 events we see in the `timeline`
3780
+ self ._assertRequiredStateIncludes (
3781
+ channel .json_body ["rooms" ][room_id1 ]["required_state" ],
3782
+ {
3783
+ state_map [(EventTypes .Create , "" )],
3784
+ state_map [(EventTypes .Member , user1_id )],
3785
+ state_map [("org.matrix.foo" , user1_id )],
3786
+ },
3787
+ exact = True ,
3788
+ )
3789
+ self .assertIsNone (channel .json_body ["rooms" ][room_id1 ].get ("invite_state" ))
3790
+
3717
3791
@parameterized .expand ([(Membership .LEAVE ,), (Membership .BAN ,)])
3718
3792
def test_rooms_required_state_leave_ban (self , stop_membership : str ) -> None :
3719
3793
"""
0 commit comments