mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-11 09:27:56 -04:00
Merge pull request #725 from alphagov/update-user-profile-endpoints
Refactor saving user profile
This commit is contained in:
@@ -7,12 +7,13 @@ import pytest
|
||||
|
||||
from app.dao.users_dao import (
|
||||
save_model_user,
|
||||
get_model_users,
|
||||
save_user_attribute,
|
||||
get_user_by_id,
|
||||
delete_model_user,
|
||||
increment_failed_login_count,
|
||||
reset_failed_login_count,
|
||||
get_user_by_email,
|
||||
delete_codes_older_created_more_than_a_day_ago
|
||||
delete_codes_older_created_more_than_a_day_ago,
|
||||
)
|
||||
|
||||
from tests.app.conftest import sample_user as create_sample_user
|
||||
@@ -37,13 +38,13 @@ def test_create_user(notify_api, notify_db, notify_db_session):
|
||||
|
||||
def test_get_all_users(notify_api, notify_db, notify_db_session, sample_user):
|
||||
assert User.query.count() == 1
|
||||
assert len(get_model_users()) == 1
|
||||
assert len(get_user_by_id()) == 1
|
||||
email = "another.notify@digital.cabinet-office.gov.uk"
|
||||
another_user = create_sample_user(notify_db,
|
||||
notify_db_session,
|
||||
email=email)
|
||||
assert User.query.count() == 2
|
||||
assert len(get_model_users()) == 2
|
||||
assert len(get_user_by_id()) == 2
|
||||
|
||||
|
||||
def test_get_user(notify_api, notify_db, notify_db_session):
|
||||
@@ -51,23 +52,20 @@ def test_get_user(notify_api, notify_db, notify_db_session):
|
||||
another_user = create_sample_user(notify_db,
|
||||
notify_db_session,
|
||||
email=email)
|
||||
assert get_model_users(user_id=another_user.id).email_address == email
|
||||
assert get_user_by_id(user_id=another_user.id).email_address == email
|
||||
|
||||
|
||||
def test_get_user_not_exists(notify_api, notify_db, notify_db_session, fake_uuid):
|
||||
try:
|
||||
get_model_users(user_id=fake_uuid)
|
||||
get_user_by_id(user_id=fake_uuid)
|
||||
pytest.fail("NoResultFound exception not thrown.")
|
||||
except NoResultFound as e:
|
||||
pass
|
||||
|
||||
|
||||
def test_get_user_invalid_id(notify_api, notify_db, notify_db_session):
|
||||
try:
|
||||
get_model_users(user_id="blah")
|
||||
pytest.fail("DataError exception not thrown.")
|
||||
except DataError:
|
||||
pass
|
||||
with pytest.raises(DataError):
|
||||
get_user_by_id(user_id="blah")
|
||||
|
||||
|
||||
def test_delete_users(notify_api, notify_db, notify_db_session, sample_user):
|
||||
@@ -131,3 +129,17 @@ def make_verify_code(user, age=timedelta(hours=0), code="12335"):
|
||||
)
|
||||
db.session.add(verify_code)
|
||||
db.session.commit()
|
||||
|
||||
|
||||
@pytest.mark.parametrize('user_attribute, user_value', [
|
||||
('name', 'New User'),
|
||||
('email_address', 'newuser@mail.com'),
|
||||
('mobile_number', '+4407700900460')
|
||||
])
|
||||
def test_update_user_attribute(client, sample_user, user_attribute, user_value):
|
||||
assert getattr(sample_user, user_attribute) != user_value
|
||||
update_dict = {
|
||||
user_attribute: user_value
|
||||
}
|
||||
save_user_attribute(sample_user, update_dict)
|
||||
assert getattr(sample_user, user_attribute) == user_value
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
import pytest
|
||||
|
||||
from marshmallow import ValidationError
|
||||
|
||||
|
||||
def test_job_schema_doesnt_return_notifications(sample_notification_with_job):
|
||||
from app.schemas import job_schema
|
||||
|
||||
@@ -22,3 +27,51 @@ def test_notification_schema_adds_api_key_name(sample_notification_with_api_key)
|
||||
|
||||
data = notification_with_template_schema.dump(sample_notification_with_api_key).data
|
||||
assert data['key_name'] == 'Test key'
|
||||
|
||||
|
||||
@pytest.mark.parametrize('user_attribute, user_value', [
|
||||
('name', 'New User'),
|
||||
('email_address', 'newuser@mail.com'),
|
||||
('mobile_number', '+4407700900460')
|
||||
])
|
||||
def test_user_update_schema_accepts_valid_attribute_pairs(user_attribute, user_value):
|
||||
update_dict = {
|
||||
user_attribute: user_value
|
||||
}
|
||||
from app.schemas import user_update_schema_load_json
|
||||
|
||||
data, errors = user_update_schema_load_json.load(update_dict)
|
||||
assert not errors
|
||||
|
||||
|
||||
@pytest.mark.parametrize('user_attribute, user_value', [
|
||||
('name', None),
|
||||
('name', ''),
|
||||
('email_address', 'bademail@...com'),
|
||||
('mobile_number', '+44077009')
|
||||
])
|
||||
def test_user_update_schema_rejects_invalid_attribute_pairs(user_attribute, user_value):
|
||||
from app.schemas import user_update_schema_load_json
|
||||
update_dict = {
|
||||
user_attribute: user_value
|
||||
}
|
||||
|
||||
with pytest.raises(ValidationError):
|
||||
data, errors = user_update_schema_load_json.load(update_dict)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('user_attribute', [
|
||||
'id', 'updated_at', 'created_at', 'user_to_service',
|
||||
'_password', 'verify_codes', 'logged_in_at', 'password_changed_at',
|
||||
'failed_login_count', 'state', 'platform_admin'
|
||||
])
|
||||
def test_user_update_schema_rejects_disallowed_attribute_keys(user_attribute):
|
||||
update_dict = {
|
||||
user_attribute: 'not important'
|
||||
}
|
||||
from app.schemas import user_update_schema_load_json
|
||||
|
||||
with pytest.raises(ValidationError) as excinfo:
|
||||
data, errors = user_update_schema_load_json.load(update_dict)
|
||||
|
||||
assert excinfo.value.messages['_schema'][0] == 'Unknown field name {}'.format(user_attribute)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import json
|
||||
import pytest
|
||||
|
||||
from flask import url_for, current_app
|
||||
from freezegun import freeze_time
|
||||
@@ -180,6 +181,29 @@ def test_put_user(notify_api, notify_db, notify_db_session, sample_service):
|
||||
assert sorted(expected_permissions) == sorted(fetched['permissions'][str(sample_service.id)])
|
||||
|
||||
|
||||
@pytest.mark.parametrize('user_attribute, user_value', [
|
||||
('name', 'New User'),
|
||||
('email_address', 'newuser@mail.com'),
|
||||
('mobile_number', '+4407700900460')
|
||||
])
|
||||
def test_post_user_attribute(client, sample_user, user_attribute, user_value):
|
||||
assert getattr(sample_user, user_attribute) != user_value
|
||||
update_dict = {
|
||||
user_attribute: user_value
|
||||
}
|
||||
auth_header = create_authorization_header()
|
||||
headers = [('Content-Type', 'application/json'), auth_header]
|
||||
|
||||
resp = client.post(
|
||||
url_for('user.update_user_attribute', user_id=sample_user.id),
|
||||
data=json.dumps(update_dict),
|
||||
headers=headers)
|
||||
|
||||
assert resp.status_code == 200
|
||||
json_resp = json.loads(resp.get_data(as_text=True))
|
||||
assert json_resp['data'][user_attribute] == user_value
|
||||
|
||||
|
||||
def test_put_user_update_password(notify_api,
|
||||
notify_db,
|
||||
notify_db_session,
|
||||
|
||||
Reference in New Issue
Block a user