Skip to content

Commit 5604d3a

Browse files
committed
Add test for forked position
1 parent f8f6dc9 commit 5604d3a

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

tests/rest/client/sliding_sync/test_rooms_required_state.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,78 @@ def test_lazy_members_across_multiple_rooms(self) -> None:
10151015
exact=True,
10161016
)
10171017

1018+
def test_lazy_members_forked_position(self) -> None:
1019+
"""Test that lazy loading room members are tracked correctly when a
1020+
connection position is reused"""
1021+
1022+
user1_id = self.register_user("user1", "pass")
1023+
user1_tok = self.login(user1_id, "pass")
1024+
user2_id = self.register_user("user2", "pass")
1025+
user2_tok = self.login(user2_id, "pass")
1026+
1027+
room_id1 = self.helper.create_room_as(user2_id, tok=user2_tok)
1028+
self.helper.join(room_id1, user1_id, tok=user1_tok)
1029+
1030+
self.helper.send(room_id1, "1", tok=user2_tok)
1031+
1032+
# Make a sync with lazy loading for the room members to establish
1033+
# a position
1034+
sync_body = {
1035+
"lists": {
1036+
"foo-list": {
1037+
"ranges": [[0, 1]],
1038+
"required_state": [
1039+
[EventTypes.Member, StateValues.LAZY],
1040+
],
1041+
"timeline_limit": 1,
1042+
}
1043+
}
1044+
}
1045+
response_body, from_token = self.do_sync(sync_body, tok=user1_tok)
1046+
1047+
# We expect to see only user2's membership in the room
1048+
state_map = self.get_success(
1049+
self.storage_controllers.state.get_current_state(room_id1)
1050+
)
1051+
self._assertRequiredStateIncludes(
1052+
response_body["rooms"][room_id1]["required_state"],
1053+
{
1054+
state_map[(EventTypes.Member, user2_id)],
1055+
},
1056+
exact=True,
1057+
)
1058+
1059+
# Send a message in room1 from user1
1060+
self.helper.send(room_id1, "2", tok=user1_tok)
1061+
1062+
# Make an incremental Sliding Sync request and check that we get user1's
1063+
# membership.
1064+
response_body, _ = self.do_sync(sync_body, since=from_token, tok=user1_tok)
1065+
state_map = self.get_success(
1066+
self.storage_controllers.state.get_current_state(room_id1)
1067+
)
1068+
self._assertRequiredStateIncludes(
1069+
response_body["rooms"][room_id1]["required_state"],
1070+
{
1071+
state_map[(EventTypes.Member, user1_id)],
1072+
},
1073+
exact=True,
1074+
)
1075+
1076+
# Now, reuse the original position and check we still get user1's
1077+
# membership.
1078+
response_body, _ = self.do_sync(sync_body, since=from_token, tok=user1_tok)
1079+
state_map = self.get_success(
1080+
self.storage_controllers.state.get_current_state(room_id1)
1081+
)
1082+
self._assertRequiredStateIncludes(
1083+
response_body["rooms"][room_id1]["required_state"],
1084+
{
1085+
state_map[(EventTypes.Member, user1_id)],
1086+
},
1087+
exact=True,
1088+
)
1089+
10181090
def test_rooms_required_state_me(self) -> None:
10191091
"""
10201092
Test `rooms.required_state` correctly handles $ME.

0 commit comments

Comments
 (0)