1
+ # Copyright 2022 The Matrix.org Foundation C.I.C.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
1
15
from unittest .mock import patch
2
16
17
+ from twisted .test .proto_helpers import MemoryReactor
18
+
3
19
from synapse .api .room_versions import RoomVersions
4
20
from synapse .push .bulk_push_rule_evaluator import BulkPushRuleEvaluator
5
21
from synapse .rest import admin
6
22
from synapse .rest .client import login , register , room
23
+ from synapse .server import HomeServer
7
24
from synapse .types import create_requester
25
+ from synapse .util import Clock
8
26
9
27
from tests .test_utils import simple_async_mock
10
28
from tests .unittest import HomeserverTestCase , override_config
@@ -19,53 +37,58 @@ class TestBulkPushRuleEvaluator(HomeserverTestCase):
19
37
register .register_servlets ,
20
38
]
21
39
40
+ def prepare (
41
+ self , reactor : MemoryReactor , clock : Clock , homeserver : HomeServer
42
+ ) -> None :
43
+ # Create a new user and room.
44
+ self .alice = self .register_user ("alice" , "pass" )
45
+ self .token = self .login (self .alice , "pass" )
46
+ self .requester = create_requester (self .alice )
47
+
48
+ self .room_id = self .helper .create_room_as (
49
+ self .alice , room_version = RoomVersions .V9 .identifier , tok = self .token
50
+ )
51
+
52
+ self .event_creation_handler = self .hs .get_event_creation_handler ()
53
+
22
54
def test_action_for_event_by_user_handles_noninteger_power_levels (self ) -> None :
23
55
"""We should convert floats and strings to integers before passing to Rust.
24
56
25
57
Reproduces #14060.
26
58
27
59
A lack of validation: the gift that keeps on giving.
28
60
"""
29
- # Create a new user and room.
30
- alice = self .register_user ("alice" , "pass" )
31
- token = self .login (alice , "pass" )
32
-
33
- room_id = self .helper .create_room_as (
34
- alice , room_version = RoomVersions .V9 .identifier , tok = token
35
- )
36
61
37
62
# Alter the power levels in that room to include stringy and floaty levels.
38
63
# We need to suppress the validation logic or else it will reject these dodgy
39
64
# values. (Presumably this validation was not always present.)
40
- event_creation_handler = self .hs .get_event_creation_handler ()
41
- requester = create_requester (alice )
42
65
with patch ("synapse.events.validator.validate_canonicaljson" ), patch (
43
66
"synapse.events.validator.jsonschema.validate"
44
67
):
45
68
self .helper .send_state (
46
- room_id ,
69
+ self . room_id ,
47
70
"m.room.power_levels" ,
48
71
{
49
- "users" : {alice : "100" }, # stringy
72
+ "users" : {self . alice : "100" }, # stringy
50
73
"notifications" : {"room" : 100.0 }, # float
51
74
},
52
- token ,
75
+ self . token ,
53
76
state_key = "" ,
54
77
)
55
78
56
79
# Create a new message event, and try to evaluate it under the dodgy
57
80
# power level event.
58
81
event , context = self .get_success (
59
- event_creation_handler .create_event (
60
- requester ,
82
+ self . event_creation_handler .create_event (
83
+ self . requester ,
61
84
{
62
85
"type" : "m.room.message" ,
63
- "room_id" : room_id ,
86
+ "room_id" : self . room_id ,
64
87
"content" : {
65
88
"msgtype" : "m.text" ,
66
89
"body" : "helo" ,
67
90
},
68
- "sender" : alice ,
91
+ "sender" : self . alice ,
69
92
},
70
93
)
71
94
)
@@ -77,39 +100,29 @@ def test_action_for_event_by_user_handles_noninteger_power_levels(self) -> None:
77
100
@override_config ({"push" : {"enabled" : False }})
78
101
def test_action_for_event_by_user_disabled_by_config (self ) -> None :
79
102
"""Ensure that push rules are not calculated when disabled in the config"""
80
- # Create a new user and room.
81
- alice = self .register_user ("alice" , "pass" )
82
- token = self .login (alice , "pass" )
83
103
84
- room_id = self .helper .create_room_as (
85
- alice , room_version = RoomVersions .V9 .identifier , tok = token
86
- )
87
-
88
- # Alter the power levels in that room to include stringy and floaty levels.
89
- # We need to suppress the validation logic or else it will reject these dodgy
90
- # values. (Presumably this validation was not always present.)
91
- event_creation_handler = self .hs .get_event_creation_handler ()
92
- requester = create_requester (alice )
93
-
94
- # Create a new message event, and try to evaluate it under the dodgy
95
- # power level event.
104
+ # Create a new message event which should cause a notification.
96
105
event , context = self .get_success (
97
- event_creation_handler .create_event (
98
- requester ,
106
+ self . event_creation_handler .create_event (
107
+ self . requester ,
99
108
{
100
109
"type" : "m.room.message" ,
101
- "room_id" : room_id ,
110
+ "room_id" : self . room_id ,
102
111
"content" : {
103
112
"msgtype" : "m.text" ,
104
113
"body" : "helo" ,
105
114
},
106
- "sender" : alice ,
115
+ "sender" : self . alice ,
107
116
},
108
117
)
109
118
)
110
119
111
120
bulk_evaluator = BulkPushRuleEvaluator (self .hs )
121
+ # Mock the method which calculates push rules -- we do this instead of
122
+ # e.g. checking the results in the database because we want to ensure
123
+ # that code isn't even running.
112
124
bulk_evaluator ._action_for_event_by_user = simple_async_mock () # type: ignore[assignment]
113
- # should not raise
125
+
126
+ # Ensure no actions are generated!
114
127
self .get_success (bulk_evaluator .action_for_events_by_user ([(event , context )]))
115
128
bulk_evaluator ._action_for_event_by_user .assert_not_called ()
0 commit comments