
    wj                    L   d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ ddlZ ee      j                         j                  d   Z ee      e	j$                  vr"e	j$                  j'                  d ee             ddlmZmZmZmZ ddlmZ ddZd	 Zd
 Zd Zd Zd Z d Z!y)u  anu_v2.tests.test_owner_trigger_merge_path_separation_2554 — merge vs trigger 경로 분리 (task-2554).

회장 §명시 14장 §9 1:1:
  OWNER_GEMINI_TRIGGER_TOKEN 은 ``merge_queue_executor`` merge path 에서 직접 사용 X.
  merge 는 BOT_GITHUB_TOKEN 으로만.
    )annotationsN)Path   )ForbiddenEndpointErrorMergePathViolationOwnerTriggerOnlyTOKEN_ENV_NAME)OwnerTriggerAuditc                >    d }d }t        | ||t        |             S )Nc                 
    ddiS )Nstatus    )akws     Q/home/jay/workspace/anu_v2/tests/test_owner_trigger_merge_path_separation_2554.py	http_postz _build_module.<locals>.http_post   s    #    c                      y)Nz	any-tokenr   r   r   r   token_providerz%_build_module.<locals>.token_provider    s    r   )workspace_rootr   r   audit)r   r
   )tmp_pathr   r   s      r   _build_moduler      s,     %)	 r   c                    t        |       }t        j                  t              5  |j	                  d       d d d        y # 1 sw Y   y xY w)Ng   pr)r   pytestraisesr   merge)r   mods     r   4test_owner_trigger_only_does_not_expose_merge_methodr#   +   s<    

!C	)	* 		S	  s   AA
c                    t         dz  dz  j                  d      } d}|| v}|st        j                  d|fd|| f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndd	z  }d
d|iz  }t        t        j                  |            dx}}d}|| v}|st        j                  d|fd|| f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)uR   정적 grep: owner_trigger_only.py 본문에 pulls/{n}/merge endpoint 빌드 0건.anu_v2owner_trigger_only.pyutf-8encodingzpulls/{pr_number}/mergenot inz%(py1)s not in %(py3)ssrcpy1py3assert %(py5)spy5Nz/pulls/{n}/merge
WORKSPACE_ROOT	read_text
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanationr-   @py_assert0@py_assert2@py_format4@py_format6s        r   5test_module_source_does_not_call_pulls_merge_endpointrC   1   s    H$'>>
I
ISZ
I
[C$/$C////$C///$//////C///C///////(S((((S(((((((((S(((S(((((((r   c                    t         dz  dz  j                  d      } d}|| v}|st        j                  d|fd|| f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndd	z  }d
d|iz  }t        t        j                  |            dx}}d}|| v}|st        j                  d|fd|| f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)uO   owner_trigger_only.py가 merge_queue_executor를 import 하지 않음 (분리).r%   r&   r'   r(   zimport merge_queue_executorr*   r,   r-   r.   r1   r2   Nz from anu_v2.merge_queue_executorr3   r>   s        r   >test_owner_trigger_module_does_not_import_merge_queue_executorrE   9   s    H$'>>
I
ISZ
I
[C(3(3333(333(3333333333333333-8-S8888-S888-888888S888S8888888r   c                    t         dz  dz  } | j                         st        j                  d       | j	                  d      }|j                         D ]8  }|j                         j                  d      r#d|v sd|v s,t        d	|       |j                         D ]8  }|j                         j                  d      r#d
|v sd|v s,t        d|       y)u  역방향 — merge_queue_executor 는 ``owner_trigger_only`` 모듈을 import 하지 않는다.

    task-2554+2 §3 Phase 3 통합:
      - merge_queue_executor 는 ``owner_trigger_decision`` (schema 검증용 상수) 만 import.
      - ``owner_trigger_only`` 모듈은 직접 import 하지 않음 — runner 는 외부 호출자가 주입.
      - ``owner_trigger_pat`` 도 import 0 (task-2553 retired path).
    r%   zmerge_queue_executor.pyz2merge_queue_executor.py not present in this branchr'   r(   #zimport owner_trigger_onlyzfrom anu_v2.owner_trigger_onlyz1merge_queue_executor imports owner_trigger_only: zimport owner_trigger_patzfrom anu_v2.owner_trigger_patz0merge_queue_executor imports owner_trigger_pat: N)	r4   existsr   skipr5   
splitlineslstrip
startswithr<   )mqe_pathr-   lines      r   <test_merge_queue_executor_does_not_import_owner_trigger_onlyrO   @   s     (+DDH??HI


g

.C  _;;=##C(&$.2RVZ2Z #TUYT\!]^^_   ^;;=##C(%-1PTX1X #STXS[!\]]	^r   c                 F   d} t         | k(  }|st        j                  d|fdt         | f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |       dz  }dd|iz  }t        t        j                  |            d x}} d} t         | k7  }|st        j                  d	|fd
t         | f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |       dz  }dd|iz  }t        t        j                  |            d x}} d}|t         v} | st        j                  d| fd|t         f      t        j                  |      dt        j                         v st        j
                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}} y )NOWNER_GEMINI_TRIGGER_TOKEN)==)z%(py0)s == %(py3)sr	   )py0r0   r1   r2   BOT_GITHUB_TOKEN)!=)z%(py0)s != %(py3)sBOT_r*   r,   r.   )	r	   r6   r7   r9   r:   r;   r8   r<   r=   )r@   @py_assert1rA   rB   r?   s        r   8test_owner_trigger_token_name_is_separate_from_bot_tokenrX   [   s   99>99999>9999999>999>99999999999//>/////>///////>///>///////////'6''''6'''6''''''''''''''''r   c                    t        |       }dD ]?  }t        ||      }t        j                  t        t
        f      5   |d       d d d        A y # 1 sw Y   LxY w)N)approveclosereopenr   r   )r   getattrr   r    r   PermissionError)r   r"   method_namemethods       r   4test_owner_trigger_only_approve_close_reopen_blockedra   a   sZ    

!C5 k*]]2ODE 	cN	 		 	s   
AA	)r   r   )"__doc__
__future__r   builtinsr9   _pytest.assertion.rewrite	assertionrewriter6   syspathlibr   r   __file__resolveparentsr4   strpathinsertanu_v2.owner_trigger_onlyr   r   r   r	   anu_v2.owner_trigger_auditr
   r   r#   rC   rE   rO   rX   ra   r   r   r   <module>rr      s    #   
  h'')11!4~chh&HHOOAs>*+  9)9^6(r   