study-buddy / tests /test_project_service.py
GitHub Actions
deploy d092bea3608b7a29952f16357fda39b7a29e399b
2e818da
Raw
History Blame Contribute Delete
2.07 kB
from app.schemas.project import Project, ProjectFile
def test_project_model_roundtrips():
p = Project(
project_id="abc",
name="My Project",
created_at=1.0,
updated_at=2.0,
files=[ProjectFile(filename="a.pdf", file_id="deadbeef")],
)
dumped = p.model_dump()
restored = Project(**dumped)
assert restored.files[0].filename == "a.pdf"
assert restored.intention == "learn" # default
assert restored.title == "" # default
from app.services.project_service import ProjectService
def test_create_persists_and_loads(tmp_path):
svc = ProjectService(root=str(tmp_path))
p = svc.create("Thesis")
assert p.project_id
assert p.name == "Thesis"
loaded = svc.load(p.project_id)
assert loaded is not None
assert loaded.name == "Thesis"
def test_load_missing_returns_none(tmp_path):
svc = ProjectService(root=str(tmp_path))
assert svc.load("nope") is None
def test_list_orders_by_updated_desc(tmp_path):
svc = ProjectService(root=str(tmp_path))
a = svc.create("A")
b = svc.create("B")
b.updated_at = a.updated_at + 100
svc.save(b)
ids = [p.project_id for p in svc.list()]
assert ids[0] == b.project_id
def test_derive_document_id_is_order_independent(tmp_path):
from app.schemas.project import ProjectFile
svc = ProjectService(root=str(tmp_path))
p1 = svc.create("P1")
p1.files = [ProjectFile(filename="a", file_id="11"), ProjectFile(filename="b", file_id="22")]
p2 = svc.create("P2")
p2.files = [ProjectFile(filename="b", file_id="22"), ProjectFile(filename="a", file_id="11")]
assert svc.derive_document_id(p1) == svc.derive_document_id(p2)
def test_empty_project_has_no_document_id(tmp_path):
svc = ProjectService(root=str(tmp_path))
p = svc.create("Empty")
assert svc.derive_document_id(p) == ""
def test_delete_removes_file(tmp_path):
svc = ProjectService(root=str(tmp_path))
p = svc.create("Gone")
svc.delete(p.project_id)
assert svc.load(p.project_id) is None