Feat: add add_tribe in service
This commit is contained in:
parent
6f5b479426
commit
b8a769b96d
16
backend/service/services.py
Normal file
16
backend/service/services.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from backend.model.tribe import Tribe
|
||||||
|
from backend.repository.abstract_repository import AbstractRepository
|
||||||
|
from backend.repository.tribe_sqlite_repository import TribeRepositoryError
|
||||||
|
|
||||||
|
|
||||||
|
class TribeExists(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def add_tribe(tribe: Tribe, tribe_repo: AbstractRepository, conn):
|
||||||
|
try:
|
||||||
|
tribe_repo.add(tribe)
|
||||||
|
except TribeRepositoryError:
|
||||||
|
raise TribeExists(f"The tribe {tribe.name} already exists")
|
||||||
|
conn.commit()
|
||||||
|
return tribe
|
@ -91,35 +91,3 @@ def build_student(
|
|||||||
Student(name=faker.name(), tribe=tribe) for _ in range(students_per_tribe)
|
Student(name=faker.name(), tribe=tribe) for _ in range(students_per_tribe)
|
||||||
]
|
]
|
||||||
return students
|
return students
|
||||||
|
|
||||||
|
|
||||||
class FakeTribeRepository(AbstractRepository):
|
|
||||||
def __init__(self, tribes):
|
|
||||||
self._tribes = {t.name: t for t in tribes}
|
|
||||||
|
|
||||||
def add(self, tribe):
|
|
||||||
if tribe.name not in self._tribes.keys():
|
|
||||||
self._tribes[tribe.name] = tribe
|
|
||||||
raise KeyError(f"{tribe} already exists")
|
|
||||||
|
|
||||||
def update(self, name, tribe):
|
|
||||||
try:
|
|
||||||
self._tribes.pop(name)
|
|
||||||
self._tribes[tribe.name] = tribe
|
|
||||||
except KeyError:
|
|
||||||
raise KeyError(f"The tribe {tribe} does not exists")
|
|
||||||
|
|
||||||
def list(self):
|
|
||||||
return list(self._tribes.values())
|
|
||||||
|
|
||||||
def get(self, name):
|
|
||||||
try:
|
|
||||||
return self._tribes[name]
|
|
||||||
except KeyError:
|
|
||||||
raise KeyError(f"The tribe {tribe} does not exists")
|
|
||||||
|
|
||||||
def delete(self, name):
|
|
||||||
try:
|
|
||||||
self._tribes.pop(name)
|
|
||||||
except KeyError:
|
|
||||||
raise KeyError(f"The tribe {tribe} does not exists")
|
|
||||||
|
108
tests/unit/test_service.py
Normal file
108
tests/unit/test_service.py
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from backend.model.student import Student
|
||||||
|
from backend.model.tribe import Tribe
|
||||||
|
from backend.repository.abstract_repository import AbstractRepository
|
||||||
|
from backend.repository.student_sqlite_repository import StudentRepositoryError
|
||||||
|
from backend.repository.tribe_sqlite_repository import TribeRepositoryError
|
||||||
|
from backend.service import services
|
||||||
|
from backend.service.services import TribeExists
|
||||||
|
from tests.model.fakes import build_tribes
|
||||||
|
|
||||||
|
|
||||||
|
class FakeTribeRepository(AbstractRepository):
|
||||||
|
def __init__(self, tribes: list[Tribe] = []) -> None:
|
||||||
|
self._tribes = {t.name: t for t in tribes}
|
||||||
|
|
||||||
|
def add(self, tribe: Tribe) -> None:
|
||||||
|
if tribe.name not in self._tribes.keys():
|
||||||
|
self._tribes[tribe.name] = tribe
|
||||||
|
else:
|
||||||
|
raise TribeRepositoryError(f"{tribe} already exists")
|
||||||
|
|
||||||
|
def update(self, name: str, tribe: Tribe) -> None:
|
||||||
|
try:
|
||||||
|
self._tribes.pop(name)
|
||||||
|
self._tribes[tribe.name] = tribe
|
||||||
|
except KeyError:
|
||||||
|
raise TribeRepositoryError(f"The tribe {tribe} does not exists")
|
||||||
|
|
||||||
|
def list(self) -> list[Tribe]:
|
||||||
|
return list(self._tribes.values())
|
||||||
|
|
||||||
|
def get(self, name: str) -> Tribe:
|
||||||
|
try:
|
||||||
|
return self._tribes[name]
|
||||||
|
except KeyError:
|
||||||
|
raise TribeRepositoryError(f"The tribe {tribe} does not exists")
|
||||||
|
|
||||||
|
def delete(self, name: str) -> None:
|
||||||
|
try:
|
||||||
|
self._tribes.pop(name)
|
||||||
|
except KeyError:
|
||||||
|
raise KeyError(f"The tribe {tribe} does not exists")
|
||||||
|
|
||||||
|
|
||||||
|
class FakeStudentRepository(AbstractRepository):
|
||||||
|
def __init__(self, students: list[Student] = []) -> None:
|
||||||
|
self._students = {s.id: s for s in students}
|
||||||
|
|
||||||
|
def add(self, student: Student) -> None:
|
||||||
|
if student.id not in self._students.keys():
|
||||||
|
self._students[student.id] = student
|
||||||
|
raise StudentRepositoryError(f"{student} already exists")
|
||||||
|
|
||||||
|
def update(self, id: str, student: Student) -> None:
|
||||||
|
try:
|
||||||
|
self._students.pop(id)
|
||||||
|
self._students[student.id] = student
|
||||||
|
except KeyError:
|
||||||
|
raise StudentRepositoryError(f"The student {student} does not exists")
|
||||||
|
|
||||||
|
def list(self) -> list[Student]:
|
||||||
|
return list(self._students.values())
|
||||||
|
|
||||||
|
def get(self, id: str) -> Student:
|
||||||
|
try:
|
||||||
|
return self._students[id]
|
||||||
|
except KeyError:
|
||||||
|
raise KeyError(f"The student {student} does not exists")
|
||||||
|
|
||||||
|
def delete(self, id: str) -> None:
|
||||||
|
try:
|
||||||
|
self._students.pop(id)
|
||||||
|
except KeyError:
|
||||||
|
raise StudentRepositoryError(f"The student {student} does not exists")
|
||||||
|
|
||||||
|
|
||||||
|
class FakeConn:
|
||||||
|
committed = False
|
||||||
|
|
||||||
|
def commit(self):
|
||||||
|
self.committed = True
|
||||||
|
|
||||||
|
def reset_commit(self):
|
||||||
|
self.committed = False
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_tribe():
|
||||||
|
tribe_repo = FakeTribeRepository()
|
||||||
|
tribe = build_tribes(1)[0]
|
||||||
|
conn = FakeConn()
|
||||||
|
services.add_tribe(tribe, tribe_repo, conn)
|
||||||
|
|
||||||
|
assert conn.committed == True
|
||||||
|
assert tribe_repo.list() == [tribe]
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_tribe_fail_exists():
|
||||||
|
tribe_repo = FakeTribeRepository()
|
||||||
|
tribe = build_tribes(1)[0]
|
||||||
|
conn = FakeConn()
|
||||||
|
services.add_tribe(tribe, tribe_repo, conn)
|
||||||
|
conn.reset_commit()
|
||||||
|
|
||||||
|
with pytest.raises(TribeExists):
|
||||||
|
services.add_tribe(tribe, tribe_repo, conn)
|
||||||
|
|
||||||
|
assert conn.committed == False
|
Loading…
Reference in New Issue
Block a user