import os, subprocess, stat
from pathlib import Path

WRAPPER = Path("/home/jay/workspace/.worktrees/task-2463-dev6/scripts/safe_pr_merge.sh")


def test_merge_caller_required():
    """MERGE_CALLER 없으면 exit 1 + 명시적 메시지 (TASKCTL_INVOKED는 통과시켜 MERGE_CALLER 게이트 도달)"""
    env = os.environ.copy()
    env["TASKCTL_INVOKED"] = "1"
    env.pop("MERGE_CALLER", None)
    r = subprocess.run(["bash", str(WRAPPER), "1", "task-test"], env=env, capture_output=True, text=True, timeout=10)
    assert r.returncode == 1
    assert "MERGE_CALLER" in r.stderr


def test_invalid_merge_method_blocked():
    """유효하지 않은 merge_method는 차단"""
    env = os.environ.copy()
    env["MERGE_CALLER"] = "test"
    # taskctl_verify.py가 존재하면 pass할 수도 있으나 Gemini 검증에서 먼저 막힘
    # MERGE_METHOD 검증은 5번째 단계이므로 이전 단계가 먼저 실패할 수 있음
    # 따라서 exit 1만 검증
    r = subprocess.run(["bash", str(WRAPPER), "1", "task-test", "invalid_method"], env=env, capture_output=True, text=True, timeout=10)
    assert r.returncode == 1


def test_wrapper_file_is_executable():
    """wrapper 파일이 존재하고 실행 가능한지"""
    assert WRAPPER.exists(), f"{WRAPPER} 미존재"
    mode = WRAPPER.stat().st_mode
    assert mode & stat.S_IXUSR, "owner execute bit 미설정"


def test_taskctl_invoked_required():
    """task-2463 P0-1: TASKCTL_INVOKED 미설정 시 차단 + 명시적 메시지"""
    env = os.environ.copy()
    env.pop("TASKCTL_INVOKED", None)
    env["MERGE_CALLER"] = "test"
    r = subprocess.run(["bash", str(WRAPPER), "1", "task-test"], env=env, capture_output=True, text=True, timeout=10)
    assert r.returncode == 1
    assert "TASKCTL_INVOKED" in r.stderr or "taskctl not invoked" in r.stderr
