
    i                     b   d Z ddlZddlmc m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                 l   t        | dz        }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 )Nzno_such_log.log==)z%(py0)s == %(py3)sresult)py0py3assert %(py5)spy5)	r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)tmp_pathr   @py_assert2@py_assert1@py_format4@py_format6s         3/home/jay/workspace/tests/dev3/test_daily_digest.py*test_parse_audit_log_missing_returns_emptyr'      sj    h)::;F6R<6R66R    c                 l   | dz  }|j                  d       t        |      }t        |      }d}||k(  }|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t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|d   d   }d}	||	k(  }|slt        j                  d|fd||	f      t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            d x}x}}	y )Nz	audit.logzI{"task_id":"task-1","tier":"tier1"}

{"task_id":"task-2","tier":"tier3"}
r   r   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenrsr   py1r   py6assert %(py8)spy8r   task_idtask-1z%(py1)s == %(py4)sr.   py4assert %(py6)sr/   )
write_textr   r+   r   r   r   r   r   r   r   r    )r!   logr,   r"   @py_assert5@py_assert4@py_format7@py_format9@py_assert0@py_assert3@py_format5s              r&   test_parse_audit_log_jsonlrA      s
   
[
 CNN	0
 
#	Br7a7a<7a33rr7aa5'x'x''''x''''''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   	 }}dg}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y c c}w )N        r   tzinfor   atier1mergedz2026-05-01T10:00:00+09:00r2   tieroutcome	timestampbz2026-04-30T10:00:00+09:00ctier2drejectedez2026-05-02T01:00:00+09:00r2   r   r4   r5   r7   r/   )r   KSTr   r   r   r   r   r    
yesterday_starttoday_startrecordsr   rr>   r?   r"   r@   r<   s
             r&   "test_filter_yesterday_tier1_mergedr[   '   s    tQ1a<O4Aq!C8KXLghXLghXLghZNijXLghG ,G_kRF"()QAiL)2)cU2)U2222)U222)222U2222222)s   C'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   	 }}dg}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y c c}w )NrC   rD   rE   r   rF   r   xtier3	escalatedz2026-05-01T15:00:00+09:00rK   yrJ   r2   r   r4   r5   r7   r/   )r   rU   r	   r   r   r   r   r    rV   s
             r&   test_filter_tier3_pendingra   5   s    tQ1a<O4Aq!C8K[OjkXLghG #7O[IF"()QAiL)2)cU2)U2222)U222)222U2222222)s   
Cc                     g } t        |       }g }||k(  }|st        j                  d|fd||f      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}}y )Nr   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   )r   py2r6   py7zassert %(py9)spy9)	r   r   r   r   r   r   r   r   r    )r#   r?   @py_assert6r:   @py_format8@py_format10s         r&   &test_sample_for_review_zero_when_emptyri   @   s     'b!'R'!R''''!R''''''''''''b'''!'''R'''''''r(   c                     t        d      D  cg c]	  } dd|  i }} t        j                  d      }t        |d|      }t	        |      }d}||k(  }|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t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y c c} w )N
   r2   t-*   皙?raterngrE   r   r*   r+   r   r-   r0   r1   rangerandomRandomr   r+   r   r   r   r   r   r   r   r    	irJ   rq   r   r"   r:   r;   r<   r=   s	            r&   ,test_sample_for_review_ceils_to_at_least_onerx   D   s    -22Y7yBqc(#7F7
--
CSc:Fv;!;!;!33vv;! 8   Ec                     t        d      D  cg c]	  } dd|  i }} t        j                  d      }t        |d|      }t	        |      }d}||k(  }|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t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}yc c} w )u<   5건 * 0.1 = 0.5 → ceil = 1, 단 SAMPLE_RATE가 0이면 0.rD   r2   rl   r   rn   ro   rE   r   r*   r+   r   r-   r0   r1   Nrr   rv   s	            r&   *test_sample_for_review_zero_when_below_oner{   K   s    -21X6yBqc(#6F6
--
CSc:Fv;!;!;!33vv;!	 7ry   c                  t   ddig} t        j                  d      }t        | d|      }t        |      }d}||k(  }|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
t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}}y )Nr2   zt-1r   g      $@ro   rE   r   r*   r+   r   r-   r0   r1   )rt   ru   r   r+   r   r   r   r   r   r   r   r    )rJ   rq   r   r"   r:   r;   r<   r=   s           r&   $test_sample_for_review_caps_at_totalr}   T   s    % !F
--
CTs;Fv;!;!;!33vv;!r(   c                     t        g g g 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 )	N
2026-05-01   0건inz%(py1)s in %(py3)scardr.   r   r   r   	r
   r   r   r   r   r   r   r   r    )r   r>   r"   r$   r%   s        r&   test_format_card_emptyr   [   s    BL1D6T>6T6TT<4<4<44r(   c                  &   dddgddg} dddg}dd	ig}t        | ||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}}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 )Nr3   rE   za.py2   )r2   level
diff_filesdiff_locc   )r2   	pr_numberr2   ztask-2r   r   r   r   r   r   r   u   1건r   )rJ   reviewspendingr   r>   r"   r$   r%   s           r&   test_format_card_with_datar   a   sJ   "QvhTVWXF#"56G8$%G,?D8t8t8tt8t8t8tt6T>6T6TTr(   c                 D   |j                  dd       t        | dz        }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            dx}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            dx}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)u1   audit log 없으면 0건 카드로 정상 진행.DIGEST_DRY_RUN1z
no_log.log)
audit_pathmerged_countr   r   r4   r5   r7   r/   Npending_countr   	card_textr   )z%(py1)s in %(py4)s)setenvr   r   r   r   r   r    )r!   monkeypatchr   r>   r?   r"   r@   r<   s           r&   .test_run_digest_graceful_fallback_no_audit_logr   k   s   '-8l#:;F.!&Q&!Q&&&&!Q&&&!&&&Q&&&&&&&/"'a'"a''''"a'''"'''a'''''''(VK((6(((((6((((6(((((((((((r(   c                  Z   t        dddddt              } t        |       \  }}d}d}d}d}d}t        |||||t              }||k(  }	|	st        j                  d	|	fd
||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t        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      d	z  }
dd|
iz  }t        t        j                  |            d x}	x}x}x}x}x}}d}d}d}d}d}t        |||||t              }||k(  }	|	st        j                  d	|	fd
||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t        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      d	z  }
dd|
iz  }t        t        j                  |            d x}	x}x}x}x}x}}y )NrC   rD   r   r      rF   rE   r   r   )zi%(py0)s == %(py15)s
{%(py15)s = %(py2)s(%(py4)s, %(py6)s, %(py8)s, %(py10)s, %(py12)s, tzinfo=%(py13)s)
}ysr   rU   )	r   rc   r6   r/   r1   py10py12py13py15zassert %(py17)spy17ts)r   rU   r   r   r   r   r   r   r   r   r    )nowr   r   r?   r:   @py_assert7@py_assert9@py_assert11@py_assert14r#   @py_format16@py_format18s               r&   test_yesterday_range_is_kstr   t   s   
4Aq"S
1C!#&FB7717a77$1a3772777772777777727772777777777777$7777771777a777777777377737777777777777717a77$1a3772777772777777727772777777777777$7777771777a77777777737773777777777777r(   ))__doc__builtinsr   _pytest.assertion.rewrite	assertionrewriter   rt   sysr   r   r   pathlibr   pathinsertstr__file__resolveparentsscripts.daily_digestr   r	   r
   r   r   r   r   rU   r'   rA   r[   ra   ri   rx   r{   r}   r   r   r   r    r(   r&   <module>r      s    +    
 2 2  3tH~--/77:; <   yq!"
	(33( )8r(   