def test_login_raises_ValidationFailure_on_ValidationFailure( self, invalid_form, pyramid_request): pyramid_request.json_body = {} controller = views.AjaxAuthController(pyramid_request) controller.form = invalid_form({'password': '******'}) with pytest.raises(deform.ValidationFailure) as exc_info: controller.login() assert exc_info.value.error.asdict() == {'password': '******'}
def test_login_returns_status_okay_when_validation_succeeds( self, factories, form_validating_to, pyramid_request): pyramid_request.json_body = {} controller = views.AjaxAuthController(pyramid_request) controller.form = form_validating_to( {'user': factories.User(username='******')}) result = controller.login() assert result['status'] == 'okay'
def test_login_raises_JSONError_on_non_object_json(self, pyramid_request): pyramid_request.authenticated_user = mock.Mock(groups=[]) pyramid_request.json_body = 'foo' controller = views.AjaxAuthController(pyramid_request) expected_message = 'Request JSON body must have a top-level object' with pytest.raises(accounts.JSONError) as exc_info: controller.login() assert exc_info.value.message == expected_message
def test_login_raises_JSONError_on_non_json_body(self, pyramid_request): type(pyramid_request).json_body = {} with mock.patch.object(type(pyramid_request), 'json_body', new_callable=mock.PropertyMock) as json_body: json_body.side_effect = ValueError() controller = views.AjaxAuthController(pyramid_request) with pytest.raises(accounts.JSONError) as exc_info: controller.login() assert exc_info.value.message.startswith( 'Could not parse request body as JSON: ')
def test_login_converts_non_string_passwords_to_strings(self, pyramid_csrf_request): for input_, expected_output in ((None, ''), (23, '23'), (True, 'True')): pyramid_csrf_request.json_body = {'username': '******', 'password': input_} controller = views.AjaxAuthController(pyramid_csrf_request) controller.form.validate = mock.Mock( return_value={'user': mock.Mock()}) controller.login() assert controller.form.validate.called pstruct = controller.form.validate.call_args[0][0] assert sorted(pstruct) == sorted([('username', 'user'), ('password', expected_output)])
def test_logout_returns_status_okay(self, pyramid_request): result = views.AjaxAuthController(pyramid_request).logout() assert result['status'] == 'okay'