8FS-539 / FS-501 (stub) regression coverage — :func:`oct.audit.oct_audit.run_audit`
9returns the correct stage + exit code for every ``oc_status.json`` state.
13- Verify compliant project returns stage ``"compliant"`` and exit code 0.
14- Verify bootstrap / migrating / missing states return the correct stage
22 L3 — assertion details
27- All operations use ``tmp_path`` as the project root; no real project
31from __future__
import annotations
34from pathlib
import Path
37from oct.core.option_c_dir
import OcStatus, write_oc_status
44 name: {
"enabled":
True,
"since":
"2026-04-17"}
45 for name
in (
"linter",
"diagnostics",
"git",
"docs",
"tests",
"scaffold")
48 oct_version_at_migration=
"0.19.0",
50 write_oc_status(tmp_path, status)
52 result = run_audit(tmp_path)
53 assert result.stage ==
"compliant"
54 assert result.exit_code == 0
55 assert isinstance(result, AuditResult)
61 pillars={
"linter": {
"enabled":
True,
"since":
"2026-04-17"}},
62 migrated_from={
"octrc":
".octrc.json"},
63 oct_version_at_migration=
"0.19.0",
65 write_oc_status(tmp_path, status)
67 result = run_audit(tmp_path)
68 assert result.stage ==
"migrating"
69 assert result.exit_code == 1
70 assert result.migrated_from[
"octrc"] ==
".octrc.json"
78 oct_version_at_migration=
"0.19.0",
80 write_oc_status(tmp_path, status)
82 result = run_audit(tmp_path)
83 assert result.stage ==
"bootstrap"
84 assert result.exit_code == 2
88 result = run_audit(tmp_path)
89 assert result.stage
is None
90 assert result.exit_code == 3
94 (tmp_path /
".option_c").mkdir()
95 (tmp_path /
".option_c" /
"oc_status.json").write_text(
96 "{ not json", encoding=
"utf-8",
98 result = run_audit(tmp_path)
99 assert result.stage
is None
100 assert result.exit_code == 3
test_migrating_project(Path tmp_path)
test_corrupt_status_file(Path tmp_path)
test_compliant_project(Path tmp_path)
test_unmigrated_project(Path tmp_path)
test_bootstrap_project(Path tmp_path)