示例#1
0
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')
示例#2
0
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")
示例#3
0
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')
示例#4
0
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')
示例#5
0
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.')
示例#6
0
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')
示例#7
0
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
示例#8
0
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.")
示例#9
0
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.")
示例#10
0
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
示例#11
0
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()
示例#13
0
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.')
示例#14
0
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.")
示例#15
0
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
示例#16
0
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.")
示例#17
0
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.")
示例#18
0
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')