
    [i=                         d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
mZ e	j                  j                  dd       e	j                  j                  dd       ddlmZmZmZ d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zy)u#   P1-7 hooks 자동 강제 테스트.    N)Pathz/home/jay/workspacez/home/jay/workspace/hooks)	cmd_check
cmd_record	cmd_resetc                    t        | dz        }t        d      D ]  }t        dd| dd|      }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d|       dz   d|iz  }t        t        j                  |            d x}} t        ddd|      }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d      dz   d|iz  }t        t        j                  |            d x}}d}t        ||      }d}	||	k(  }
|
s
t        j                  d	|
fd||	f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}x}x}
}	y )Ncb_state.json   standardfoo_.pyruff_style_warning
state_pathok==z%(py0)s == %(py3)sresultpy0py3zShould be ok at iteration 
>assert %(py5)spy5z	foo_14.pyhaltzShould halt at 15th warningzD%(py5)s
{%(py5)s = %(py0)s(%(py2)s, state_path=%(py3)s)
} == %(py8)sr   r   r   py2r   r   py8assert %(py10)spy10)strranger   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanationr   )tmp_pathr   ir   @py_assert2@py_assert1@py_format4@py_format6@py_assert4@py_assert7@py_assert6@py_format9@py_format11s                3/home/jay/workspace/tests/test_hooks_enforcement.py&test_circuit_breaker_warning_thresholdr8      s   X/0J2Y @J$qc7KXbc?v~???v??????v???v??????!;A3???????@
 
K1ER\]F:6V:::6V::::::6:::6:::V:::::::::: B9[Z8BFB8FBBBB8FBBBBBB9BBB9BBB[BBBBBBZBBBZBBB8BBBFBBBBBBB    c                    t        | dz        }t        d      D ]  }t        dddd|      } t        dddd|      }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d      dz   d|iz  }t        t        j                  |            d x}}y )Nr      r
   foo.pyr   Writetoolr   r   r   r   r   r   z)Should halt at 3rd consecutive same tupler   r   r!   r"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   )r,   r   _r   r.   r/   r0   r1   s           r7   &test_circuit_breaker_consecutive_tuplerB      s    X/0J1X mJ2FWaklm 
H.B]ghFH6VHHH6VHHHHHH6HHH6HHHVHHHHHHHHHHr9   c                    dd l }ddlm} | dz  }dddid}|j                   |j                  |      d	        |t        |      
      }|j                  }d} ||      }d}	||	u }
|
st        j                  d|
fd||	f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}
}	y )Nr   )FeatureFlagLoaderzfeature_flags.jsonz1.0hooks_enforcement_enabledF)schema_versionflagsutf-8encoding)path)is)zP%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.is_enabled
}(%(py4)s)
} is %(py9)sloader)r   r   py4py6py9zassert %(py11)spy11)jsonutils.feature_flagsrD   
write_textdumpsr!   
is_enabledr#   r$   r%   r&   r'   r(   r*   r+   )r,   rR   rD   
flags_filedatarM   r/   @py_assert3@py_assert5@py_assert8r3   @py_format10@py_format12s                r7   test_flag_disabled_hook_skippedr^   &   s    5 00J'
D *$**T*W=C
O4FB8B89BUB9UBBBB9UBBBBBB6BBB6BBBBBB8BBB9BBBUBBBBBBBBr9   c                 "   t        | dz        }t        d      D ]  }t        ddd|        d}t        ||      }d}||k(  }|s
t	        j
                  d|fd	||f      d
t        j                         v st	        j                  t              rt	        j                  t              nd
t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}x}}t        |       d}t        ||      }d}||k(  }|s
t	        j
                  d|fd	||f      d
t        j                         v st	        j                  t              rt	        j                  t              nd
t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}x}}y )Nr      r
   r<   r   r   r   r   r   r   r   r   r   r    r   )r!   r"   r   r   r#   r$   r%   r&   r'   r(   r*   r+   r   )	r,   r   rA   r/   r2   r3   r4   r5   r6   s	            r7   test_circuit_breaker_resetra   9   s   X/0J2Y V:x)=*UV?9X*5??5????5??????9???9???X??????*???*???5??????????$=9X*5==5====5======9===9===X======*===*===5==========r9   c                 z   t        | dz        }t        d      D ]  }t        dd| dd|      }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d|       dz   d|iz  }t        t        j                  |            d x}} t        ddd|      }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d      dz   d|iz  }t        t        j                  |            d x}}y )Nr      criticalbar_r   pyright_type_errorr   r   r   r   r   r   z#Should be ok at critical iteration r   r   z	bar_29.pyr   zShould halt at 30th criticalr@   )r,   r   r-   r   r.   r/   r0   r1   s           r7   'test_circuit_breaker_critical_thresholdrg   E   s   X/0J2Y IJ$qc7KXbcHv~HHHvHHHHHHvHHHvHHHHHH!DQCHHHHHHHI 
K1ER\]F;6V;;;6V;;;;;;6;;;6;;;V;;;;;;;;;;r9   c                    t        | dz        }t        dddd|       t        dddd|       t        dddd|       t        dddd|      }d}||k(  }|st        j                  d	|fd
||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d      dz   d|iz  }t        t        j                  |            d x}}y )Nr   r
   r<   r   r=   r>   zbar.pyr   r   r   r   r   z/Consecutive should be broken by different eventr   r   )r!   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   )r,   r   r   r.   r/   r0   r1   s          r7   0test_consecutive_tuple_broken_by_different_eventri   P   s    X/0Jz8%9T^_z8%9T^_z8%9T^_
H.B]ghFL6T>LLL6TLLLLLL6LLL6LLLTLLLLLLLLLLr9   c                     d} t         j                  }|j                  } ||       }|s t        j                  d      dz   dt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }t        t        j                  |            d x}x}}t        |       5 }t        j                  |      }d d 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}|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 # 1 sw Y   /xY w)Nz)/home/jay/workspace/.claude/settings.jsonzsettings.json should existd
>assert %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}ossettings_pathr   r   rN   r   py7hooksinz%(py1)s in %(py3)srX   py1r   assert %(py5)sr   PostToolUse)z%(py1)s in %(py4)s)ru   rN   zassert %(py6)srO   )rl   rK   existsr#   r)   r%   r&   r'   r(   r*   r+   openrR   loadr$   )rm   r/   rY   r4   @py_format8frX   @py_assert0r.   r0   r1   @py_format5@py_format7s                r7   test_settings_json_existsr   \   st   ?M77F7>>F>-(F(FF*FFFFFFF2FFF2FFF7FFF>FFFFFF-FFF-FFF(FFFFFF	m	 yy|7d?7d7dd)DM)=M))))=M)))=)))M))))))) s   ;I>>Jc                     d} t        |       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 )Nz,/home/jay/workspace/teams/shared/QC-RULES.mdrH   rI   u   hooks와 QC는 별개 의무rq   rs   contentrt   rv   r   u   hooks 통과 ≠ QC 면제)
r   	read_textr#   r$   r(   r%   r&   r'   r*   r+   )qc_pathr   r}   r.   r0   r1   s         r7   test_qc_rules_hooks_sectionr   f   s    <G7m%%w%7G)4)W4444)W444)444444W444W4444444'2'72222'7222'222222722272222222r9   c            	      X   d} t         j                  }|j                  } ||       }|s t        j                  d      dz   dt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }t        t        j                  |            d x}x}}t         j                  }t         j                  } || |      }|sIt        j                  d      dz   dt        j                         v st        j                  t               rt        j                  t               ndt        j                  |      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                  |      t        j                  |      d	z  }t        t        j                  |            d x}x}}y )
Nz*/home/jay/workspace/hooks/post_tool_use.shzpost_tool_use.sh should existrk   rl   sh_pathrn   z%post_tool_use.sh should be executablezm
>assert %(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.access
}(%(py3)s, %(py6)s
{%(py6)s = %(py4)s.X_OK
})
})r   r   r   rN   rO   r   )rl   rK   rx   r#   r)   r%   r&   r'   r(   r*   r+   accessX_OK)r   r/   rY   r4   r{   rZ   r3   r5   s           r7    test_post_tool_use_sh_executabler   n   s^   :G77C7>>C>'"C"CC$CCCCCCC2CCC2CCC7CCC>CCCCCC'CCC'CCC"CCCCCC99ObggO9Wg&O&OO(OOOOOOO2OOO2OOO9OOOOOOWOOOWOOOOOObOOObOOOgOOO&OOOOOOr9   )__doc__builtinsr%   _pytest.assertion.rewrite	assertionrewriter#   rR   rl   syspathlibr   rK   inserthooks.circuit_breakerr   r   r   r8   rB   r^   ra   rg   ri   r   r   r    r9   r7   <module>r      sv    )    	 
  ( ) . / B B	CIC&><M*3Pr9   