
    i                     H   d Z ddlZddlZddlmZmZmZ ddlmZ ej                  j                  d e
 ee      j                         j                  d                ddlmZmZmZmZmZmZmZ  e e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%   task-2370 P2 — daily_digest 검증.    N)datetime	timedeltatimezone)Path   )_filter_yesterday_tier1_merged_filter_tier3_pending_format_card_parse_audit_log_sample_for_review_yesterday_range_kst
run_digest	   )hoursc                 .    t        | dz        }|g k(  sJ y )Nzno_such_log.log)r   )tmp_pathresults     M/home/jay/workspace/.worktrees/task-2457-dev3/tests/dev3/test_daily_digest.py*test_parse_audit_log_missing_returns_emptyr      s    h)::;FR<<    c                     | dz  }|j                  d       t        |      }t        |      dk(  sJ |d   d   dk(  sJ y )Nz	audit.logzI{"task_id":"task-1","tier":"tier1"}

{"task_id":"task-2","tier":"tier3"}
r   r   task_idtask-1)
write_textr   len)r   logrss      r   test_parse_audit_log_jsonlr      sP    
[
 CNN	0
 
#	Br7a<<a5x'''r   c            	          t        dddddt              } t        dddddt              }ddd	d
dddd	ddddd	d
ddddd
dddd	ddg}t        || |      }|D cg c]  }|d   	 c}dgk(  sJ y c c}w )N        r   tzinfor   atier1mergedz2026-05-01T10:00:00+09:00r   tieroutcome	timestampbz2026-04-30T10:00:00+09:00ctier2drejectedez2026-05-02T01:00:00+09:00r   )r   KSTr   yesterday_starttoday_startrecordsr   rs        r   "test_filter_yesterday_tier1_mergedr8   '   s    tQ1a<O4Aq!C8KXLghXLghXLghZNijXLghG ,G_kRF"()QAiL)cU222)s   A2c                      t        dddddt              } t        dddddt              }ddd	d
ddddd
dg}t        || |      }|D cg c]  }|d   	 c}dgk(  sJ y c c}w )Nr    r!   r"   r   r#   r   xtier3	escalatedz2026-05-01T15:00:00+09:00r(   yr'   r   )r   r2   r	   r3   s        r   test_filter_tier3_pendingr>   5   s}    tQ1a<O4Aq!C8K[OjkXLghG #7O[IF"()QAiL)cU222)s   
A c                  $    t        g       g k(  sJ y )N)r    r   r   &test_sample_for_review_zero_when_emptyrA   @   s    b!R'''r   c                      t        d      D  cg c]	  } dd|  i }} t        j                  d      }t        |d|      }t	        |      dk(  sJ y c c} w )N
   r   t-*   皙?raterngr"   rangerandomRandomr   r   ir'   rI   r   s       r   ,test_sample_for_review_ceils_to_at_least_onerP   D   sW    -22Y7yBqc(#7F7
--
CSc:Fv;! 8   Ac                      t        d      D  cg c]	  } dd|  i }} t        j                  d      }t        |d|      }t	        |      dk(  sJ yc c} w )	u<   5건 * 0.1 = 0.5 → ceil = 1, 단 SAMPLE_RATE가 0이면 0.r!   r   rD   r   rF   rG   r"   NrJ   rN   s       r   *test_sample_for_review_zero_when_below_onerS   K   sW    -21X6yBqc(#6F6
--
CSc:Fv;!	 7rQ   c                  t    ddig} t        j                  d      }t        | d|      }t        |      dk(  sJ y )Nr   zt-1r   g      $@rG   r"   )rL   rM   r   r   )r'   rI   r   s      r   $test_sample_for_review_caps_at_totalrU   T   s=    % !F
--
CTs;Fv;!r   c                  8    t        g g g d      } d| v sJ d| v sJ y )N
2026-05-01   0건r
   )cards    r   test_format_card_emptyr[   [   s,    BL1DT>>4r   c                  l    dddgddg} dddg}dd	ig}t        | ||d
      }d|v sJ d	|v sJ d|v sJ y )Nr   r"   za.py2   )r   level
diff_filesdiff_locc   )r   	pr_numberr   ztask-2rW   u   1건rY   )r'   reviewspendingrZ   s       r   test_format_card_with_datare   a   sh    "QvhTVWXF#"56G8$%G,?DttT>>r   c                     |j                  dd       t        | dz        }|d   dk(  sJ |d   dk(  sJ d|d	   v sJ y
)u1   audit log 없으면 0건 카드로 정상 진행.DIGEST_DRY_RUN1z
no_log.log)
audit_pathmerged_countr   pending_countrX   	card_textN)setenvr   )r   monkeypatchr   s      r   .test_run_digest_graceful_fallback_no_audit_logro   k   s[    '-8l#:;F.!Q&&&/"a'''VK((((r   c            	          t        dddddt              } t        |       \  }}|t        dddddt              k(  sJ |t        dddddt              k(  sJ y )	Nr    r!   r   r      r#   r"   r   )r   r2   r   )nowystss      r   test_yesterday_range_is_kstru   t   s^    
4Aq"S
1C!#&FB$1a37777$1a37777r   )#__doc__rL   sysr   r   r   pathlibr   pathinsertstr__file__resolveparentsscripts.daily_digestr   r	   r
   r   r   r   r   r2   r   r   r8   r>   rA   rP   rS   rU   r[   re   ro   ru   r@   r   r   <module>r      s    +  
 2 2  3tH~--/77:; <   yq!"
	(33( )8r   