
    (<i                         d Z ddlZddlZddlZdedefdZ G d d      Z G d d	      Z G d
 d      Z G d d      Z	y)u   
test_gemini_parser_1970.py — Gemini 코멘트 파서 severity 감지 테스트 (task-1970)

실제 Gemini 코멘트 포맷으로 _parse_gemini_comments가 올바르게 severity를 분류하는지 검증.
    N	body_textreturnc                 j   d}| j                         }t        j                  dt        j                        }t        j                  dt        j                        }d|v s)d|v s%d| v s!d| v sd| v s|j	                  |       sd	|v sd
|v rd}|S d|v s!d| v sd| v sd| v s|j	                  |       sd|v rd}|S )uS   worktree_manager.py의 _parse_gemini_comments 내부 severity 감지 로직 복제.lowz&!\[(security-critical|critical|high)\]z!\[(medium)\]zseverity: highzseverity: criticalu   🔴HIGHCRITICALzhigh-priority.svgzcritical.svghighzseverity: mediumu   ⚠️MEDIUMWARNINGzmedium-priority.svgmedium)lowerrecompile
IGNORECASEsearch)r   severity
body_lower_high_img_re_medium_img_res        N/home/jay/workspace/.worktrees/task-2057-dev2/tests/test_gemini_parser_1970.pyparse_severityr      s    H"J::GWLZZ 0"--@NJ&:-9$Y"y)*,Z' O 	j(Y&y 	!  + J.O    c                   L    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y)TestGeminiHighDetectionu@   Gemini의 ![high](...) 포맷이 high로 감지되는지 검증.c                 (    d}t        |      dk(  sJ y )Nup   ![high](https://www.gstatic.com/codereviewagent/high-priority.svg)

subprocess.run은 동기식 호출입니다.r	   r   selfbodys     r   test_high_markdown_imagez0TestGeminiHighDetection.test_high_markdown_image/   s     Dd#v---r   c                 (    d}t        |      dk(  sJ y )Nu   ![security-critical](https://www.gstatic.com/codereviewagent/critical.svg) ![critical](https://www.gstatic.com/codereviewagent/critical.svg)

API 키 노출r	   r   r   s     r   %test_security_critical_markdown_imagez=TestGeminiHighDetection.test_security_critical_markdown_image3   s     pd#v---r   c                 (    d}t        |      dk(  sJ y )NuZ   ![critical](https://www.gstatic.com/codereviewagent/critical.svg)

보안 취약점 발견r	   r   r   s     r   test_critical_markdown_imagez4TestGeminiHighDetection.test_critical_markdown_image7   s    md#v---r   c                 (    d}t        |      dk(  sJ y )NzASome text with high-priority.svg in the URL

Description of issuer	   r   r   s     r   test_high_priority_svg_urlz2TestGeminiHighDetection.test_high_priority_svg_url;   s    Td#v---r   c                 (    d}t        |      dk(  sJ y )Nz/Issue with critical.svg severity badge

Detailsr	   r   r   s     r   test_critical_svg_urlz-TestGeminiHighDetection.test_critical_svg_url?   s    Bd#v---r   c                 (    d}t        |      dk(  sJ y )Nz&severity: HIGH

This is a serious bug.r	   r   r   s     r   test_uppercase_HIGHz+TestGeminiHighDetection.test_uppercase_HIGHC   s    9d#v---r   c                 (    d}t        |      dk(  sJ y )Nz+severity: CRITICAL

Security vulnerability.r	   r   r   s     r   test_uppercase_CRITICALz/TestGeminiHighDetection.test_uppercase_CRITICALG   s    >d#v---r   c                 (    d}t        |      dk(  sJ y )Nz"severity: high

Issue description.r	   r   r   s     r   test_severity_colon_highz0TestGeminiHighDetection.test_severity_colon_highK   s    5d#v---r   c                 (    d}t        |      dk(  sJ y )Nzseverity: critical

Details.r	   r   r   s     r   test_severity_colon_criticalz4TestGeminiHighDetection.test_severity_colon_criticalO   s    /d#v---r   c                 (    d}t        |      dk(  sJ y )Nu   🔴 Critical issue found.r	   r   r   s     r   test_red_circle_emojiz-TestGeminiHighDetection.test_red_circle_emojiS   s    +d#v---r   N)__name__
__module____qualname____doc__r    r"   r$   r&   r(   r*   r,   r.   r0   r2    r   r   r   r   ,   s7    J..........r   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestGeminiMediumDetectionuG   Gemini의 ![medium](...) 포맷이 medium으로 감지되는지 검증.c                 (    d}t        |      dk(  sJ y )Nua   ![medium](https://www.gstatic.com/codereviewagent/medium-priority.svg)

AsyncClient 매번 생성r   r   r   s     r   test_medium_markdown_imagez4TestGeminiMediumDetection.test_medium_markdown_image[   s    td#x///r   c                 (    d}t        |      dk(  sJ y )Nz;Text with medium-priority.svg badge

Performance suggestionr   r   r   s     r   test_medium_priority_svg_urlz6TestGeminiMediumDetection.test_medium_priority_svg_url_   s    Nd#x///r   c                 (    d}t        |      dk(  sJ y )Nzseverity: MEDIUM

Minor issue.r   r   r   s     r   test_uppercase_MEDIUMz/TestGeminiMediumDetection.test_uppercase_MEDIUMc   s    1d#x///r   c                 (    d}t        |      dk(  sJ y )Nu!   ⚠️ Consider refactoring this.r   r   r   s     r   test_warning_emojiz,TestGeminiMediumDetection.test_warning_emojig   s    2d#x///r   N)r3   r4   r5   r6   r;   r=   r?   rA   r7   r   r   r9   r9   X   s    Q0000r   r9   c                   "    e Zd ZdZd Zd Zd Zy)TestGeminiLowDetectionuE   severity 표시가 없는 코멘트는 low로 분류되는지 검증.c                 (    d}t        |      dk(  sJ y )Nz:Consider adding a docstring here for better documentation.r   r   r   s     r   test_plain_commentz)TestGeminiLowDetection.test_plain_commento   s    Kd#u,,,r   c                 (    d}t        |      dk(  sJ y )NzT![low](https://www.gstatic.com/codereviewagent/low-priority.svg)

Minor style issue.r   r   r   s     r   test_suggestion_onlyz+TestGeminiLowDetection.test_suggestion_onlys   s    gd#u,,,r   c                 $    t        d      dk(  sJ y )N r   r   )r   s    r   test_empty_bodyz&TestGeminiLowDetection.test_empty_bodyw   s    b!U***r   N)r3   r4   r5   r6   rE   rG   rJ   r7   r   r   rC   rC   l   s    O--+r   rC   c                   "    e Zd ZdZd Zd Zd Zy)TestRealGeminiCommentsuM   task-1964에서 실제로 발생한 Gemini 코멘트 포맷 재현 테스트.c                 (    d}t        |      dk(  sJ y)u9   InsuRo PR #1 코멘트 1번: security-critical + criticalu;  ![security-critical](https://www.gstatic.com/codereviewagent/critical.svg) ![critical](https://www.gstatic.com/codereviewagent/critical.svg)

API 키가 request body에 평문으로 전달되고 있습니다. 이는 로그, 네트워크 스니핑, 브라우저 히스토리 등을 통해 노출될 수 있습니다.r	   Nr   r   s     r   !test_insuro_pr1_security_criticalz8TestRealGeminiComments.test_insuro_pr1_security_critical~   s"    y 	 d#v---r   c                 (    d}t        |      dk(  sJ y)u<   InsuRo PR #1 코멘트 2번: high (subprocess.run 블로킹)u   ![high](https://www.gstatic.com/codereviewagent/high-priority.svg)

subprocess.run은 동기식 호출로, async endpoint에서 이벤트 루프를 블로킹합니다. asyncio.create_subprocess_exec 또는 run_in_executor를 사용하세요.r	   Nr   r   s     r   test_insuro_pr1_high_subprocessz6TestRealGeminiComments.test_insuro_pr1_high_subprocess   s"    X 	
 d#v---r   c                 (    d}t        |      dk(  sJ y)u;   InsuRo PR #1 코멘트 6번: medium (AsyncClient 비효율)u   ![medium](https://www.gstatic.com/codereviewagent/medium-priority.svg)

AsyncClient를 매 요청마다 생성하는 것은 비효율적입니다. 앱 레벨에서 공유 클라이언트를 사용하세요.r   Nr   r   s     r   "test_insuro_pr1_medium_asyncclientz9TestRealGeminiComments.test_insuro_pr1_medium_asyncclient   s"    J 	
 d#x///r   N)r3   r4   r5   r6   rN   rP   rR   r7   r   r   rL   rL   {   s    W..0r   rL   )
r6   jsonr   pyteststrr   r   r9   rC   rL   r7   r   r   <module>rV      sQ     	 c c :). ).X0 0(+ +0 0r   