
    j                       d Z ddlmZ ddlZddlmc mZ ddl	m	Z	m
Z
mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ  e e
d            ZddZ	 	 dd	Zd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)u   tests.regression.test_chair_authorization_validator — task-2637.

verbatim signature · TTL · pr_numbers/head_shas 매칭 단언.

Spec: memory/specs/system_real_merge_executor_wiring_spec_260523.md §6
    )annotationsN)datetime	timedeltatimezone)AUTH_EXPIREDAUTH_HEAD_SHA_MISMATCHAUTH_INVALID_SCHEMAAUTH_MISSINGAUTH_OKAUTH_PR_MISMATCHAUTH_SIGNATURE_MISSINGAUTH_TTL_TOO_LARGECHAIR_AUTH_MAX_TTL_HOURSCHAIR_AUTH_SCHEMAis_authorizedvalidate_chair_authorization	   )hoursc                8    t        | ||||t              fdS )N)tzinfoc                      S )N )dts   J/home/jay/workspace/tests/regression/test_chair_authorization_validator.py<lambda>z_clock.<locals>.<lambda>    s    2     )r   KST)yearmonthdayhourminuter   s        @r   _clockr#      s    	$sD&	=Br   c           	     $    t         d| g|g||dddS )Nper_pru   회장 verbatim chair token v1ztask-2637-ok)schemascope
pr_numbers	head_shasexpires_at_kstissued_at_kstchair_signaturetask_id)r   )prheadexpiresissueds       r   _valid_authr2   #   s*     $dV!;!	 	r   c                    | |ddS )Nztask-2637-pid)r.   head_shar-   r   r.   r/   s     r   _pidr6   1   s    $?CCr   c                 
   t        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}}|t        k(  }|st        j                  d|fd	|t        f      d
t	        j
                         v st        j                  |      rt        j                  |      nd
dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d }|sedddt	        j
                         v st        j                  |      rt        j                  |      ndiz  }	t        t        j                  |	            y )NFisz%(py0)s is %(py3)sokpy0py3assert %(py5)spy5==z%(py0)s == %(py2)scoder
   r=   py2assert %(py4)spy4zassert %(py0)sr=   reasonsr   r6   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr
   )
r;   rD   rI   @py_assert2@py_assert1@py_format4@py_format6@py_format3@py_format5@py_format1s
             r   /test_missing_authorization_returns_AUTH_MISSINGrZ   5   s    4T46BBg2;222<4<44<<NNNNN7NNN7NNNNN7r   c                 <   t        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}}|t        k(  }|st        j                  d	|fd
|t        f      dt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d }y )Nz
not a dictFr8   r:   r;   r<   r?   r@   rA   rC   rD   r
   rE   rG   rH   rJ   )	r;   rD   _rS   rT   rU   rV   rW   rX   s	            r   0test_non_dict_authorization_returns_AUTH_MISSINGr]   <   s    .|TVDKBa2;222<4<44<<r   c                 n   t               } d| d<   t        | t               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}}|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d }y )Nzsomething.else.v1r&   clockFr8   r:   r;   r<   r?   r@   rA   rC   rD   r	   rE   rG   rH   r2   r   r6   r#   rK   rL   rM   rN   rO   rP   rQ   rR   r	   
authr;   rD   r\   rS   rT   rU   rV   rW   rX   s
             r   -test_wrong_schema_returns_AUTH_INVALID_SCHEMArd   B   s    =D(DN.tTV68LKBa2;222&&&&&4&&&&&&&4&&&4&&&&&&&&&&&&&&&&&&r   c                 n   t               } d| d<   t        | t               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}}|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d }y )N r,   r_   Fr8   r:   r;   r<   r?   r@   rA   rC   rD   r   rE   rG   rH   )r2   r   r6   r#   rK   rL   rM   rN   rO   rP   rQ   rR   r   rb   s
             r   ;test_missing_chair_signature_returns_AUTH_SIGNATURE_MISSINGrg   J   s    =D D	.tTV68LKBa2;222)))))4)))))))4)))4))))))))))))))))))r   c                    t        dd      } t        | t               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}}|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d }d |D        }t        |      }
|
sddt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |
      dz  }	t        t	        j                  |	            d x}}
y )N2026-05-23T11:00:00+09:00z2026-05-23T10:00:00+09:00)r0   r1   r_   Fr8   r:   r;   r<   r?   r@   rA   rC   rD   r   rE   rG   rH   c              3  $   K   | ]  }d |v  
 yw)r*   Nr   .0rs     r   	<genexpr>zBtest_expired_authorization_returns_AUTH_EXPIRED.<locals>.<genexpr>X   s     61$6   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyr=   rF   rH   )r2   r   r6   r#   rK   rL   rM   rN   rO   rP   rQ   rR   r   rq   rc   r;   rD   rI   rS   rT   rU   rV   rW   rX   @py_assert3s              r   /test_expired_authorization_returns_AUTH_EXPIREDru   R   sH   :C^_D4T46RBg2;222<4<44<<6g6636666666663666366666666666666r   c                 t   t        dd      } t        | t               t               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}}|t        k(  }|st        j                  d|fd|t        f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }	t        t        j                  |	            d }y )Nri   z2026-05-25T11:00:00+09:00)r1   r0   )r`   max_ttl_hoursFr8   r:   r;   r<   r?   r@   rA   rC   rD   r   rE   rG   rH   )r2   r   r6   r#   r   rK   rL   rM   rN   rO   rP   rQ   rR   r   rb   s
             r   -test_ttl_too_large_returns_AUTH_TTL_TOO_LARGErx   [   s    *+D /dfFH4LKBa 2;222%%%%%4%%%%%%%4%%%4%%%%%%%%%%%%%%%%%%r   c                 l   t        d      } t        | t        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}}|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d }y )N   r.   i  r_   Fr8   r:   r;   r<   r?   r@   rA   rC   rD   r   rE   rG   rH   )r2   r   r6   r#   rK   rL   rM   rN   rO   rP   rQ   rR   r   rb   s
             r   )test_pr_mismatch_returns_AUTH_PR_MISMATCHr|   h   s    #D.dcl&(KBa 2;222#####4#######4###4##################r   c                    t        d      } t        | t        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}}|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d }d |D        }t        |      }
|
sddt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |
      dz  }	t        t	        j                  |	            d x}}
y )N(aaa0000000000000000000000000000000000000)r/   (bbb0000000000000000000000000000000000000r_   Fr8   r:   r;   r<   r?   r@   rA   rC   rD   r   rE   rG   rH   c              3  $   K   | ]  }d |v  
 yw)r)   Nr   rk   s     r   rn   zHtest_head_sha_mismatch_returns_AUTH_HEAD_SHA_MISMATCH.<locals>.<genexpr>x   s     1A{a1ro   rp   rq   rr   )r2   r   r6   r#   rK   rL   rM   rN   rO   rP   rQ   rR   r   rq   rs   s              r   5test_head_sha_mismatch_returns_AUTH_HEAD_SHA_MISMATCHr   q   sR   ,-D4d()Bg 2;222)))))4)))))))4)))4))))))))))))))))))11131111111113111311111111111111r   c                 r   t               } ddg| d<   t        | t               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}}|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d }y )Nrz      r(   r_   Fr8   r:   r;   r<   r?   r@   rA   rC   rD   r	   rE   rG   rH   ra   rb   s
             r   )test_per_pr_scope_requires_exactly_one_prr   {   s    =DsD.tTV68LKBa2;222&&&&&4&&&&&&&4&&&4&&&&&&&&&&&&&&&&&&r   c                    t               } d| d<   g d| d<   g d| d<   t        | t        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}}|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d }y )Nbatchr'   )rz   r      r(   )(abc0000000000000000000000000000000000000(def0000000000000000000000000000000000000(fed0000000000000000000000000000000000000r)   r   r   r5   r_   Tr8   r:   r;   r<   r?   r@   rA   rC   rD   r   rE   rG   rH   r2   r   r6   r#   rK   rL   rM   rN   rO   rP   rQ   rR   r   rb   s
             r   $test_batch_scope_allows_multiple_prsr      s   =DDM(DND.dc 01KBa 2:2227?474477r   c                    t               } t        | t               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}}|t        k(  }|st	        j
                  d	|fd
|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d }g }||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 )Nr_   Tr8   r:   r;   r<   r?   r@   rA   rC   rD   r   rE   rG   rH   )z%(py0)s == %(py3)srI   r   )
rc   r;   rD   rI   rS   rT   rU   rV   rW   rX   s
             r   test_happy_path_returns_AUTH_OKr      s9   =D4T46RBg2:2227?4744777b=7b77br   c                    t               } t               }t               }t        | ||      }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |       rt	        j                  |       nddt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |      t	        j                  |      d	z  }d
d|iz  }t        t	        j                  |            d x}x}x}x}}t        |       }d|d<   t               }t               }t        |||      }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |      t	        j                  |      d	z  }d
d|iz  }t        t	        j                  |            d x}x}x}x}}y )Nr_   Tr8   )zw%(py9)s
{%(py9)s = %(py0)s(%(py1)s, %(py4)s
{%(py4)s = %(py2)s()
}, clock=%(py7)s
{%(py7)s = %(py5)s()
})
} is %(py12)sr   rc   r6   r#   )r=   py1rF   rH   r@   py7py9py12zassert %(py14)spy14ri   r*   Fbad)r2   r6   r#   r   rK   rL   rM   rN   rO   rP   rQ   rR   dict)	rc   rt   @py_assert6@py_assert8@py_assert11@py_assert10@py_format13@py_format15r   s	            r   (test_is_authorized_convenience_predicater      s   =D#v>VX>=vX6>$>6$>>>>6$>>>>>>=>>>=>>>>>>>>>>>>>>>t>>>t>>>v>>>>>>V>>>V>>>X>>>6>>>$>>>>>>>
t*C7C"f>FH>=fH5>>5>>>>5>>>>>>=>>>=>>>>>>>>>>>>>>>d>>>d>>>f>>>>>>F>>>F>>>H>>>5>>>>>>>>>>>r   c                 x   t        d      } dg| d<   t        | t        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}}|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d }y )Nrz   r{   200r(   r_   Tr8   r:   r;   r<   r?   r@   rA   rC   rD   r   rE   rG   rH   r   rb   s
             r   #test_string_pr_id_int_normalizationr      s    #DD.tTS\RKBa2:2227?474477r   )i           r   )rz   r   z2026-05-23T13:00:00+09:00ri   )rz   r   )*__doc__
__future__r   builtinsrM   _pytest.assertion.rewrite	assertionrewriterK   r   r   r   #utils.chair_authorization_validatorr   r   r	   r
   r   r   r   r   r   r   r   r   r   r#   r2   r6   rZ   r]   rd   rg   ru   rx   r|   r   r   r   r   r   r   r   r   r   <module>r      s    #    2 2    yq!"
 8S2D '*7
&$2'	?r   