add update method to Users repo
This commit is contained in:
parent
30318b68bb
commit
ec7504fb20
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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"})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user