
    4j                    ,   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ZddlmZ  ed      Zedz  Zedz  Zedz  Zd	 Z e       Zej)                  e      Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*y)uX  Regression — task-2553+16 profile-as-code engine.

Validates the test_only_hardening_pr_merge_v1 profile loader/runner binding:
predicate AND-gate, fail-closed auth (9-R.5), deterministic merge_method
(9-R.6), Gemini-thread resolve bound (9-R.1), review-state allowlist (9-R.2),
and idempotency. Pure-unit, no network, no merge side effects.
    )annotationsN)Pathz/home/jay/workspacezCschemas/policy_profiles/test_only_hardening_pr_merge_v1.schema.jsonz;memory/policy_profiles/test_only_hardening_pr_merge_v1.jsonz+scripts/run_test_only_hardening_pr_merge.pyc                    t         j                  j                  dt              } g }d }| |u}|}|r| j                  }d }||u}|}|slt        j                  d|fd| |f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }dd|iz  }	|j                  |	       |rt        j                  dfdf      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      d	z  }
d
d|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}x}}t         j                  j                  |       }| j                  j!                  |       |S )Nrthpm)is not)z%(py2)s is not %(py5)sspec)py2py5z%(py7)spy7)z5%(py11)s
{%(py11)s = %(py9)s.loader
} is not %(py14)s)py9py11py14z%(py16)spy16r   zassert %(py19)spy19)	importlibutilspec_from_file_locationRUNNERloader
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprappend_format_boolopAssertionError_format_explanationmodule_from_specexec_module)r   @py_assert1@py_assert4@py_assert3@py_assert0@py_assert10@py_assert13@py_assert12@py_format6@py_format8@py_format15@py_format17@py_format18@py_format20mods                  T/home/jay/workspace/tests/regression/test_test_only_hardening_pr_merge_2553plus16.py_load_runnerr1      s   >>11'6BD7t74t77474 777774t77777747774777t77777774777777777777777477777777777777
..
)
)$
/CKKC J    c                 "    ddddddddddddd		S )
N	MERGEABLECLEAN Tr   @7b7d996aae3c368561f63600f8e71017f7af85b86a63b5533153e956bdec7135(2753e3cf7dad4d0d926d0197875fc3078a3cb19bsquashmergerebase)		mergeablemerge_state_statusreview_decisionci_all_successunresolved_review_threadseffective_diff_test_onlyproduction_byte0_sha256head_sha
repo_allow rF   r2   r0   
_green_obsrG   !   s.     %%&$(#e>!%E
 
r2   c                    t        j                  t        j                                t        j                  t        j                               } | d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   d	   }d
}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}| d   d   }dg}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )N
profile_idtest_only_hardening_pr_merge_v1==z%(py1)s == %(py4)spy1py4assert %(py6)spy6target	pr_number   merge_ready_predicatemerge_state_status_inr5   )
jsonloadsSCHEMA	read_textPROFILEr   r   r   r   r   )pr%   r$   @py_assert2@py_format5@py_format7s         r0   &test_schema_and_profile_are_valid_jsonra   1   s1   JJv!"

7$$&'A\???????????????????????????X;{#*s*#s****#s***#***s*******$%&=>K7)K>)KKKK>)KKK>KKK)KKKKKKKr2   c                L   | dz  }|j                  t        j                  ddi             	 t        j	                  |       d}|sNt        j                  d      dz   dt        j                  |      iz  }t        t        j                  |            d }y # t        $ r Y y w xY w)Nzbad.jsonrI   wrongFzexpected ValueErrorz
>assert %(py1)srO   )
write_textrX   dumpsRload_profiler   _format_assertmsgr   r   r   
ValueError)tmp_pathbadr%   @py_format2s       r0   &test_loader_fail_closed_on_bad_profilerm   9   sw    
Z
CNN4::|W567	s+u++++++u++++++ s   A)B 	B#"B#c                 F   t         j                  t               t              } | d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}}| d   }g }||k(  }|slt	        j
                  d	|fd
||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}}y )NALL_PASSTisz%(py1)s is %(py4)srN   rQ   rR   failedrK   rM   )	rf   evaluate_predicaterG   PROFr   r   r   r   r   )resr%   r$   r^   r_   r`   s         r0   "test_predicate_all_pass_when_greenrw   E   s    


z|T
2Cz?"d"?d""""?d"""?"""d"""""""x=B=B=B=Br2   c                 R   t               } d| d<   t        j                  | t              }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}d
}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}y )NBLOCKEDr>   ro   Frp   rr   rN   rQ   rR   merge_state_status_cleanrs   inz%(py1)s in %(py4)s	rG   rf   rt   ru   r   r   r   r   r   obsrv   r%   r$   r^   r_   r`   s          r0    test_predicate_fail_when_blockedr   K   s    
,C )C


sD
)Cz?#e#?e####?e###?###e#######%6X6%6666%666%6666666666r2   c                 R   t               } d| d<   t        j                  | t              }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}d
}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}y )N   rA   ro   Frp   rr   rN   rQ   rR   unresolved_review_threads_eq_0rs   r{   r}   r~   r   s          r0   +test_predicate_fail_when_unresolved_threadsr   S   s    
,C'(C#$


sD
)Cz?#e#?e####?e###?###e#######+<s8}<+}<<<<+}<<<+<<<}<<<<<<<r2   c                 R   t               } d| d<   t        j                  | t              }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}d
}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}y )N(deadbeefdeadbeefdeadbeefdeadbeefdeadbeefrD   ro   Frp   rr   rN   rQ   rR   head_sha_eq_sanctionedrs   r{   r}   r~   r   s          r0   #test_predicate_fail_when_head_driftr   [   s    
,C$C
O


sD
)Cz?#e#?e####?e###?###e########4s8}4#}4444#}444#444}4444444r2   c                 R   t               } d| d<   t        j                  | t              }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}d
}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}y )N@0000000000000000000000000000000000000000000000000000000000000000rC   ro   Frp   rr   rN   rQ   rR   production_byte0rs   r{   r}   r~   r   s          r0   0test_predicate_fail_when_production_byte_changedr   c   s    
,C%-C!"


sD
)Cz?#e#?e####?e###?###e#######.X..................r2   c                 R   t               } d| d<   t        j                  | t              }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}d
}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}y )NCHANGES_REQUESTEDr?   ro   Frp   rr   rN   rQ   rR   review_decision_allowlistrs   r{   r}   r~   r   s          r0   -test_review_decision_changes_requested_blocksr   m   s    
,C0C


sD
)Cz?#e#?e####?e###?###e#######&7#h-7&-7777&-777&777-7777777r2   c                 ^   dD ]  } t               }| |d<   t        j                  |t              d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}} y )
N)APPROVEDr6   Nr?   ro   Trp   rr   rN   rQ   rR   r~   )rdr   r%   r$   r^   r_   r`   s          r0   /test_review_decision_approved_and_empty_allowedr   u   s    $ Cl!###C.z:BdB:dBBBB:dBBB:BBBdBBBBBBBCr2   c                    t         j                  dt              d   } d}| |u }|slt        j                  d|fd| |f      t        j
                  |       t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}t         j                  d	t              d   } d}| |u }|slt        j                  d|fd| |f      t        j
                  |       t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}t         j                  d t              d   } d}| |u }|slt        j                  d|fd| |f      t        j
                  |       t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}t         j                  d
t              d   } d}| |u }|slt        j                  d|fd| |f      t        j
                  |       t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}y )Nghp_xxxr   Frp   rr   rN   rQ   rR   github_pat_xxxr6   )rf   auth_okru   r   r   r   r   r   r%   r$   r^   r_   r`   s        r0   (test_auth_rejects_personal_and_owner_patr   ~   sw   99Y%a(1E1(E1111(E111(111E111111199%t,Q/858/58888/5888/8885888888899T4 #,u,#u,,,,#u,,,#,,,u,,,,,,,99Rq!*U*!U****!U***!***U*******r2   c                    t         j                  dt              \  } }d}| |u }|st        j                  d|fd| |f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}}d	}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}}y )Nghs_validapptokenTrp   z%(py0)s is %(py3)sokpy0py3assert %(py5)sr
   github_app_installation_tokenrK   z%(py0)s == %(py3)sreason)rf   r   ru   r   r   r   r   r   r   r   r   )r   r   r^   r"   @py_format4r)   s         r0   (test_auth_accepts_app_installation_tokenr      s    .5JB2:22244644444644444446444644444444444r2   c                    t         j                  ddddt              \  } }d}| |k(  }|st        j                  d|fd| |f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}}|d
   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )NTr9   r:   rK   r   mr   r   r
   selectedrM   rN   rQ   rR   rf   resolve_merge_methodru   r   r   r   r   r   r   r   r   
r   provr^   r"   r   r)   r%   r$   r_   r`   s
             r0   test_merge_method_squash_firstr      s    $$tt%TVZ[GAt1=111
'x'x''''x''''''x'''''''r2   c                    t         j                  ddddt              \  } }d}| |k(  }|st        j                  d|fd| |f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}}y )NFTr9   r;   rK   r   r   r   r   r
   r   )r   _r^   r"   r   r)   s         r0   &test_merge_method_merge_when_no_squashr      sx    !!UTT"RTXYDAq1<111r2   c                    t         j                  ddddt              \  } }d }| |u }|st        j                  d|fd| |f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}}|d
   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )NFTr9   rp   r   r   r   r   r
   hold_reasonrebase_only_forbiddenrK   rM   rN   rQ   rR   r   r   s
             r0   #test_merge_method_rebase_only_holdsr      s    $$QU%VX\]GAt191119"99"99999"9999999"99999999r2   c                    t         j                  dddt              d   } d}| |u }|slt        j                  d|fd| |f      t        j
                  |       t        j
                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}}t         j                  dddt              d   } d}| |u }|slt        j                  d|fd| |f      t        j
                  |       t        j
                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}}t         j                  d
ddt              d   } d}| |u }|slt        j                  d|fd| |f      t        j
                  |       t        j
                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}}y )Nr   TFr   rp   rr   rN   rQ   rR      rf   thread_resolve_eligibleru   r   r   r   r   r   r   s        r0   (test_thread_resolve_requires_exactly_oner      s+   $$QeT:1=FF=FFFF=FFF=FFFFFFFFFF$$QeT:1=FF=FFFF=FFF=FFFFFFFFFF$$QeT:1=EE=EEEE=EEE=EEEEEEEEEEr2   c                 h   t         j                  dddt              d   } d}| |u }|slt        j                  d|fd| |f      t        j
                  |       t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}t         j                  dd	d	t              d   } d}| |u }|slt        j                  d|fd| |f      t        j
                  |       t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}y )
Nr   Fr   rp   rr   rN   rQ   rR   Tr   r   s        r0   =test_thread_resolve_blocked_when_not_unique_or_other_blockersr      s    $$Qud;A>G%G>%GGGG>%GGG>GGG%GGGGGGG$$QdD9!<EE<EEEE<EEE<EEEEEEEEEEr2   c                    t               } d| d<   d| d<   t        j                  | t        d| d         }|d   }t        j                  }||k(  }|st        j                  d|fd	||f      t        j                  |      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}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )Nry   r>   r   rA   	ghs_tokenrE   decisionrK   z6%(py1)s == %(py5)s
{%(py5)s = %(py3)s.PRE_MERGE_HOLD
}rf   rO   r   r
   assert %(py7)sr   ro   Frp   rr   rN   rQ   rR   )rG   rf   decideru   PRE_MERGE_HOLDr   r   r   r   r   r   r   r   )
r   dr%   r#   r^   r)   r*   r$   r_   r`   s
             r0   ,test_decide_holds_on_blocked_pr_129_observedr      s    
,C )C'(C#$	dK\):;AZ=,A,,,=,,,,,=,,,,=,,,,,,A,,,A,,,,,,,,,,,Z=!E!=E!!!!=E!!!=!!!E!!!!!!!r2   c                    t         j                  t               t        dddi      } | d   }t         j                  }||k(  }|st        j                  d|fd||f      t        j                  |      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}x}}| d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr   r:   Tr   rK   )z3%(py1)s == %(py5)s
{%(py5)s = %(py3)s.MERGE_READY
}rf   r   r   r   merge_method_selectedrM   rN   rQ   rR   )rf   r   rG   ru   MERGE_READYr   r   r   r   r   r   r   r   )	r   r%   r#   r^   r)   r*   r$   r_   r`   s	            r0   0test_decide_merge_ready_when_green_and_app_tokenr      s    	t[8T2BCAZ=)AMM)=M))))=M)))=))))))A)))A)))M)))))))$%11%1111%111%1111111111r2   c                    t         j                  t               t        dddi      } | d   }t         j                  }||k(  }|st        j                  d|fd||f      t        j                  |      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}x}}y )Nghp_ownerpatr:   Tr   rK   r   rf   r   r   r   )rf   r   rG   ru   r   r   r   r   r   r   r   r   r   )r   r%   r#   r^   r)   r*   s         r0   .test_decide_holds_when_owner_pat_even_if_greenr      s    	t^h5EFAZ=,A,,,=,,,,,=,,,,=,,,,,,A,,,A,,,,,,,,,,,r2   c                 2   t               } t        j                  | t        d| d         }t        j                  | t        d| d         }||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd	|iz  }t        t	        j                  |            d }y )
Nr   rE   rK   )z%(py0)s == %(py2)sab)r   r	   zassert %(py4)srP   )rG   rf   r   ru   r   r   r   r   r   r   r   r   )r   r   r   r"   @py_format3r_   s         r0   test_decide_is_idempotentr      s    
,C	dK\):;A	dK\):;A6MMM1MMMMMM1MMM1MMMMMMMMMMMMMMMMr2   )+__doc__
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   importlib.utilr   rX   pathlibr   WSrZ   r\   r   r1   rf   rg   ru   rG   ra   rm   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rF   r2   r0   <module>r      s    #      	
 	S	S
L
L	;	; N~~g L7=5/8C+5(
:FF"2-
r2   