1616
1717from synapse .api .auth import Auth
1818from synapse .api .constants import UserTypes
19- from synapse .api .errors import Codes , ResourceLimitError , SynapseError
19+ from synapse .api .errors import (
20+ CodeMessageException ,
21+ Codes ,
22+ ResourceLimitError ,
23+ SynapseError ,
24+ )
2025from synapse .events .spamcheck import load_legacy_spam_checkers
2126from synapse .spam_checker_api import RegistrationBehaviour
2227from synapse .types import RoomAlias , RoomID , UserID , create_requester
@@ -120,14 +125,24 @@ def make_homeserver(self, reactor, clock):
120125 hs_config = self .default_config ()
121126
122127 # some of the tests rely on us having a user consent version
123- hs_config ["user_consent" ] = {
124- "version" : "test_consent_version" ,
125- "template_dir" : "." ,
126- }
128+ hs_config .setdefault ("user_consent" , {}).update (
129+ {
130+ "version" : "test_consent_version" ,
131+ "template_dir" : "." ,
132+ }
133+ )
127134 hs_config ["max_mau_value" ] = 50
128135 hs_config ["limit_usage_by_mau" ] = True
129136
130- hs = self .setup_test_homeserver (config = hs_config )
137+ # Don't attempt to reach out over federation.
138+ self .mock_federation_client = Mock ()
139+ self .mock_federation_client .make_query .side_effect = CodeMessageException (
140+ 500 , ""
141+ )
142+
143+ hs = self .setup_test_homeserver (
144+ config = hs_config , federation_client = self .mock_federation_client
145+ )
131146
132147 load_legacy_spam_checkers (hs )
133148
@@ -138,9 +153,6 @@ def make_homeserver(self, reactor, clock):
138153 return hs
139154
140155 def prepare (self , reactor , clock , hs ):
141- self .mock_distributor = Mock ()
142- self .mock_distributor .declare ("registered_user" )
143- self .mock_captcha_client = Mock ()
144156 self .handler = self .hs .get_registration_handler ()
145157 self .store = self .hs .get_datastore ()
146158 self .lots_of_users = 100
@@ -174,21 +186,21 @@ def test_if_user_exists(self):
174186 self .assertEquals (result_user_id , user_id )
175187 self .assertTrue (result_token is not None )
176188
189+ @override_config ({"limit_usage_by_mau" : False })
177190 def test_mau_limits_when_disabled (self ):
178- self .hs .config .server .limit_usage_by_mau = False
179191 # Ensure does not throw exception
180192 self .get_success (self .get_or_create_user (self .requester , "a" , "display_name" ))
181193
194+ @override_config ({"limit_usage_by_mau" : True })
182195 def test_get_or_create_user_mau_not_blocked (self ):
183- self .hs .config .server .limit_usage_by_mau = True
184196 self .store .count_monthly_users = Mock (
185197 return_value = make_awaitable (self .hs .config .server .max_mau_value - 1 )
186198 )
187199 # Ensure does not throw exception
188200 self .get_success (self .get_or_create_user (self .requester , "c" , "User" ))
189201
202+ @override_config ({"limit_usage_by_mau" : True })
190203 def test_get_or_create_user_mau_blocked (self ):
191- self .hs .config .server .limit_usage_by_mau = True
192204 self .store .get_monthly_active_count = Mock (
193205 return_value = make_awaitable (self .lots_of_users )
194206 )
@@ -205,8 +217,8 @@ def test_get_or_create_user_mau_blocked(self):
205217 ResourceLimitError ,
206218 )
207219
220+ @override_config ({"limit_usage_by_mau" : True })
208221 def test_register_mau_blocked (self ):
209- self .hs .config .server .limit_usage_by_mau = True
210222 self .store .get_monthly_active_count = Mock (
211223 return_value = make_awaitable (self .lots_of_users )
212224 )
@@ -221,10 +233,10 @@ def test_register_mau_blocked(self):
221233 self .handler .register_user (localpart = "local_part" ), ResourceLimitError
222234 )
223235
236+ @override_config (
237+ {"auto_join_rooms" : ["#room:test" ], "auto_join_rooms_for_guests" : False }
238+ )
224239 def test_auto_join_rooms_for_guests (self ):
225- room_alias_str = "#room:test"
226- self .hs .config .auto_join_rooms = [room_alias_str ]
227- self .hs .config .auto_join_rooms_for_guests = False
228240 user_id = self .get_success (
229241 self .handler .register_user (localpart = "jeff" , make_guest = True ),
230242 )
@@ -243,34 +255,33 @@ def test_auto_create_auto_join_rooms(self):
243255 self .assertTrue (room_id ["room_id" ] in rooms )
244256 self .assertEqual (len (rooms ), 1 )
245257
258+ @override_config ({"auto_join_rooms" : []})
246259 def test_auto_create_auto_join_rooms_with_no_rooms (self ):
247- self .hs .config .auto_join_rooms = []
248260 frank = UserID .from_string ("@frank:test" )
249261 user_id = self .get_success (self .handler .register_user (frank .localpart ))
250262 self .assertEqual (user_id , frank .to_string ())
251263 rooms = self .get_success (self .store .get_rooms_for_user (user_id ))
252264 self .assertEqual (len (rooms ), 0 )
253265
266+ @override_config ({"auto_join_rooms" : ["#room:another" ]})
254267 def test_auto_create_auto_join_where_room_is_another_domain (self ):
255- self .hs .config .auto_join_rooms = ["#room:another" ]
256268 frank = UserID .from_string ("@frank:test" )
257269 user_id = self .get_success (self .handler .register_user (frank .localpart ))
258270 self .assertEqual (user_id , frank .to_string ())
259271 rooms = self .get_success (self .store .get_rooms_for_user (user_id ))
260272 self .assertEqual (len (rooms ), 0 )
261273
274+ @override_config (
275+ {"auto_join_rooms" : ["#room:test" ], "autocreate_auto_join_rooms" : False }
276+ )
262277 def test_auto_create_auto_join_where_auto_create_is_false (self ):
263- self .hs .config .autocreate_auto_join_rooms = False
264- room_alias_str = "#room:test"
265- self .hs .config .auto_join_rooms = [room_alias_str ]
266278 user_id = self .get_success (self .handler .register_user (localpart = "jeff" ))
267279 rooms = self .get_success (self .store .get_rooms_for_user (user_id ))
268280 self .assertEqual (len (rooms ), 0 )
269281
282+ @override_config ({"auto_join_rooms" : ["#room:test" ]})
270283 def test_auto_create_auto_join_rooms_when_user_is_not_a_real_user (self ):
271284 room_alias_str = "#room:test"
272- self .hs .config .auto_join_rooms = [room_alias_str ]
273-
274285 self .store .is_real_user = Mock (return_value = make_awaitable (False ))
275286 user_id = self .get_success (self .handler .register_user (localpart = "support" ))
276287 rooms = self .get_success (self .store .get_rooms_for_user (user_id ))
@@ -294,10 +305,8 @@ def test_auto_create_auto_join_rooms_when_user_is_the_first_real_user(self):
294305 self .assertTrue (room_id ["room_id" ] in rooms )
295306 self .assertEqual (len (rooms ), 1 )
296307
308+ @override_config ({"auto_join_rooms" : ["#room:test" ]})
297309 def test_auto_create_auto_join_rooms_when_user_is_not_the_first_real_user (self ):
298- room_alias_str = "#room:test"
299- self .hs .config .auto_join_rooms = [room_alias_str ]
300-
301310 self .store .count_real_users = Mock (return_value = make_awaitable (2 ))
302311 self .store .is_real_user = Mock (return_value = make_awaitable (True ))
303312 user_id = self .get_success (self .handler .register_user (localpart = "real" ))
@@ -510,6 +519,17 @@ def test_auto_create_auto_join_room_preset_invalid_permissions(self):
510519 self .assertEqual (rooms , set ())
511520 self .assertEqual (invited_rooms , [])
512521
522+ @override_config (
523+ {
524+ "user_consent" : {
525+ "block_events_error" : "Error" ,
526+ "require_at_registration" : True ,
527+ },
528+ "form_secret" : "53cr3t" ,
529+ "public_baseurl" : "http://test" ,
530+ "auto_join_rooms" : ["#room:test" ],
531+ },
532+ )
513533 def test_auto_create_auto_join_where_no_consent (self ):
514534 """Test to ensure that the first user is not auto-joined to a room if
515535 they have not given general consent.
@@ -521,25 +541,20 @@ def test_auto_create_auto_join_where_no_consent(self):
521541 # * The server is configured to auto-join to a room
522542 # (and autocreate if necessary)
523543
524- event_creation_handler = self .hs .get_event_creation_handler ()
525- # (Messing with the internals of event_creation_handler is fragile
526- # but can't see a better way to do this. One option could be to subclass
527- # the test with custom config.)
528- event_creation_handler ._block_events_without_consent_error = "Error"
529- event_creation_handler ._consent_uri_builder = Mock ()
530- room_alias_str = "#room:test"
531- self .hs .config .auto_join_rooms = [room_alias_str ]
532-
533544 # When:-
534- # * the user is registered and post consent actions are called
545+ # * the user is registered
535546 user_id = self .get_success (self .handler .register_user (localpart = "jeff" ))
536- self .get_success (self .handler .post_consent_actions (user_id ))
537547
538548 # Then:-
539549 # * Ensure that they have not been joined to the room
540550 rooms = self .get_success (self .store .get_rooms_for_user (user_id ))
541551 self .assertEqual (len (rooms ), 0 )
542552
553+ # The user provides consent; ensure they are now in the rooms.
554+ self .get_success (self .handler .post_consent_actions (user_id ))
555+ rooms = self .get_success (self .store .get_rooms_for_user (user_id ))
556+ self .assertEqual (len (rooms ), 1 )
557+
543558 def test_register_support_user (self ):
544559 user_id = self .get_success (
545560 self .handler .register_user (localpart = "user" , user_type = UserTypes .SUPPORT )
0 commit comments