"""Гейт G3 обязан ловить пересечение зон, даже если зона — несколько путей через запятую.

Дефект с натуры: в прогоне 15 план прошёл G3 зелёным, хотя задача 11 (зона
`assets/index.html,chekan/serve_app.py,tests/test_home.py`) и задача 12 (зона
`assets/index.html,chekan/serve_app.py,tests/test_buttons_guard.py`) делят два пути из
трёх. `_zone_conflicts` сравнивала зону целой строкой через `_zones_overlap`, поэтому
разный третий путь делал строки разными и пересечение не находилось.
"""

from __future__ import annotations

import sys
from pathlib import Path

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

from chekan.gates import _zone_conflicts  # noqa: E402


def test_multi_path_zones_caught_by_shared_single_path() -> None:
    """Пересечение только по одному пути из трёх — гейт обязан его найти."""
    tasks = [
        {
            "id": "11",
            "zone": "assets/index.html,chekan/serve_app.py,tests/test_home.py",
            "deps": [],
        },
        {
            "id": "12",
            "zone": "assets/other.html,chekan/serve_app.py,tests/test_buttons_guard.py",
            "deps": [],
        },
    ]
    conflicts = _zone_conflicts(tasks)
    assert len(conflicts) == 1
    assert "11" in conflicts[0] and "12" in conflicts[0]
    # претензия называет пересёкшийся путь, а не всю зону целиком
    assert "chekan/serve_app.py" in conflicts[0]
    assert "assets/index.html,chekan/serve_app.py,tests/test_home.py" not in conflicts[0]


def test_multi_path_zones_no_shared_path_pass() -> None:
    """Зоны без единого общего пути гейт не трогает."""
    tasks = [
        {"id": "11", "zone": "assets/index.html,chekan/serve_app.py", "deps": []},
        {"id": "12", "zone": "assets/other.html,ceh/other_app.py", "deps": []},
    ]
    assert _zone_conflicts(tasks) == []


def test_multi_path_zones_dependency_still_allowed() -> None:
    """Сцепленные зависимостью задачи по-прежнему разрешены, даже если зоны многопутевые."""
    tasks = [
        {
            "id": "11",
            "zone": "assets/index.html,chekan/serve_app.py,tests/test_home.py",
            "deps": [],
        },
        {
            "id": "12",
            "zone": "assets/index.html,chekan/serve_app.py,tests/test_buttons_guard.py",
            "deps": ["11"],
        },
    ]
    assert _zone_conflicts(tasks) == []
