"""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