def prepare(self, reactor, clock, homeserver): super().prepare(reactor, clock, homeserver) self.room_creator = homeserver.get_room_creation_handler() self.persist_event_storage_controller = ( self.hs.get_storage_controllers().persistence ) # Create a test user self.ourUser = UserID.from_string(OUR_USER_ID) self.ourRequester = create_requester(self.ourUser) # Create a second test user self.otherUser = UserID.from_string(OTHER_USER_ID) self.otherRequester = create_requester(self.otherUser) # Create a test room info, _ = self.get_success(self.room_creator.create_room(self.ourRequester, {})) self.room_id1 = info["room_id"] # Create a second test room info, _ = self.get_success(self.room_creator.create_room(self.ourRequester, {})) self.room_id2 = info["room_id"] # Join the second user to the first room memberEvent, memberEventContext = self.get_success( create_event( self.hs, room_id=self.room_id1, type="m.room.member", sender=self.otherRequester.user.to_string(), state_key=self.otherRequester.user.to_string(), content={"membership": "join"}, ) ) self.get_success( self.persist_event_storage_controller.persist_event( memberEvent, memberEventContext ) ) # Join the second user to the second room memberEvent, memberEventContext = self.get_success( create_event( self.hs, room_id=self.room_id2, type="m.room.member", sender=self.otherRequester.user.to_string(), state_key=self.otherRequester.user.to_string(), content={"membership": "join"}, ) ) self.get_success( self.persist_event_storage_controller.persist_event( memberEvent, memberEventContext ) )
def test_get_joined_users_from_context(self): room = self.helper.create_room_as(self.u_alice, tok=self.t_alice) bob_event = self.get_success( event_injection.inject_member_event( self.hs, room, self.u_bob, Membership.JOIN ) ) # first, create a regular event event, context = self.get_success( event_injection.create_event( self.hs, room_id=room, sender=self.u_alice, prev_event_ids=[bob_event.event_id], type="m.test.1", content={}, ) ) users = self.get_success( self.store.get_joined_users_from_context(event, context) ) self.assertEqual(users.keys(), {self.u_alice, self.u_bob}) # Regression test for #7376: create a state event whose key matches bob's # user_id, but which is *not* a membership event, and persist that; then check # that `get_joined_users_from_context` returns the correct users for the next event. non_member_event = self.get_success( event_injection.inject_event( self.hs, room_id=room, sender=self.u_bob, prev_event_ids=[bob_event.event_id], type="m.test.2", state_key=self.u_bob, content={}, ) ) event, context = self.get_success( event_injection.create_event( self.hs, room_id=room, sender=self.u_alice, prev_event_ids=[non_member_event.event_id], type="m.test.3", content={}, ) ) users = self.get_success( self.store.get_joined_users_from_context(event, context) ) self.assertEqual(users.keys(), {self.u_alice, self.u_bob})
def test_serialize_deserialize_state_no_prev(self): """Test that an EventContext for a state event (with not previous entry) is the same after serialize/deserialize. """ event, context = create_event( self.hs, room_id=self.room_id, type="m.test", sender=self.user_id, state_key="", ) self._check_serialize_deserialize(event, context)
def test_serialize_deserialize_msg(self): """Test that an EventContext for a message event is the same after serialize/deserialize. """ event, context = create_event( self.hs, room_id=self.room_id, type="m.test", sender=self.user_id, ) self._check_serialize_deserialize(event, context)
def test_serialize_deserialize_state_prev(self): """Test that an EventContext for a state event (which replaces a previous entry) is the same after serialize/deserialize. """ event, context = create_event( self.hs, room_id=self.room_id, type="m.room.member", sender=self.user_id, state_key=self.user_id, content={"membership": "leave"}, ) self._check_serialize_deserialize(event, context)
def _create_and_persist_member_event( self) -> Tuple[EventBase, EventContext]: # Create a member event we can use as an auth_event memberEvent, memberEventContext = self.get_success( create_event( self.hs, room_id=self.room_id, type="m.room.member", sender=self.requester.user.to_string(), state_key=self.requester.user.to_string(), content={"membership": "join"}, )) self.get_success( self.persist_event_storage.persist_event(memberEvent, memberEventContext)) return memberEvent, memberEventContext