opencode-config/tests/test_pipeline_status_project_map.py
Sergey f06d36140b
feat(pipeline): add check_project_map to DOCS phase (#67)
* feat(pipeline): add check_project_map to DOCS phase

* test(pipeline): add check_project_map unit tests + update check_docs tests

* docs(adr): add ADR-028 project map contract

* docs(project-map): mention check_project_map guard in Update Protocol

* docs(handoff): add PR handoff for check_project_map

* docs(handoff): set PR number 67

* docs(review): fix PR#66 to PR#67 typo in project map and handoff

* fix(ci): ruff lint errors in pipeline-status and project map test

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-26 00:07:13 +03:00

55 lines
2 KiB
Python

"""Tests for .opencode/scripts/pipeline-status.py — mandatory project map.
Verifies the deterministic check_project_map: docs/project-map/README.md is
required for every pipeline-driven PR (ADR-028). Loaded under a unique module
name (``pipeline_status_project_map``) so it does not collide with other test
modules that load the same script as ``pipeline_status``.
"""
import importlib.util
import sys
from pathlib import Path
SCRIPT_PATH = (
Path(__file__).resolve().parent.parent / ".opencode" / "scripts" / "pipeline-status.py"
)
spec = importlib.util.spec_from_file_location("pipeline_status_project_map", SCRIPT_PATH)
ps = importlib.util.module_from_spec(spec)
sys.modules["pipeline_status_project_map"] = ps
spec.loader.exec_module(ps)
def test_project_map_exists(tmp_path, monkeypatch):
"""PROJECT_MAP_DIR + README.md → DONE, "README.md" в detail."""
pm_dir = tmp_path / "project-map"
pm_dir.mkdir()
(pm_dir / "README.md").write_text("# Project Map\n")
monkeypatch.setattr(ps, "PROJECT_MAP_DIR", pm_dir)
result = ps.check_project_map()
assert result.status == ps.PhaseStatus.DONE
assert "README.md" in result.detail
def test_project_map_dir_missing(tmp_path, monkeypatch):
"""PROJECT_MAP_DIR не существует → NOT_DONE, "директория" в detail."""
missing_dir = tmp_path / "does-not-exist"
monkeypatch.setattr(ps, "PROJECT_MAP_DIR", missing_dir)
result = ps.check_project_map()
assert result.status == ps.PhaseStatus.NOT_DONE
assert "директория" in result.detail
def test_project_map_readme_missing(tmp_path, monkeypatch):
"""Директория есть, README.md нет → NOT_DONE, "README.md не найден" в detail."""
pm_dir = tmp_path / "project-map"
pm_dir.mkdir()
monkeypatch.setattr(ps, "PROJECT_MAP_DIR", pm_dir)
result = ps.check_project_map()
assert result.status == ps.PhaseStatus.NOT_DONE
assert "README.md не найден" in result.detail