from __future__ import annotations

import json
import subprocess
import sys
from pathlib import Path


def test_validate_dotnet_cicd_chain_contract_passes() -> None:
    root = Path(__file__).resolve().parents[2]
    proc = subprocess.run(
        [sys.executable, str(root / "tools" / "validate_dotnet_cicd_chain_contract_v1.py")],
        cwd=root,
        capture_output=True,
        text=True,
    )
    assert proc.returncode == 0, proc.stdout + proc.stderr
    payload = json.loads(proc.stdout)
    assert payload["gate"] == "PASS"


def test_validate_dotnet_cicd_chain_contract_reports_missing_chain() -> None:
    root = Path(__file__).resolve().parents[2]
    temp = root / "Temp" / "test_wbs_10_cicd_chain_contract_bad.yaml"
    temp.write_text(
        "formula_id: WBS_10_DOTNET_CICD_CHAIN_CONTRACT_V1\ngoal: CI, prepare-release, deploy-prod 순차 게이트를 고정한다.\nworkflows:\n  ci:\n    name: Validators (Pushes and Pull Requests)\n  prepare_release:\n    name: Prepare Release\n  deploy_prod:\n    name: Deploy to Production\ndependency_chain: []\nrequired_guards: [a,b,c,d]\nhealth_checks: [a,b,c,d]\n",
        encoding="utf-8",
    )
    proc = subprocess.run(
        [sys.executable, str(root / "tools" / "validate_dotnet_cicd_chain_contract_v1.py"), "--contract", str(temp)],
        cwd=root,
        capture_output=True,
        text=True,
    )
    assert proc.returncode != 0
    payload = json.loads(proc.stdout)
    assert payload["gate"] == "FAIL"
    assert "dependency_chain" in payload["missing"]
