class LoginTest(TestCase): def setUp(self): super().setUp() self.view = LoginView() self.user = User.objects.create() self.authenticate_mock = self.patch('users.views.authenticate') self.request_mock = Mock(META={ 'CSRF_COOKIE': 'abcd', 'REMOTE_ADDR': '127.0.0.1' }) self.patch('users.views.login') def test_success(self): self.authenticate_mock.return_value = self.user response = self.view.login(self.request_mock, AnonymousUser(), { 'username': '******', 'password': '******' }) self.assertEqual(200, response.status_code) def test_ratelimited(self): with override_settings(RATELIMIT_ENABLE=True): self.authenticate_mock.return_value = None for i in range(11): self.assertRaises( AuthenticationFailed, lambda: self.view.login( self.request_mock, AnonymousUser(), { 'username': '******', 'password': '******' })) self.authenticate_mock.return_value = self.user self.assertRaises( Ratelimited, lambda: self.view.login(self.request_mock, AnonymousUser(), { 'username': '******', 'password': '******' }))