File size: 2,072 Bytes
2e818da
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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