
    iI                        d Z ddlmZ ddlZddlZddlZddlmZ ddl	Z	 ee
      j                         j                  d   Zedz  dz  Z e	j                  d	      d
        ZddZddZddZddZddZddZy)uN   Tests for scripts/lock_in_verify.py — Lock-in First-line guard AST verifier.    )annotationsN)Path   scriptszlock_in_verify.pymodule)scopec                    t         j                  j                  dt              } | r| j                  sJ t         j                  j                  |       }|t        j                  d<   | j                  j                  |       |S )Nlock_in_verify)		importlibutilspec_from_file_locationSCRIPTloadermodule_from_specsysmodulesexec_module)specmods     R/home/jay/workspace/.worktrees/task-2464-dev6/tests/scripts/test_lock_in_verify.pylock_in_moduler      sb    >>112BFKDDKK
..
)
)$
/C$'CKK !KKC J    c                    | |z  }|j                   j                  dd       |j                  t        j                  |      d       |S )NT)parentsexist_okzutf-8)encoding)parentmkdir
write_texttextwrapdedent)tmp_pathnamebodyps       r   _writer&      s=    4AHHNN4$N/LL&L9Hr   c                R    t        |dd      }| j                  |dd      }|g k(  sJ y )Nzmain.pya7  
        import subprocess
        from pathlib import Path
        WORKSPACE_ROOT = "/x"
        def _execute_approve(task_num: int, pr_num: int) -> dict:
            _cancelled_marker = Path(WORKSPACE_ROOT) / "memory" / "events" / f"task-{task_num}.cancelled"
            if _cancelled_marker.exists():
                return {"ok": False}
            _guard_sh = Path(WORKSPACE_ROOT) / "scripts" / "guard.sh"
            _gp = subprocess.run(["bash", str(_guard_sh), "pre-push", f"task-{task_num}"], capture_output=True, text=True, timeout=60)
            if _gp.returncode != 0:
                return {"ok": False}
            cmd = ["gh", "pr", "merge", str(pr_num), "--merge"]
            proc = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
            return {"ok": proc.returncode == 0}
        _execute_approveghprmerger&   verify_functionr   r"   r%   errss       r   test_pass_anu_patternr1   !   s9    x % 	A  ))!-?AVWD2::r   c                    t        |dd      }| j                  |dd      }|sJ d       dj                  |      }d|j                         v sd|v sJ y y )	Nzbad.pyaI  
        import subprocess
        from pathlib import Path
        def _execute_approve(task_num: int, pr_num: int) -> dict:
            cmd = ["gh", "pr", "merge", str(pr_num), "--merge"]
            proc = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
            return {"ok": proc.returncode == 0}
        r(   r)   z,should have flagged missing first-line guard 	cancelledzbody too short)r&   r.   joinlower)r   r"   r%   r0   joineds        r   test_fail_no_first_line_guardr8   6   sj    x $ 	A ))!-?AVWD???4XXd^F&,,.(,<,FFF,F(r   c                ~    t        |dd      }| j                  |dd      }|sJ t        d |D              sJ |       y )Nzwrong_order.pya  
        import subprocess
        from pathlib import Path
        WORKSPACE_ROOT = "/x"
        def _execute_approve(task_num: int, pr_num: int) -> dict:
            _cancelled_marker = Path(WORKSPACE_ROOT) / "memory" / "events" / f"task-{task_num}.cancelled"
            if _cancelled_marker.exists():
                return {"ok": False}
            cmd = ["gh", "pr", "merge", str(pr_num), "--merge"]
            proc = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
            _guard_sh = Path(WORKSPACE_ROOT) / "scripts" / "guard.sh"
            subprocess.run(["bash", str(_guard_sh), "pre-push", "x"])
            return {"ok": True}
        r(   r)   c              3  0   K   | ]  }d |v xs d|v   yw)u   Lock-in 위반u   늦음N ).0es     r   	<genexpr>z.test_fail_guard_after_merge.<locals>.<genexpr>V   s"     D!1$5A5Ds   )r&   r.   anyr/   s       r   test_fail_guard_after_merger@   E   sN    x) , 	A ))!-?AVWDK4DtDDJdJDr   c                R    t        |dd      }| j                  |dd      }|g k(  sJ y )Nzauto_merge.pya  
        import subprocess
        from pathlib import Path
        class C:
            def __init__(self):
                self.workspace = Path("/x")
            def execute_merge(self, project_path, task_id, team_id):
                _cancelled_marker = self.workspace / "memory" / "events" / f"{task_id}.cancelled"
                if _cancelled_marker.exists():
                    raise RuntimeError("cancelled")
                _guard_sh = self.workspace / "scripts" / "guard.sh"
                _gp = subprocess.run(["bash", str(_guard_sh), "pre-push", task_id], capture_output=True, text=True, timeout=60)
                if _gp.returncode != 0:
                    raise RuntimeError("guard fail")
                worktree_manager = Path(__file__).parent / "worktree_manager.py"
                cmd = ["python3", str(worktree_manager), "finish", project_path, task_id, team_id, "--action", "merge"]
                result = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
                return result
        execute_merge)worktree_managerfinishr-   r/   s       r   test_pass_auto_merge_patternrE   Y   s8    x + 	A& ))!_>\]D2::r   c                    | j                   D ]A  }t        |d   z  }| j                  ||d   |d         }|g k(  r.J |d    d|d    d|         y)z@Sanity: the real anu_confirm_bot/main.py and auto_merge.py PASS.filefuncmerge_signature_tokensz::z broke: N)CHECKSROOTr.   )r   r   targetr0   s       r   test_real_workspace_paths_passrM   q   so    %% KV$--fd6lDIaDbcrzJd6l^2d6l^8D6JJzKr   )r"   r   r#   strr$   rN   returnr   )r"   r   rO   None)rO   rP   )__doc__
__future__r   importlib.utilr   r   r    pathlibr   pytest__file__resolver   rK   r   fixturer   r&   r1   r8   r@   rE   rM   r;   r   r   <module>rY      s    T "  
   H~''*			/	/ h  *GK(0Kr   