"""
test_verifiers.py - style_check / scope_check verifier 테스트 (task-1994 TDD 보완)
"""

import sys

sys.path.insert(0, "/home/jay/workspace")
from teams.shared.verifiers.style_check import verify

# ─── style_check 테스트 ────────────────────────────────────────────────────────


def test_style_check_skip_no_files():
    result = verify([])
    assert result["status"] == "SKIP"


def test_style_check_skip_no_python():
    result = verify(["file.txt", "readme.md"])
    assert result["status"] == "SKIP"


def test_style_check_fail_threshold():
    """위반 파일 5개 이상이면 FAIL 반환하는 로직 존재 확인"""
    import inspect

    source = inspect.getsource(verify)
    assert ">= 5" in source, "FAIL 승격 임계값 5가 코드에 없음"
    assert '"FAIL"' in source or "'FAIL'" in source, "FAIL 반환 로직 없음"


# ─── scope_check 테스트 ───────────────────────────────────────────────────────

import os

from teams.shared.verifiers.scope_check import _extract_files_from_report
from teams.shared.verifiers.scope_check import verify as scope_verify


def test_scope_check_skip_no_expected():
    """expected_files 비어있고 보고서도 없으면 SKIP"""
    result = scope_verify([], "task-nonexistent-99999")
    assert result["status"] == "SKIP"


def test_extract_files_from_report_nonexistent():
    """존재하지 않는 보고서 → 빈 리스트"""
    files = _extract_files_from_report("task-nonexistent-99999")
    assert files == []


def test_extract_files_from_report_table():
    """보고서 테이블에서 파일 경로 추출"""
    report_dir = "/home/jay/workspace/memory/reports"
    test_id = "task-9999"
    test_report = os.path.join(report_dir, f"{test_id}.md")
    try:
        with open(test_report, "w") as f:
            f.write(
                "# Test Report\n| 파일 | 변경 |\n|---|---|\n| dispatch.py:854 | test |\n| style_check.py | test2 |\n"
            )
        files = _extract_files_from_report(test_id)
        assert "dispatch.py" in files
        assert "style_check.py" in files
    finally:
        os.unlink(test_report)


def test_scope_check_pass_all_expected():
    """expected_files와 actual_files가 일치하면 PASS"""
    # audit-trail이 없는 task → SKIP
    result = scope_verify(["some_file.py"], "task-nonexistent-99999")
    # audit-trail 없으면 WARN
    assert result["status"] in ("SKIP", "WARN")
