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

Commit e2e514e

Browse files
committed
Reduce duplicated code.
1 parent 3f32bdf commit e2e514e

File tree

2 files changed

+20
-254
lines changed

2 files changed

+20
-254
lines changed

tests/rest/client/test_rooms.py

Lines changed: 4 additions & 215 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
EventTypes,
3636
Membership,
3737
PublicRoomsFilterFields,
38-
RelationTypes,
3938
RoomTypes,
4039
)
4140
from synapse.api.errors import Codes, HttpResponseException
@@ -50,6 +49,7 @@
5049

5150
from tests import unittest
5251
from tests.http.server._base import make_request_with_cancellation_test
52+
from tests.storage.test_stream import PaginationTestCase
5353
from tests.test_utils import make_awaitable
5454

5555
PATH_PREFIX = b"/_matrix/client/api/v1"
@@ -2915,91 +2915,8 @@ def _send_labelled_messages_in_room(self) -> str:
29152915
return event_id
29162916

29172917

2918-
class RelationsTestCase(unittest.HomeserverTestCase):
2919-
servlets = [
2920-
synapse.rest.admin.register_servlets_for_client_rest_resource,
2921-
room.register_servlets,
2922-
login.register_servlets,
2923-
]
2924-
2925-
def default_config(self) -> Dict[str, Any]:
2926-
config = super().default_config()
2927-
config["experimental_features"] = {"msc3440_enabled": True}
2928-
return config
2929-
2930-
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
2931-
self.user_id = self.register_user("test", "test")
2932-
self.tok = self.login("test", "test")
2933-
self.room_id = self.helper.create_room_as(self.user_id, tok=self.tok)
2934-
2935-
self.second_user_id = self.register_user("second", "test")
2936-
self.second_tok = self.login("second", "test")
2937-
self.helper.join(
2938-
room=self.room_id, user=self.second_user_id, tok=self.second_tok
2939-
)
2940-
2941-
self.third_user_id = self.register_user("third", "test")
2942-
self.third_tok = self.login("third", "test")
2943-
self.helper.join(room=self.room_id, user=self.third_user_id, tok=self.third_tok)
2944-
2945-
# Store a token which is after all the room creation events.
2946-
self.from_token = self.get_success(
2947-
self.hs.get_event_sources().get_current_token_for_pagination(self.room_id)
2948-
)
2949-
2950-
# An initial event with a relation from second user.
2951-
res = self.helper.send_event(
2952-
room_id=self.room_id,
2953-
type=EventTypes.Message,
2954-
content={"msgtype": "m.text", "body": "Message 1"},
2955-
tok=self.tok,
2956-
)
2957-
self.event_id_1 = res["event_id"]
2958-
res = self.helper.send_event(
2959-
room_id=self.room_id,
2960-
type="m.reaction",
2961-
content={
2962-
"m.relates_to": {
2963-
"rel_type": RelationTypes.ANNOTATION,
2964-
"event_id": self.event_id_1,
2965-
"key": "👍",
2966-
}
2967-
},
2968-
tok=self.second_tok,
2969-
)
2970-
self.event_id_annotation = res["event_id"]
2971-
2972-
# Another event with a relation from third user.
2973-
res = self.helper.send_event(
2974-
room_id=self.room_id,
2975-
type=EventTypes.Message,
2976-
content={"msgtype": "m.text", "body": "Message 2"},
2977-
tok=self.tok,
2978-
)
2979-
self.event_id_2 = res["event_id"]
2980-
res = self.helper.send_event(
2981-
room_id=self.room_id,
2982-
type="m.reaction",
2983-
content={
2984-
"m.relates_to": {
2985-
"rel_type": RelationTypes.REFERENCE,
2986-
"event_id": self.event_id_2,
2987-
}
2988-
},
2989-
tok=self.third_tok,
2990-
)
2991-
self.event_id_reference = res["event_id"]
2992-
2993-
# An event with no relations.
2994-
res = self.helper.send_event(
2995-
room_id=self.room_id,
2996-
type=EventTypes.Message,
2997-
content={"msgtype": "m.text", "body": "No relations"},
2998-
tok=self.tok,
2999-
)
3000-
self.event_id_none = res["event_id"]
3001-
3002-
def _filter_messages(self, filter: JsonDict) -> List[JsonDict]:
2918+
class RelationsTestCase(PaginationTestCase):
2919+
def _filter_messages(self, filter: JsonDict) -> List[str]:
30032920
"""Make a request to /messages with a filter, returns the chunk of events."""
30042921
from_token = self.get_success(
30052922
self.from_token.to_string(self.hs.get_datastores().main)
@@ -3011,135 +2928,7 @@ def _filter_messages(self, filter: JsonDict) -> List[JsonDict]:
30112928
)
30122929
self.assertEqual(channel.code, HTTPStatus.OK, channel.result)
30132930

3014-
return channel.json_body["chunk"]
3015-
3016-
def test_filter_relation_senders(self) -> None:
3017-
# Messages which second user reacted to.
3018-
filter = {"related_by_senders": [self.second_user_id]}
3019-
chunk = self._filter_messages(filter)
3020-
self.assertEqual(len(chunk), 1, chunk)
3021-
self.assertEqual(chunk[0]["event_id"], self.event_id_1)
3022-
3023-
# Messages which third user reacted to.
3024-
filter = {"related_by_senders": [self.third_user_id]}
3025-
chunk = self._filter_messages(filter)
3026-
self.assertEqual(len(chunk), 1, chunk)
3027-
self.assertEqual(chunk[0]["event_id"], self.event_id_2)
3028-
3029-
# Messages which either user reacted to.
3030-
filter = {"related_by_senders": [self.second_user_id, self.third_user_id]}
3031-
chunk = self._filter_messages(filter)
3032-
self.assertEqual(len(chunk), 2, chunk)
3033-
self.assertCountEqual(
3034-
[c["event_id"] for c in chunk], [self.event_id_1, self.event_id_2]
3035-
)
3036-
3037-
def test_filter_relation_type(self) -> None:
3038-
# Messages which have annotations.
3039-
filter = {"related_by_rel_types": [RelationTypes.ANNOTATION]}
3040-
chunk = self._filter_messages(filter)
3041-
self.assertEqual(len(chunk), 1, chunk)
3042-
self.assertEqual(chunk[0]["event_id"], self.event_id_1)
3043-
3044-
# Messages which have references.
3045-
filter = {"related_by_rel_types": [RelationTypes.REFERENCE]}
3046-
chunk = self._filter_messages(filter)
3047-
self.assertEqual(len(chunk), 1, chunk)
3048-
self.assertEqual(chunk[0]["event_id"], self.event_id_2)
3049-
3050-
# Messages which have either annotations or references.
3051-
filter = {
3052-
"related_by_rel_types": [
3053-
RelationTypes.ANNOTATION,
3054-
RelationTypes.REFERENCE,
3055-
]
3056-
}
3057-
chunk = self._filter_messages(filter)
3058-
self.assertEqual(len(chunk), 2, chunk)
3059-
self.assertCountEqual(
3060-
[c["event_id"] for c in chunk], [self.event_id_1, self.event_id_2]
3061-
)
3062-
3063-
def test_filter_relation_senders_and_type(self) -> None:
3064-
# Messages which second user reacted to.
3065-
filter = {
3066-
"related_by_senders": [self.second_user_id],
3067-
"related_by_rel_types": [RelationTypes.ANNOTATION],
3068-
}
3069-
chunk = self._filter_messages(filter)
3070-
self.assertEqual(len(chunk), 1, chunk)
3071-
self.assertEqual(chunk[0]["event_id"], self.event_id_1)
3072-
3073-
def test_filter_rel_types(self) -> None:
3074-
# Messages which are annotations.
3075-
filter = {"org.matrix.msc3874.rel_types": [RelationTypes.ANNOTATION]}
3076-
chunk = self._filter_messages(filter)
3077-
self.assertEqual(len(chunk), 1, chunk)
3078-
self.assertEqual(chunk[0]["event_id"], self.event_id_annotation)
3079-
3080-
# Messages which are references.
3081-
filter = {"org.matrix.msc3874.rel_types": [RelationTypes.REFERENCE]}
3082-
chunk = self._filter_messages(filter)
3083-
self.assertEqual(len(chunk), 1, chunk)
3084-
self.assertEqual(chunk[0]["event_id"], self.event_id_reference)
3085-
3086-
# Messages which are either annotations or references.
3087-
filter = {
3088-
"org.matrix.msc3874.rel_types": [
3089-
RelationTypes.ANNOTATION,
3090-
RelationTypes.REFERENCE,
3091-
]
3092-
}
3093-
chunk = self._filter_messages(filter)
3094-
self.assertEqual(len(chunk), 2, chunk)
3095-
self.assertCountEqual(
3096-
[c["event_id"] for c in chunk],
3097-
[self.event_id_annotation, self.event_id_reference],
3098-
)
3099-
3100-
def test_filter_not_rel_types(self) -> None:
3101-
# Messages which are not annotations.
3102-
filter = {"org.matrix.msc3874.not_rel_types": [RelationTypes.ANNOTATION]}
3103-
chunk = self._filter_messages(filter)
3104-
self.assertEqual(len(chunk), 4, chunk)
3105-
event_ids = [ev["event_id"] for ev in chunk]
3106-
self.assertEqual(
3107-
event_ids,
3108-
[
3109-
self.event_id_1,
3110-
self.event_id_2,
3111-
self.event_id_reference,
3112-
self.event_id_none,
3113-
],
3114-
)
3115-
3116-
# Messages which are not references.
3117-
filter = {"org.matrix.msc3874.not_rel_types": [RelationTypes.REFERENCE]}
3118-
chunk = self._filter_messages(filter)
3119-
self.assertEqual(len(chunk), 4, chunk)
3120-
event_ids = [ev["event_id"] for ev in chunk]
3121-
self.assertEqual(
3122-
event_ids,
3123-
[
3124-
self.event_id_1,
3125-
self.event_id_annotation,
3126-
self.event_id_2,
3127-
self.event_id_none,
3128-
],
3129-
)
3130-
3131-
# Messages which are neither annotations or references.
3132-
filter = {
3133-
"org.matrix.msc3874.not_rel_types": [
3134-
RelationTypes.ANNOTATION,
3135-
RelationTypes.REFERENCE,
3136-
]
3137-
}
3138-
chunk = self._filter_messages(filter)
3139-
event_ids = [ev["event_id"] for ev in chunk]
3140-
self.assertEqual(
3141-
event_ids, [self.event_id_1, self.event_id_2, self.event_id_none]
3142-
)
2931+
return [ev["event_id"] for ev in channel.json_body["chunk"]]
31432932

31442933

31452934
class ContextTestCase(unittest.HomeserverTestCase):

0 commit comments

Comments
 (0)