def test_user_edit_post_no_change(client, logged_in_dummy_user): """Test posting to the user edit page and making no change""" # Do it once with fml_testing.mock_sends( UserUpdateV1({ "msg": { "agent": "dummy", "user": "******", "fields": [ 'timezone', 'locale', 'ircnick', 'github', 'gitlab', 'rhbz_mail', ], } })): result = client.post('/user/dummy/settings/profile/', data=POST_CONTENTS) assert result.status_code == 302 # Now do it again with fml_testing.mock_sends(): result = client.post('/user/dummy/settings/profile/', data=POST_CONTENTS) assert_form_generic_error(result, 'no modifications to be performed')
def test_field_error_unknown(client, post_data_step_1, mocker): """Register a user with fields that the server errors on, but it's unknown to us""" ipa_admin = mocker.patch("noggin.controller.registration.ipa_admin") ipa_admin.stageuser_add.side_effect = python_freeipa.exceptions.ValidationError( message="invalid 'unknown': this is invalid", code="4242") result = client.post('/', data=post_data_step_1) assert_form_generic_error( result, expected_message="invalid 'unknown': this is invalid")
def test_invalid_first_name(client, post_data_step_1, mocker): """Register a user with an invalid first name""" ipa_admin = mocker.patch("noggin.controller.registration.ipa_admin") ipa_admin.stageuser_add.side_effect = python_freeipa.exceptions.ValidationError( message="invalid first name", code="4242") post_data_step_1["register-firstname"] = "This \n is \n invalid" result = client.post('/', data=post_data_step_1) assert_form_generic_error(result, 'invalid first name')
def test_user_settings_keys_post_bad_request(client, logged_in_dummy_user): """Test handling of FreeIPA errors""" with mock.patch("noggin.security.ipa.Client.user_mod") as user_mod: user_mod.side_effect = python_freeipa.exceptions.BadRequest( message="something went wrong", code="4242") result = client.post('/user/dummy/settings/keys/', data=POST_CONTENTS_KEYS) assert_form_generic_error(result, 'something went wrong')
def test_generic_error(client, post_data_step_1, mocker): """Register a user with an unhandled error""" ipa_admin = mocker.patch("noggin.controller.registration.ipa_admin") ipa_admin.stageuser_add.side_effect = python_freeipa.exceptions.FreeIPAError( message="something went wrong", code="4242") result = client.post('/', data=post_data_step_1) assert_form_generic_error( result, 'An error occurred while creating the account, please try again.')
def test_user_settings_keys_post_no_change(client, logged_in_dummy_user): """Test posting to the user edit page and making no change""" # Do it once result = client.post('/user/dummy/settings/keys/', data=POST_CONTENTS_KEYS) assert result.status_code == 302 # Now do it again result = client.post('/user/dummy/settings/keys/', data=POST_CONTENTS_KEYS) assert_form_generic_error(result, 'no modifications to be performed')
def test_login_incorrect_password(client, dummy_user): """Test a incorrect password""" result = client.post( '/', data={ "login-username": "******", "login-password": "******", "login-submit": "1", }, follow_redirects=True, ) assert_form_generic_error(result, "Unauthorized: bad credentials.") assert "noggin_session" not in session assert "noggin_username" not in session
def test_otp_sync_invalid_codes(client, logged_in_dummy_user_with_otp): """Test synchronising OTP token with madeup codes""" result = client.post( '/otp/sync/', data={ "username": "******", "password": "******", "first_code": "123456", "second_code": "234567", }, follow_redirects=False, ) assert_form_generic_error( result, "The username, password or token codes are not correct.")
def test_user_settings_otp_add_invalid(client, logged_in_dummy_user): """Test failure when adding an otptoken""" with mock.patch("noggin.security.ipa.Client.otptoken_add") as method: method.side_effect = python_freeipa.exceptions.ValidationError( message={ "member": {"user": [("testuser", "something went wrong")], "group": []} }, code="4242", ) result = client.post( "/user/dummy/settings/otp/", data={"description": "pants token", "password": "******"}, ) assert_form_generic_error(result, expected_message="Cannot create the token.")
def test_login_cant_login(client): """The client library could not login""" with mock.patch("noggin.security.ipa.Client.login", lambda *x: None): result = client.post( '/', data={ "login-username": "******", "login-password": "******", "login-submit": "1", }, ) assert_form_generic_error(result, "Could not log in to the IPA server.") assert "noggin_session" not in session assert "noggin_username" not in session
def test_generic_activate_error(client, token_for_dummy_user, post_data_step_3, cleanup_dummy_user, mocker): """Activate the user with an unhandled error""" ipa_admin_activate = mocker.patch( "noggin.controller.registration.ipa_admin.stageuser_activate") ipa_admin_activate.side_effect = python_freeipa.exceptions.FreeIPAError( message="something went wrong", code="4242") with fml_testing.mock_sends(): result = client.post( f"/register/activate?token={token_for_dummy_user}", data=post_data_step_3) assert_form_generic_error( result, 'Something went wrong while creating your account, please try again later.', )
def test_change_post_generic_error( client, dummy_user, token_for_dummy_user, patched_lock_active, mocker ): logger = mocker.patch.object(current_app._get_current_object(), "logger") ipa_admin_mock = mocker.patch("noggin.controller.password.ipa_admin") # We need user_show to work, but make user_mod raise an exception. ipa_admin_mock.user_show.side_effect = ipa_admin.user_show ipa_admin_mock.user_mod.side_effect = python_freeipa.exceptions.FreeIPAError( message="something went wrong", code="4242" ) result = client.post( f'/forgot-password/change?token={token_for_dummy_user}', data={"password": "******", "password_confirm": "newpassword"}, ) assert_form_generic_error(result, 'Could not change password, please try again.') patched_lock_active["delete"].assert_not_called() logger.error.assert_called_once()
def test_reset_generic_error(client, mocker): """Reset password with an unhandled error""" client_mock = mocker.Mock() untouched_ipa_client = mocker.patch( "noggin.controller.password.untouched_ipa_client") untouched_ipa_client.return_value = client_mock client_mock.change_password.side_effect = python_freeipa.exceptions.FreeIPAError( message="something went wrong", code="4242") result = client.post( '/password-reset?username=dummy', data={ "current_password": "******", "password": "******", "password_confirm": "password", }, ) assert_form_generic_error(result, 'Could not change password.')
def test_otp_sync_rejected(client, logged_in_dummy_user_with_otp): """Test synchronising OTP token when freeipa rejects the request""" with mock.patch("requests.post") as method: method.return_value.status_code = 200 method.return_value.text = "Token sync rejected" result = client.post( '/otp/sync/', data={ "username": "******", "password": "******", "first_code": "123456", "second_code": "234567", }, follow_redirects=False, ) assert_form_generic_error( result, "The username, password or token codes are not correct.")
def test_login_generic_error(client): """Log in a user with an unhandled error""" with mock.patch( "noggin.controller.authentication.maybe_ipa_login") as ipa_login: ipa_login.side_effect = python_freeipa.exceptions.FreeIPAError( message="something went wrong", code="4242") result = client.post( '/', data={ "login-username": "******", "login-password": "******", "login-submit": "1", }, ) assert_form_generic_error(result, "Could not log in to the IPA server.") assert "noggin_session" not in session assert "noggin_username" not in session
def test_otp_sync_http_error(client, dummy_user_with_otp): """Test synchronising OTP token with mocked http error""" with mock.patch("noggin.controller.authentication.app.logger") as logger: with mock.patch("requests.sessions.Session.post") as method: method.side_effect = requests.exceptions.RequestException result = client.post( '/otp/sync/', data={ "username": "******", "password": "******", "first_code": "123456", "second_code": "234567", }, follow_redirects=False, ) logger.error.assert_called_once() assert_form_generic_error(result, "Something went wrong trying to sync OTP token.")
def test_otp_sync_http_error(client, logged_in_dummy_user_with_otp, mocker): """Test synchronising OTP token with mocked http error""" logger = mocker.patch.object(current_app._get_current_object(), "logger") method = mocker.patch("requests.sessions.Session.post") method.side_effect = requests.exceptions.RequestException result = client.post( '/otp/sync/', data={ "username": "******", "password": "******", "first_code": "123456", "second_code": "234567", }, follow_redirects=False, ) logger.error.assert_called_once() assert_form_generic_error( result, "Something went wrong trying to sync OTP token.")
def test_user_settings_keys_post_no_change(client, logged_in_dummy_user): """Test posting to the user edit page and making no change""" # Do it once with fml_testing.mock_sends( UserUpdateV1({ "msg": { "agent": "dummy", "user": "******", "fields": ['sshpubkeys'] } })): result = client.post('/user/dummy/settings/keys/', data=POST_CONTENTS_KEYS) assert result.status_code == 302 # Now do it again with fml_testing.mock_sends(): result = client.post('/user/dummy/settings/keys/', data=POST_CONTENTS_KEYS) assert_form_generic_error(result, 'no modifications to be performed')