
    Ai                       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ddZddZddZddZy)u?   Tests for scripts/gemini_review_gate.py — Gemini review gate.    )annotationsN)Path   scriptszgemini_review_gate.pymodule)scopec                    t         j                  j                  dt              } | r| j                  sJ t         j                  j                  |       }|t        j                  d<   | j                  j                  |       |S )Ngemini_review_gate)		importlibutilspec_from_file_locationSCRIPTloadermodule_from_specsysmodulesexec_module)specmods     V/home/jay/workspace/.worktrees/task-2453-dev2/tests/scripts/test_gemini_review_gate.pygate_moduler      sb    >>112FODDKK
..
)
)$
/C(+CKK$%KKC J    c                4    | j                  d      ddgk(  sJ y )Nz.There is a critical issue and you must fix it.zcritical issuemust fixdetect_blockingr   s    r   test_detect_blocking_enr      s#    &&'WX]moy\zzzzr   c                :    | j                  d      }d|v rd|v sJ y )NuH   이 변경은 차단되어야 합니다 — 필수 수정 항목 있음.u   차단u   필수 수정r   )r   matchess     r   test_detect_blocking_kor!      s+    ))*tuGw?g#===#=r   c                0    | j                  d      g k(  sJ y )Nu   LGTM — no blocking issues.r   r   s    r   test_detect_blocking_cleanr#   #   s    &&'EF"LLLr   c           
         |j                  dt        j                  ddddd             | j                  d      }|d   r|d	   dk(  sJ | j	                  |d
         }d|v sJ y )NGEMINI_REVIEW_MOCKzmust fix the SQL injectiond      *   )text	tokens_in
tokens_out
latency_mszdiff contentokr*   r)   r   )setenvjsondumpscall_geminir   )r   monkeypatchresultr    s       r   test_call_gemini_mock_successr4   '   s    +TZZA]lo  @B  RT  9U  .V  W$$^4F$<F;/3666))&.9G   r   c                    |j                  dd       |j                  dd       | j                  d      }|d   rJ d|d   v sJ y )NGEMINI_API_KEYF)raisingr%   diffr-   error)delenvr1   )r   r2   r3   s      r   test_call_gemini_no_keyr;   /   sY    '7+U;$$V,Fd|vg...r   c                :   |j                  | d|       d}| j                  d|      \  }}|r|dk(  sJ dd l}|d|j                  |j	                               j                          dz  }|j                  d       | j                  d|      \  }}|rJ d	|v sJ y )
N	CACHE_DIRdeadbeef   r-   r   zgemini-z.jsonz{}zduplicate SHA)setattrshould_call_geminihashlibsha1encode	hexdigest
write_text)r   tmp_pathr2   shaproceedreasonrB   caches           r   test_should_call_gemini_deduprL   7   s    [(;
C!44Q<OGVv~%%cjjl!;!E!E!G HNNE	T!44Q<OGV;f$$$r   c                    |j                  | d|       dd l}|dz  }|j                  t        |j                                      | j	                  dd      \  }}|sd|v sJ y )Nr=   r   zgemini-pr-9.lasttime	   newshadebounce)r@   timerF   strrA   )r   rG   r2   _tdebounce_pathrI   rJ   s          r    test_should_call_gemini_debouncerU   D   sc    [(;55MS^,!44QAOGV:////r   c                    i dfd	}|j                  | d|       | j                  ddddd      }|d	   d
k(  sJ dd   v sJ d   d   | j                  k(  sJ d   d   dk(  sJ d   d   dk(  sJ y )Nc                P    | d<   |rt        j                  |      d<   yd d<   y)Nargsbody)r   z{"id":1} )r/   loads)rX   
input_datacaptureds     r   fake_gh_api_jsonz?test_publish_check_run_invokes_gh_api.<locals>.fake_gh_api_jsonP   s6    5?4::j1  FJ r   gh_api_json
OWNER/REPOabc123	completedfailurezblocking found)status
conclusionsummaryrcr   zrepos/OWNER/REPO/check-runsrX   rY   namere   head_sha)N)r@   publish_check_run
CHECK_NAME)r   r2   r^   resr]   s       @r   %test_publish_check_run_invokes_gh_apirm   M   s    H!
 ]4DE

'
'h{_h  sC
'  DCt9>>(HV,<<<<FF#{'='====FL)Y666FJ'8333r   c                "   |j                  | d|dz         |j                  | d|dz         |j                  dt        j                  ddi             |j                  | dd	        |j                  | d
d        dd l}|j                  ddddddddd	      }| j                  |      }|dk(  sJ |dz  j                         j                         j                         }|sJ t        j                  |d         }|d   dk(  sJ d|d   v sJ y )Nr=   rK   LOG_PATH	log.jsonlr%   r)   u   blocking — must fixfetch_pr_diffc                     yNrZ    _repo_prs     r   <lambda>z)test_gate_blocking_path.<locals>.<lambda>b       r   rj   c                     ddddS Nr   rZ   )rg   stdoutstderrrt   _a_kws     r   rx   z)test_gate_blocking_path.<locals>.<lambda>c       TUacoqMr r   r      abcd1234r`   rZ   callT		pr_number
commit_sharepord   	diff_filemoderf   publish_checkforce   rd   rc   r   r    )r@   r.   r/   r0   argparse	Namespacegate	read_textstrip
splitlinesr[   )r   rG   r2   r   rX   rg   	log_linesrecs           r   test_gate_blocking_pathr   ^   s$   [(W2DEZK1GH+TZZAX8Y-Z[_6KL%8:rs,RfbTX  D 
		$	B7N7K'224::<GGII9
**Yr]
#Cx=I%%%Y'''r   c                   |j                  | d|dz         |j                  | d|dz         |j                  dt        j                  ddi             |j                  | dd	        |j                  | d
d        dd l}|j                  ddddddddd	      }| j                  |      }|dk(  sJ t        j                  |dz  j                         j                         j                         d         }|d   dk(  sJ |d   g k(  sJ y )Nr=   rK   ro   rp   r%   r)   u!   looks good — no blocking issuesrq   c                     yrs   rt   ru   s     r   rx   z&test_gate_clean_path.<locals>.<lambda>w   ry   r   rj   c                     ddddS r{   rt   r~   s     r   rx   z&test_gate_clean_path.<locals>.<lambda>x   r   r   r      zzzz9999r`   rZ   r   Tr   r   rd   successr    )r@   r.   r/   r0   r   r   r   r[   r   r   r   )r   rG   r2   r   rX   rg   r   s          r   test_gate_clean_pathr   s   s   [(W2DEZK1GH+TZZAd8e-fg_6KL%8:rs,RfbTX  D 
		$	B7N7
**h,779??ALLNrR
SCx=I%%%y>Rr   )returnNone)r2   pytest.MonkeyPatchr   r   )rG   r   r2   r   r   r   )__doc__
__future__r   importlib.utilr   r/   r   pathlibr   pytest__file__resolveparentsROOTr   fixturer   r   r!   r#   r4   r;   rL   rU   rm   r   r   rt   r   r   <module>r      s    E "   
  H~''*			3	3 h  {>
M!/
%04"(* r   