diff --git a/tests/test_cc2_board_rendering.py b/tests/test_cc2_board_rendering.py new file mode 100644 index 00000000..aac5fe6b --- /dev/null +++ b/tests/test_cc2_board_rendering.py @@ -0,0 +1,50 @@ +from __future__ import annotations + +import importlib.util +from pathlib import Path +from typing import Any + +ROOT = Path(__file__).resolve().parents[1] + + +def load_module(relative: str, name: str) -> Any: + spec = importlib.util.spec_from_file_location(name, ROOT / relative) + assert spec and spec.loader + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +def test_markdown_table_escapes_pipe_characters_for_human_board() -> None: + renderer = load_module('.omx/cc2/render_board_md.py', 'render_board_md_for_test') + + rows = renderer.table(['Column', 'Meaning'], [['permission|preset', 'cannot leak | split columns']]) + + assert rows[2] == '| permission\\|preset | cannot leak \\| split columns |' + + +def test_issue_parity_intake_rows_are_normalized_as_board_items() -> None: + generator = load_module('scripts/generate_cc2_board.py', 'generate_cc2_board_for_test') + + item = generator.intake_item( + { + 'id': 'CC2-PARITY-CODEX-GRANULAR-PERMISSIONS', + 'source_anchor': 'Codex issue #22595 and ROADMAP.md#policy-engine', + 'source_type': 'external_issue_and_roadmap', + 'title': 'Granular permission profile adaptation', + 'release_bucket': 'alpha_blocker', + 'lifecycle_status': 'active', + 'dependencies': ['policy profile model', 'approval-token audit trail'], + 'verification_required': ['status JSON exposes active profile', 'path-scope cannot be bypassed'], + 'deferral_rationale': None, + } + ) + + assert item['id'] == 'CC2-PARITY-CODEX-GRANULAR-PERMISSIONS' + assert item['status'] == 'active' + assert item['source_path'] == '.omx/cc2/issue-parity-intake.json' + assert item['owner_lane'] == 'parity_overlay' + assert item['category'] == 'security' + assert item['dependencies'] == ['policy profile model', 'approval-token audit trail'] + assert item['verification_required'] == ['status JSON exposes active profile', 'path-scope cannot be bypassed'] + assert item['deferral_rationale'] == ''