add update method to Users repo

This commit is contained in:
dandds 2018-10-15 13:17:47 -04:00
parent 30318b68bb
commit ec7504fb20
3 changed files with 45 additions and 9 deletions

View File

@ -5,7 +5,7 @@ from atst.database import db
from atst.models import User from atst.models import User
from .roles import Roles from .roles import Roles
from .exceptions import NotFoundError, AlreadyExistsError from .exceptions import NotFoundError, AlreadyExistsError, UnauthorizedError
class Users(object): class Users(object):
@ -53,7 +53,7 @@ class Users(object):
return user return user
@classmethod @classmethod
def update(cls, user_id, atat_role_name): def update_role(cls, user_id, atat_role_name):
user = Users.get(user_id) user = Users.get(user_id)
atat_role = Roles.get(atat_role_name) atat_role = Roles.get(atat_role_name)
@ -63,3 +63,27 @@ class Users(object):
db.session.commit() db.session.commit()
return user 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

View File

@ -26,7 +26,7 @@
</a> </a>
{% if g.current_user %} {% if g.current_user %}
<a href="{{ url_for('atst.user') }}" class="topbar__link"> <a href="{{ url_for('users.user') }}" class="topbar__link">
<span class="topbar__link-label">{{ g.current_user.first_name + " " + g.current_user.last_name }}</span> <span class="topbar__link-label">{{ g.current_user.first_name + " " + g.current_user.last_name }}</span>
{{ Icon('avatar', classes='topbar__link-icon') }} {{ Icon('avatar', classes='topbar__link-icon') }}
</a> </a>

View File

@ -2,7 +2,7 @@ import pytest
from uuid import uuid4 from uuid import uuid4
from atst.domain.users import Users 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" DOD_ID = "my_dod_id"
@ -52,20 +52,32 @@ def test_get_user_by_dod_id():
assert user == new_user assert user == new_user
def test_update_user(): def test_update_role():
new_user = Users.create(DOD_ID, "developer") 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" assert updated_user.atat_role.name == "ccpo"
def test_update_nonexistent_user(): def test_update_role_with_nonexistent_user():
Users.create(DOD_ID, "developer") Users.create(DOD_ID, "developer")
with pytest.raises(NotFoundError): with pytest.raises(NotFoundError):
Users.update(uuid4(), "ccpo") Users.update_role(uuid4(), "ccpo")
def test_update_existing_user_with_nonexistent_role(): def test_update_existing_user_with_nonexistent_role():
new_user = Users.create(DOD_ID, "developer") new_user = Users.create(DOD_ID, "developer")
with pytest.raises(NotFoundError): 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"})