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,91 +2915,8 @@ 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
- # 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 ]:
3003
2920
"""Make a request to /messages with a filter, returns the chunk of events."""
3004
2921
from_token = self .get_success (
3005
2922
self .from_token .to_string (self .hs .get_datastores ().main )
@@ -3011,135 +2928,7 @@ def _filter_messages(self, filter: JsonDict) -> List[JsonDict]:
3011
2928
)
3012
2929
self .assertEqual (channel .code , HTTPStatus .OK , channel .result )
3013
2930
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" ]]
3143
2932
3144
2933
3145
2934
class ContextTestCase (unittest .HomeserverTestCase ):
0 commit comments