@@ -247,6 +247,49 @@ def test_user_can_access_view(self):
247247 self .assertContains (response , 'Create Targets' )
248248
249249
250+ class TestAuthStrategyMiddleware (TestCase ):
251+ login_url = '/accounts/login/'
252+
253+ @override_settings (AUTH_STRATEGY = 'LOCKED' , OPEN_URLS = [])
254+ def test_locked_unauthenticated_request_redirects_to_login (self ):
255+ # Raise403Middleware converts the 403 from AuthStrategyMiddleware to a redirect
256+ response = self .client .get (reverse ('tom_targets:list' ))
257+ self .assertRedirects (
258+ response , self .login_url + '?next=' + reverse ('tom_targets:list' ), status_code = 302
259+ )
260+
261+ @override_settings (AUTH_STRATEGY = 'LOCKED' , OPEN_URLS = ['/accounts/reset/*/' ])
262+ def test_locked_password_reset_wildcard_matches_uid_token (self ):
263+ # /accounts/reset/abc123xyz/ should match the wildcard
264+ response = self .client .get ('/accounts/reset/abc123xyz/foobarfoo/' )
265+ self .assertNotEqual (response .status_code , 302 )
266+
267+ @override_settings (AUTH_STRATEGY = 'LOCKED' , OPEN_URLS = ['/accounts/reset/*/' ])
268+ def test_locked_password_reset_wildcard_does_not_match_unrelated_path (self ):
269+ # /accounts/profile/ should not match /accounts/reset/*/
270+ response = self .client .get ('/accounts/profile/' )
271+ self .assertRedirects (
272+ response , self .login_url + '?next=/accounts/profile/' , status_code = 302
273+ )
274+
275+ @override_settings (AUTH_STRATEGY = 'LOCKED' , OPEN_URLS = [])
276+ def test_locked_login_url_always_open (self ):
277+ response = self .client .get (reverse ('login' ))
278+ self .assertNotEqual (response .status_code , 302 )
279+
280+ @override_settings (AUTH_STRATEGY = 'LOCKED' , OPEN_URLS = [])
281+ def test_locked_authenticated_user_allowed (self ):
282+ user = User .objects .create_user (username = 'testuser' , password = 'password' )
283+ self .client .force_login (user )
284+ response = self .client .get (reverse ('tom_targets:list' ))
285+ self .assertEqual (response .status_code , 200 )
286+
287+ @override_settings (AUTH_STRATEGY = 'READ_ONLY' , OPEN_URLS = [])
288+ def test_read_only_unauthenticated_allowed (self ):
289+ response = self .client .get (reverse ('tom_targets:list' ))
290+ self .assertEqual (response .status_code , 200 )
291+
292+
250293class CommentDeleteViewTest (TestCase ):
251294 def setUp (self ):
252295 self .site = Site .objects .get_current ()
0 commit comments