|
35 | 35 | EventTypes, |
36 | 36 | Membership, |
37 | 37 | PublicRoomsFilterFields, |
38 | | - RelationTypes, |
39 | 38 | RoomTypes, |
40 | 39 | ) |
41 | 40 | from synapse.api.errors import Codes, HttpResponseException |
|
50 | 49 |
|
51 | 50 | from tests import unittest |
52 | 51 | from tests.http.server._base import make_request_with_cancellation_test |
| 52 | +from tests.storage.test_stream import PaginationTestCase |
53 | 53 | from tests.test_utils import make_awaitable |
54 | 54 |
|
55 | 55 | PATH_PREFIX = b"/_matrix/client/api/v1" |
@@ -2915,149 +2915,20 @@ def _send_labelled_messages_in_room(self) -> str: |
2915 | 2915 | return event_id |
2916 | 2916 |
|
2917 | 2917 |
|
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 | | - # An initial event with a relation from second user. |
2946 | | - res = self.helper.send_event( |
2947 | | - room_id=self.room_id, |
2948 | | - type=EventTypes.Message, |
2949 | | - content={"msgtype": "m.text", "body": "Message 1"}, |
2950 | | - tok=self.tok, |
2951 | | - ) |
2952 | | - self.event_id_1 = res["event_id"] |
2953 | | - self.helper.send_event( |
2954 | | - room_id=self.room_id, |
2955 | | - type="m.reaction", |
2956 | | - content={ |
2957 | | - "m.relates_to": { |
2958 | | - "rel_type": RelationTypes.ANNOTATION, |
2959 | | - "event_id": self.event_id_1, |
2960 | | - "key": "👍", |
2961 | | - } |
2962 | | - }, |
2963 | | - tok=self.second_tok, |
2964 | | - ) |
2965 | | - |
2966 | | - # Another event with a relation from third user. |
2967 | | - res = self.helper.send_event( |
2968 | | - room_id=self.room_id, |
2969 | | - type=EventTypes.Message, |
2970 | | - content={"msgtype": "m.text", "body": "Message 2"}, |
2971 | | - tok=self.tok, |
2972 | | - ) |
2973 | | - self.event_id_2 = res["event_id"] |
2974 | | - self.helper.send_event( |
2975 | | - room_id=self.room_id, |
2976 | | - type="m.reaction", |
2977 | | - content={ |
2978 | | - "m.relates_to": { |
2979 | | - "rel_type": RelationTypes.REFERENCE, |
2980 | | - "event_id": self.event_id_2, |
2981 | | - } |
2982 | | - }, |
2983 | | - tok=self.third_tok, |
2984 | | - ) |
2985 | | - |
2986 | | - # An event with no relations. |
2987 | | - self.helper.send_event( |
2988 | | - room_id=self.room_id, |
2989 | | - type=EventTypes.Message, |
2990 | | - content={"msgtype": "m.text", "body": "No relations"}, |
2991 | | - tok=self.tok, |
2992 | | - ) |
2993 | | - |
2994 | | - def _filter_messages(self, filter: JsonDict) -> List[JsonDict]: |
| 2918 | +class RelationsTestCase(PaginationTestCase): |
| 2919 | + def _filter_messages(self, filter: JsonDict) -> List[str]: |
2995 | 2920 | """Make a request to /messages with a filter, returns the chunk of events.""" |
| 2921 | + from_token = self.get_success( |
| 2922 | + self.from_token.to_string(self.hs.get_datastores().main) |
| 2923 | + ) |
2996 | 2924 | channel = self.make_request( |
2997 | 2925 | "GET", |
2998 | | - "/rooms/%s/messages?filter=%s&dir=b" % (self.room_id, json.dumps(filter)), |
| 2926 | + f"/rooms/{self.room_id}/messages?filter={json.dumps(filter)}&dir=f&from={from_token}", |
2999 | 2927 | access_token=self.tok, |
3000 | 2928 | ) |
3001 | 2929 | self.assertEqual(channel.code, HTTPStatus.OK, channel.result) |
3002 | 2930 |
|
3003 | | - return channel.json_body["chunk"] |
3004 | | - |
3005 | | - def test_filter_relation_senders(self) -> None: |
3006 | | - # Messages which second user reacted to. |
3007 | | - filter = {"related_by_senders": [self.second_user_id]} |
3008 | | - chunk = self._filter_messages(filter) |
3009 | | - self.assertEqual(len(chunk), 1, chunk) |
3010 | | - self.assertEqual(chunk[0]["event_id"], self.event_id_1) |
3011 | | - |
3012 | | - # Messages which third user reacted to. |
3013 | | - filter = {"related_by_senders": [self.third_user_id]} |
3014 | | - chunk = self._filter_messages(filter) |
3015 | | - self.assertEqual(len(chunk), 1, chunk) |
3016 | | - self.assertEqual(chunk[0]["event_id"], self.event_id_2) |
3017 | | - |
3018 | | - # Messages which either user reacted to. |
3019 | | - filter = {"related_by_senders": [self.second_user_id, self.third_user_id]} |
3020 | | - chunk = self._filter_messages(filter) |
3021 | | - self.assertEqual(len(chunk), 2, chunk) |
3022 | | - self.assertCountEqual( |
3023 | | - [c["event_id"] for c in chunk], [self.event_id_1, self.event_id_2] |
3024 | | - ) |
3025 | | - |
3026 | | - def test_filter_relation_type(self) -> None: |
3027 | | - # Messages which have annotations. |
3028 | | - filter = {"related_by_rel_types": [RelationTypes.ANNOTATION]} |
3029 | | - chunk = self._filter_messages(filter) |
3030 | | - self.assertEqual(len(chunk), 1, chunk) |
3031 | | - self.assertEqual(chunk[0]["event_id"], self.event_id_1) |
3032 | | - |
3033 | | - # Messages which have references. |
3034 | | - filter = {"related_by_rel_types": [RelationTypes.REFERENCE]} |
3035 | | - chunk = self._filter_messages(filter) |
3036 | | - self.assertEqual(len(chunk), 1, chunk) |
3037 | | - self.assertEqual(chunk[0]["event_id"], self.event_id_2) |
3038 | | - |
3039 | | - # Messages which have either annotations or references. |
3040 | | - filter = { |
3041 | | - "related_by_rel_types": [ |
3042 | | - RelationTypes.ANNOTATION, |
3043 | | - RelationTypes.REFERENCE, |
3044 | | - ] |
3045 | | - } |
3046 | | - chunk = self._filter_messages(filter) |
3047 | | - self.assertEqual(len(chunk), 2, chunk) |
3048 | | - self.assertCountEqual( |
3049 | | - [c["event_id"] for c in chunk], [self.event_id_1, self.event_id_2] |
3050 | | - ) |
3051 | | - |
3052 | | - def test_filter_relation_senders_and_type(self) -> None: |
3053 | | - # Messages which second user reacted to. |
3054 | | - filter = { |
3055 | | - "related_by_senders": [self.second_user_id], |
3056 | | - "related_by_rel_types": [RelationTypes.ANNOTATION], |
3057 | | - } |
3058 | | - chunk = self._filter_messages(filter) |
3059 | | - self.assertEqual(len(chunk), 1, chunk) |
3060 | | - self.assertEqual(chunk[0]["event_id"], self.event_id_1) |
| 2931 | + return [ev["event_id"] for ev in channel.json_body["chunk"]] |
3061 | 2932 |
|
3062 | 2933 |
|
3063 | 2934 | class ContextTestCase(unittest.HomeserverTestCase): |
|
0 commit comments