Repository navigation
Expand file tree
/
Copy pathtest_structure.py
More file actions
68 lines (58 loc) · 1.87 KB
/
Copy pathtest_structure.py
File metadata and controls
68 lines (58 loc) · 1.87 KB
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
"""Structure invariants — course.yaml is the source of truth."""
from conftest import LABS_DIR, REPO_ROOT, lab_path, load_course_spec
REQUIRED_DIRS = [
".github/agents",
".github/agents/skills",
"data",
"src",
"src.original",
"artifacts/datasets/reference",
"artifacts/evaluators/reference",
"artifacts/prompts/reference",
"labs/_template",
"labs/fundamentals",
"labs/core",
"labs/more",
"specs",
"specs/schemas",
"tests",
"scripts",
"infra",
]
def test_required_directories_exist():
for d in REQUIRED_DIRS:
assert (REPO_ROOT / d).is_dir(), f"missing dir: {d}"
def test_every_lab_in_spec_has_a_file():
spec = load_course_spec()
for phase in spec["phases"]:
for lab in phase["labs"]:
p = lab_path(phase["id"], lab["id"])
assert p.is_file(), f"lab file missing for {phase['id']}/{lab['id']}: {p}"
def test_no_orphan_lab_files():
spec = load_course_spec()
declared = {
(phase["id"], lab["id"])
for phase in spec["phases"]
for lab in phase["labs"]
}
for phase_dir in ("fundamentals", "core", "more"):
for f in (LABS_DIR / phase_dir).glob("*.md"):
if f.name == "README.md":
continue
lab_id = f.stem
assert (phase_dir, lab_id) in declared, (
f"orphan lab file not in course.yaml: {phase_dir}/{lab_id}"
)
def test_prereqs_reference_existing_labs():
spec = load_course_spec()
declared = {
f"{phase['id']}/{lab['id']}"
for phase in spec["phases"]
for lab in phase["labs"]
}
for phase in spec["phases"]:
for lab in phase["labs"]:
for pr in lab.get("prereqs", []):
assert pr in declared, (
f"{phase['id']}/{lab['id']} prereq points at unknown lab: {pr}"
)