From ec7504fb20722df1928f4cac2de2d5b0a12b48a9 Mon Sep 17 00:00:00 2001 From: dandds Date: Mon, 15 Oct 2018 13:17:47 -0400 Subject: [PATCH] add update method to Users repo --- atst/domain/users.py | 28 ++++++++++++++++++++++++++-- templates/base_public.html | 2 +- tests/domain/test_users.py | 24 ++++++++++++++++++------ 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/atst/domain/users.py b/atst/domain/users.py index 3728c04f..c67c8cbd 100644 --- a/atst/domain/users.py +++ b/atst/domain/users.py @@ -5,7 +5,7 @@ from atst.database import db from atst.models import User from .roles import Roles -from .exceptions import NotFoundError, AlreadyExistsError +from .exceptions import NotFoundError, AlreadyExistsError, UnauthorizedError class Users(object): @@ -53,7 +53,7 @@ class Users(object): return user @classmethod - def update(cls, user_id, atat_role_name): + def update_role(cls, user_id, atat_role_name): user = Users.get(user_id) atat_role = Roles.get(atat_role_name) @@ -63,3 +63,27 @@ class Users(object): db.session.commit() return user + + _UPDATEABLE_ATTRS = { + "first_name", + "last_name", + "email", + "phone_number", + "service_branch", + "citizenship", + "designation", + "date_latest_training", + } + + @classmethod + def update(cls, user, user_delta): + if not set(user_delta.keys()).issubset(Users._UPDATEABLE_ATTRS): + raise UnauthorizedError(user, "update DOD ID") + + for key, value in user_delta.items(): + setattr(user, key, value) + + db.session.add(user) + db.session.commit() + + return user diff --git a/templates/base_public.html b/templates/base_public.html index 006b04e5..f444dff8 100644 --- a/templates/base_public.html +++ b/templates/base_public.html @@ -26,7 +26,7 @@ {% if g.current_user %} - + {{ g.current_user.first_name + " " + g.current_user.last_name }} {{ Icon('avatar', classes='topbar__link-icon') }} diff --git a/tests/domain/test_users.py b/tests/domain/test_users.py index 145e8f93..51cfaaac 100644 --- a/tests/domain/test_users.py +++ b/tests/domain/test_users.py @@ -2,7 +2,7 @@ import pytest from uuid import uuid4 from atst.domain.users import Users -from atst.domain.exceptions import NotFoundError, AlreadyExistsError +from atst.domain.exceptions import NotFoundError, AlreadyExistsError, UnauthorizedError DOD_ID = "my_dod_id" @@ -52,20 +52,32 @@ def test_get_user_by_dod_id(): assert user == new_user -def test_update_user(): +def test_update_role(): new_user = Users.create(DOD_ID, "developer") - updated_user = Users.update(new_user.id, "ccpo") + updated_user = Users.update_role(new_user.id, "ccpo") assert updated_user.atat_role.name == "ccpo" -def test_update_nonexistent_user(): +def test_update_role_with_nonexistent_user(): Users.create(DOD_ID, "developer") with pytest.raises(NotFoundError): - Users.update(uuid4(), "ccpo") + Users.update_role(uuid4(), "ccpo") def test_update_existing_user_with_nonexistent_role(): new_user = Users.create(DOD_ID, "developer") with pytest.raises(NotFoundError): - Users.update(new_user.id, "nonexistent") + Users.update_role(new_user.id, "nonexistent") + + +def test_update_user(): + new_user = Users.create(DOD_ID, "developer") + updated_user = Users.update(new_user, {"first_name": "Jabba"}) + assert updated_user.first_name == "Jabba" + + +def test_update_user_with_dod_id(): + new_user = Users.create(DOD_ID, "developer") + with pytest.raises(UnauthorizedError): + Users.update(new_user, {"dod_id": "1234567890"})