Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit ba03ca1

Browse files
committed
Add tests and apply suggestions from code review.
1 parent 580b163 commit ba03ca1

File tree

3 files changed

+127
-29
lines changed

3 files changed

+127
-29
lines changed

docs/admin_api/rooms.md

+21-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ The following query parameters are available:
1919
- `joined_local_members` - Rooms are ordered by the number of local members. Largest to smallest.
2020
- `version` - Rooms are ordered by room version. Largest to smallest.
2121
- `creator` - Rooms are ordered alphabetically by creator of the room.
22-
- `encryption` - Rooms are ordered by encryption of the room.
22+
- `encryption` - Rooms are ordered alphabetically by the end-to-end encryption algorithm.
2323
- `federatable` - Rooms are ordered by whether the room is federatable.
2424
- `public` - Rooms are ordered by visibility in room list.
2525
- `join_rules` - Rooms are ordered alphabetically by join rules of the room.
@@ -227,13 +227,33 @@ Response:
227227
"name": "Music Theory",
228228
"canonical_alias": "#musictheory:matrix.org",
229229
"joined_members": 127
230+
"joined_local_members": 2,
231+
"version": "1",
232+
"creator": "@foo:matrix.org",
233+
"encryption": null,
234+
"federatable": true,
235+
"public": true,
236+
"join_rules": "invite",
237+
"guest_access": null,
238+
"history_visibility": "shared",
239+
"state_events": 93534
230240
},
231241
... (48 hidden items) ...
232242
{
233243
"room_id": "!twcBhHVdZlQWuuxBhN:termina.org.uk",
234244
"name": "weechat-matrix",
235245
"canonical_alias": "#weechat-matrix:termina.org.uk",
236246
"joined_members": 137
247+
"joined_local_members": 20,
248+
"version": "4",
249+
"creator": "@foo:termina.org.uk",
250+
"encryption": null,
251+
"federatable": true,
252+
"public": true,
253+
"join_rules": "invite",
254+
"guest_access": null,
255+
"history_visibility": "shared",
256+
"state_events": 8345
237257
}
238258
],
239259
"offset": 100,

synapse/storage/data_stores/main/room.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,14 @@ class RoomSortOrder(Enum):
5252
"""
5353
Enum to define the sorting method used when returning rooms with get_rooms_paginate
5454
55-
ALPHABETICAL = sort rooms alphabetically by name
56-
SIZE = sort rooms by membership size, highest to lowest
55+
NAME = sort rooms alphabetically by name
56+
JOINED_MEMBERS = sort rooms by membership size, highest to lowest
5757
"""
5858

59+
# ALPHABETICAL and SIZE are deprecated.
60+
# ALPHABETICAL is same as NAME.
5961
ALPHABETICAL = "alphabetical"
62+
# SIZE is same as JOINED_MEMBERS.
6063
SIZE = "size"
6164
NAME = "name"
6265
CANONICAL_ALIAS = "canonical_alias"

tests/rest/admin/test_room.py

+101-26
Original file line numberDiff line numberDiff line change
@@ -473,34 +473,37 @@ def test_room_list_sort_order(self):
473473
"""Test room list sort ordering. alphabetical name versus number of members,
474474
reversing the order, etc.
475475
"""
476-
# Create 3 test rooms
477-
room_id_1 = self.helper.create_room_as(self.admin_user, tok=self.admin_user_tok)
478-
room_id_2 = self.helper.create_room_as(self.admin_user, tok=self.admin_user_tok)
479-
room_id_3 = self.helper.create_room_as(self.admin_user, tok=self.admin_user_tok)
480-
481-
# Set room names in alphabetical order. room 1 -> A, 2 -> B, 3 -> C
482-
self.helper.send_state(
483-
room_id_1, "m.room.name", {"name": "A"}, tok=self.admin_user_tok,
484-
)
485-
self.helper.send_state(
486-
room_id_2, "m.room.name", {"name": "B"}, tok=self.admin_user_tok,
487-
)
488-
self.helper.send_state(
489-
room_id_3, "m.room.name", {"name": "C"}, tok=self.admin_user_tok,
490-
)
491-
492-
# Set room member size in the reverse order. room 1 -> 1 member, 2 -> 2, 3 -> 3
493-
user_1 = self.register_user("bob1", "pass")
494-
user_1_tok = self.login("bob1", "pass")
495-
self.helper.join(room_id_2, user_1, tok=user_1_tok)
496476

497-
user_2 = self.register_user("bob2", "pass")
498-
user_2_tok = self.login("bob2", "pass")
499-
self.helper.join(room_id_3, user_2, tok=user_2_tok)
477+
def _set_canonical_alias(room_id: str, test_alias: str, admin_user_tok: str):
478+
# Create a new alias to this room
479+
url = "/_matrix/client/r0/directory/room/%s" % (
480+
urllib.parse.quote(test_alias),
481+
)
482+
request, channel = self.make_request(
483+
"PUT",
484+
url.encode("ascii"),
485+
{"room_id": room_id},
486+
access_token=admin_user_tok,
487+
)
488+
self.render(request)
489+
self.assertEqual(
490+
200, int(channel.result["code"]), msg=channel.result["body"]
491+
)
500492

501-
user_3 = self.register_user("bob3", "pass")
502-
user_3_tok = self.login("bob3", "pass")
503-
self.helper.join(room_id_3, user_3, tok=user_3_tok)
493+
# Set this new alias as the canonical alias for this room
494+
self.helper.send_state(
495+
room_id,
496+
"m.room.aliases",
497+
{"aliases": [test_alias]},
498+
tok=admin_user_tok,
499+
state_key="test",
500+
)
501+
self.helper.send_state(
502+
room_id,
503+
"m.room.canonical_alias",
504+
{"alias": test_alias},
505+
tok=admin_user_tok,
506+
)
504507

505508
def _order_test(
506509
order_type: str, expected_room_list: List[str], reverse: bool = False,
@@ -544,13 +547,85 @@ def _order_test(
544547
returned_order = [r["room_id"] for r in rooms]
545548
self.assertListEqual(expected_room_list, returned_order) # order is checked
546549

550+
# Create 3 test rooms
551+
room_id_1 = self.helper.create_room_as(self.admin_user, tok=self.admin_user_tok)
552+
room_id_2 = self.helper.create_room_as(self.admin_user, tok=self.admin_user_tok)
553+
room_id_3 = self.helper.create_room_as(self.admin_user, tok=self.admin_user_tok)
554+
555+
# Set room names in alphabetical order. room 1 -> A, 2 -> B, 3 -> C
556+
self.helper.send_state(
557+
room_id_1, "m.room.name", {"name": "A"}, tok=self.admin_user_tok,
558+
)
559+
self.helper.send_state(
560+
room_id_2, "m.room.name", {"name": "B"}, tok=self.admin_user_tok,
561+
)
562+
self.helper.send_state(
563+
room_id_3, "m.room.name", {"name": "C"}, tok=self.admin_user_tok,
564+
)
565+
566+
# Set room canonical room aliases
567+
_set_canonical_alias(room_id_1, "#A_alias:test", self.admin_user_tok)
568+
_set_canonical_alias(room_id_2, "#B_alias:test", self.admin_user_tok)
569+
_set_canonical_alias(room_id_3, "#C_alias:test", self.admin_user_tok)
570+
571+
# Set room member size in the reverse order. room 1 -> 1 member, 2 -> 2, 3 -> 3
572+
user_1 = self.register_user("bob1", "pass")
573+
user_1_tok = self.login("bob1", "pass")
574+
self.helper.join(room_id_2, user_1, tok=user_1_tok)
575+
576+
user_2 = self.register_user("bob2", "pass")
577+
user_2_tok = self.login("bob2", "pass")
578+
self.helper.join(room_id_3, user_2, tok=user_2_tok)
579+
580+
user_3 = self.register_user("bob3", "pass")
581+
user_3_tok = self.login("bob3", "pass")
582+
self.helper.join(room_id_3, user_3, tok=user_3_tok)
583+
547584
# Test different sort orders, with forward and reverse directions
548585
_order_test("name", [room_id_1, room_id_2, room_id_3])
549586
_order_test("name", [room_id_3, room_id_2, room_id_1], reverse=True)
550587

588+
_order_test("canonical_alias", [room_id_1, room_id_2, room_id_3])
589+
_order_test("canonical_alias", [room_id_3, room_id_2, room_id_1], reverse=True)
590+
551591
_order_test("joined_members", [room_id_3, room_id_2, room_id_1])
552592
_order_test("joined_members", [room_id_1, room_id_2, room_id_3], reverse=True)
553593

594+
_order_test("joined_local_members", [room_id_3, room_id_2, room_id_1])
595+
_order_test(
596+
"joined_local_members", [room_id_1, room_id_2, room_id_3], reverse=True
597+
)
598+
599+
_order_test("version", [room_id_1, room_id_2, room_id_3])
600+
_order_test("version", [room_id_1, room_id_2, room_id_3], reverse=True)
601+
602+
_order_test("creator", [room_id_1, room_id_2, room_id_3])
603+
_order_test("creator", [room_id_1, room_id_2, room_id_3], reverse=True)
604+
605+
_order_test("encryption", [room_id_1, room_id_2, room_id_3])
606+
_order_test("encryption", [room_id_1, room_id_2, room_id_3], reverse=True)
607+
608+
_order_test("federatable", [room_id_1, room_id_2, room_id_3])
609+
_order_test("federatable", [room_id_1, room_id_2, room_id_3], reverse=True)
610+
611+
_order_test("public", [room_id_1, room_id_2, room_id_3])
612+
# Different sort order of SQlite and PostreSQL
613+
# _order_test("public", [room_id_3, room_id_2, room_id_1], reverse=True)
614+
615+
_order_test("join_rules", [room_id_1, room_id_2, room_id_3])
616+
_order_test("join_rules", [room_id_1, room_id_2, room_id_3], reverse=True)
617+
618+
_order_test("guest_access", [room_id_1, room_id_2, room_id_3])
619+
_order_test("guest_access", [room_id_1, room_id_2, room_id_3], reverse=True)
620+
621+
_order_test("history_visibility", [room_id_1, room_id_2, room_id_3])
622+
_order_test(
623+
"history_visibility", [room_id_1, room_id_2, room_id_3], reverse=True
624+
)
625+
626+
_order_test("state_events", [room_id_3, room_id_2, room_id_1])
627+
_order_test("state_events", [room_id_1, room_id_2, room_id_3], reverse=True)
628+
554629
def test_search_term(self):
555630
"""Test that searching for a room works correctly"""
556631
# Create two test rooms

0 commit comments

Comments
 (0)