"""Самопроверка хука обязана ловить сломанный запрет.

Проверка, которая зеленеет при любом раскладе, хуже отсутствующей: она создаёт
уверенность, ничем не подкреплённую.
"""

from __future__ import annotations

import shutil
import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from chekan.doctor import _hook_selftest  # noqa: E402

HOOK = Path(__file__).resolve().parent.parent / "hooks" / "chekan_hook.py"


def test_selftest_passes_on_the_real_hook():
    verdict, detail = _hook_selftest()
    assert verdict is True, detail


def test_selftest_catches_a_hook_that_stopped_denying(tmp_path: Path):
    backup = tmp_path / "chekan_hook.py"
    shutil.copy2(HOOK, backup)
    try:
        text = HOOK.read_text(encoding="utf-8")
        HOOK.write_text(
            text.replace("    emit_deny(\n", "    emit_allow()\n    emit_deny(\n", 1),
            encoding="utf-8",
        )
        verdict, detail = _hook_selftest()
        assert verdict is False, f"сломанный хук признан рабочим: {detail}"
    finally:
        shutil.copy2(backup, HOOK)

    assert _hook_selftest()[0] is True, "хук не восстановлен после теста"
