diff --git a/backend/services/user.py b/backend/services/user.py index 8e0b541..c354215 100644 --- a/backend/services/user.py +++ b/backend/services/user.py @@ -57,3 +57,47 @@ class UserService: finally: # return added object return user + + def delete(self, user: User) -> None: + """ + Delete a user + + Args: the user to delete + + Returns: none + """ + obj = self._session.get(UserEntity, user.id) + + if obj is None: + raise Exception(f"No matching user found") + + self._session.delete(obj) + self._session.commit() + + + + def update(self, user: User) -> User: + """ + Updates a user + + Args: User to be updated + + Returns: The updated User + """ + obj = self._session.get(UserEntity, user.id) + + if obj is None: + raise Exception(f"No matching user found") + + obj.username = user.username + obj.role = user.role + obj.email = user.email + obj.program = user.program + obj.experience = user.experience + obj.group = user.group + + self._session.commit() + + return obj.to_model() + + diff --git a/backend/test/services/user_test.py b/backend/test/services/user_test.py index 34795a5..3f8b9b1 100644 --- a/backend/test/services/user_test.py +++ b/backend/test/services/user_test.py @@ -5,9 +5,10 @@ import pytest from ...services import UserService from .fixtures import user_svc +from ...models.user_model import User from ...models.enum_for_models import ProgramTypeEnum -from .user_test_data import employee, volunteer, admin, newUser +from .user_test_data import employee, volunteer, admin, newUser, toDelete from . import user_test_data @@ -43,4 +44,39 @@ def test_get_user_by_id(user_svc: UserService): def test_get_user_by_id_nonexistent(user_svc: UserService): """Test getting a user by id that does not exist""" with pytest.raises(Exception): - user_svc.get_by_id(5) + user_svc.get_by_id(100) + + +def test_delete_user(user_svc: UserService): + """Test deleting a user""" + user_svc.delete(toDelete) + with pytest.raises(Exception): + user_svc.get_user_by_id(toDelete.id) + + +def test_delete_user_nonexistent(user_svc: UserService): + """Test deleting a user that does not exist""" + with pytest.raises(Exception): + user_svc.delete(newUser) + +def test_update_user(user_svc: UserService): + """Test updating a user + Updating volunteer + """ + user = user_svc.get_user_by_id(volunteer.id) + assert user is not None + user.username = "volunteer 1" + user.email = "newemail@compass.com" + updated_user = user_svc.update(user) + assert updated_user is not None + assert updated_user.id == user.id + assert updated_user.username == "volunteer 1" + assert updated_user.email == "newemail@compass.com" + +def test_update_user_nonexistent(user_svc: UserService): + """ Test updated a user that does not exist""" + with pytest.raises(Exception): + user_svc.update(newUser) + + + diff --git a/backend/test/services/user_test_data.py b/backend/test/services/user_test_data.py index e050bda..ca72816 100644 --- a/backend/test/services/user_test_data.py +++ b/backend/test/services/user_test_data.py @@ -59,7 +59,18 @@ newUser = User( role=roles.VOLUNTEER, ) -users = [volunteer, employee, admin] +toDelete = User( + id=5, + username="delete", + email="delete@compass.com", + experience=0, + group="none", + program=[programs.COMMUNITY], + created_at=datetime.now(), + role=roles.VOLUNTEER +) + +users = [volunteer, employee, admin, toDelete] from sqlalchemy import text