
     Ij                       d Z ddlm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  e ee      j                         j                   d         Zee
j$                  v r*e
j$                  j'                  e       ee
j$                  v r*e
j$                  j)                  de       ddlmZ ddlmZ d Zd Zd	 Zd
 Zd Zd Zd Z y)uI   task-2543 회귀 — done event fallback priority + idempotent reconcile.    )annotationsN)Path   )helpersc                   | dz  }|j                          |dz  j                  t        j                  ddd      d       ddd	ii}t	        j
                  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  }dd|iz  }t        t        j                  |            d x}}y )Neventsztask-X.doneztask-Xz2026-05-09T12:00:00+09:00)task_idcompleted_atutf-8encodingend_timez2026-05-08T01:00:00F)
events_dirtimersfallback_to_mtime==)z%(py0)s == %(py3)sresultpy0py3assert %(py5)spy5)mkdir
write_textjsondumpsr   _resolve_end_time_priority
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)tmp_pathr   r   r   @py_assert2@py_assert1@py_format4@py_format6s           L/home/jay/workspace/tests/dashboard/test_helpers_done_event_fallback_2543.py-test_done_event_priority_over_timers_end_timer-      s    H$J-++DJJ38 -  ,  %:;<F//Z%F 10600000600000006000600000000000    c                   | dz  }|j                          t        j                  d|i dd      }d }||u }|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 )Nr   ztask-NXFg   4A)r   r   r   mtime)is)z%(py0)s is %(py3)sr   r   r   r   )r   r   r   r   r    r!   r"   r#   r$   r%   r&   )r'   r   r   r(   r)   r*   r+   s          r,   test_mtime_fallback_disabledr2   $   s    H$J//juT`F 6T>6T66Tr.   c           	     D   | dz  }|j                          |dz  j                  t        j                  ddddd      d	       | d
z  }|j                  t        j                  di i      d	       t	        j
                  ||dd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}}d}|j                  }	d}
g } |	|
|      }||v}|st        j                  d|fd||f      t        j                  |      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}
x}}y )Nr   ztask-OTHERCHAT.doneztask-OTHERCHATz2026-05-08T12:00:00	dev1-team9999999)r	   r
   team_idchat_idr   r   task-timers.jsontasksl   L5: )
2026-05-08
2026-05-09F)timers_pathr   chat_id_filtertarget_date_rangedry_runskipped_other_chat   >=z%(py1)s >= %(py4)spy1py4assert %(py6)spy6tasks_addednot in)zX%(py1)s not in %(py11)s
{%(py11)s = %(py5)s
{%(py5)s = %(py3)s.get
}(%(py7)s, %(py9)s)
}r   )rF   r   r   py7py9py11zassert %(py13)spy13)r   r   r   r   reconreconcile_from_done_eventsr   r    r$   r%   r&   getr!   r"   r#   )r'   r   r<   r   @py_assert0@py_assert3r(   @py_format5@py_format7@py_assert4@py_assert6@py_assert8@py_assert10@py_format12@py_format14s                  r,   test_reconcile_skips_other_chatr^   /   s   H$J''33DJJ#-	@ 5
  4  //K4::wm4wG--!6F &',1,'1,,,,'1,,,',,,1,,,,,,,@6::@m@R@:mR#@@#@@@@@#@@@@@@@@@@6@@@6@@@:@@@m@@@R@@@#@@@@@@@@@r.   c                B   | dz  }|j                          |dz  j                  t        j                  dddd      d       | d	z  }|j                  t        j                  d
i i      d       t	        j
                  ||d      }t	        j
                  ||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}}|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}}y )Nr   ztask-Y.doneztask-Yz2026-05-08T12:00:00+09:00	dev2-teamr	   r
   r6   r   r   r8   r9   Fr<   r   r?   
backfilledrA   r   z%(py1)s == %(py4)srE   rH   rI   r   skipped_existingrB   rD   )r   r   r   r   rQ   rR   r   r    r$   r%   r&   )
r'   r   r<   r1r2rT   rU   r(   rV   rW   s
             r,   test_reconcile_idempotentrh   F   s   H$J-++DJJ38 - 	 , 
 //K4::wm4wG		)	)J
B 
	)	)J
B l q q    q      q       l q q    q      q        !&Q&!Q&&&&!Q&&&!&&&Q&&&&&&&r.   c                :   | dz  }|j                          |dz  j                  t        j                  dddd      d       | d	z  }|j                  t        j                  d
i i      d       t	        j
                  ||d       t        j                  |j                  d            }|d
   d   }d}|d   }t        |      }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                   |
            d x}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}}|j"                  }d} ||      }d}||k(  }|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   ztask-A.doneztask-Az2026-05-08T09:30:45+09:00r4   ra   r   r   r8   r9   Frb   r:   r   inz0%(py1)s in %(py7)s
{%(py7)s = %(py3)s(%(py5)s)
}strrF   r   r   rM   assert %(py9)srN   status	completedr   rd   rE   rH   rI   r6   )zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} == %(py9)sentry)r   py2rG   rI   rN   zassert %(py11)srO   )r   r   r   r   rQ   rR   loads	read_textrm   r   r    r$   r!   r"   r#   r%   r&   rS   )r'   r   r<   savedrr   rT   rX   rY   r(   @py_format8@py_format10rU   rV   rW   r)   @py_assert5rZ   @py_assert7r\   s                      r,   test_backfill_2026_05_08r{   \   s*   H$J-++DJJ38 - 	 , 
 //K4::wm4wG	$$J JJ{,,g,>?E'N8$E1uZ013011<11111<1111<11111131113111011111111111?)k)?k))))?k)))?)))k)))))))99.Y.9Y.;.;....;......5...5...9...Y......;........r.   c                >   | dz  }|j                          |dz  j                  t        j                  dddd      d       | d	z  }|j                  t        j                  d
i i      d       t	        j
                  ||d       t        j                  |j                  d            }|d
   d   }d}|d   }t        |      }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                   |
            d x}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}}y )Nr   ztask-B.doneztask-Bz2026-05-09T14:32:00z	dev3-team)r	   r   teamr   r   r8   r9   Frb   r;   r   rj   rl   rm   rn   ro   rN   rp   rq   r   rd   rE   rH   rI   )r   r   r   r   rQ   rR   rt   ru   rm   r   r    r$   r!   r"   r#   r%   r&   )r'   r   r<   rv   rr   rT   rX   rY   r(   rw   rx   rU   rV   rW   s                 r,   test_backfill_2026_05_09r~   q   s   H$J-++DJJ)8 - 	 , 
 //K4::wm4wG	$$J JJ{,,g,>?E'N8$E1uZ013011<11111<1111<11111131113111011111111111?)k)?k))))?k)))?)))k)))))))r.   c                   | dz  }|j                          |dz  j                  t        j                  ddddddd	d
d      d       | dz  }|j                  t        j                  di i      d       t	        j
                  ||d       |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}}t        j                  |      }|d   d   }	dD ]  }
|
|	v}|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                  |	      rt        j                  |	      nddz  }t        j                   |
 d      dz   d |iz  }t        t        j                  |            d } y )!Nr   ztask-T.doneztask-Tz2026-05-08T10:00:00+09:00r`   zthis should never be persistedz	sk-secretd      )inputoutput)r	   r
   r6   raw_responseapi_keytokensr   r   r8   r9   Frb   r   rK   )z%(py1)s not in %(py3)s
saved_text)rF   r   r   r   )r   r   r   )z%(py0)s not in %(py2)s	forbiddenrr   )r   rs   z& should not appear in reconciled entryz
>assert %(py4)srG   )r   r   r   r   rQ   rR   ru   r   r    r$   r!   r"   r#   r%   r&   rt   _format_assertmsg)r'   r   r<   r   rT   r(   r*   r+   rv   rr   r   r)   @py_format3rV   s                 r,   test_reconcile_no_token_leakager      s   H$J-++DJJ383/8 -  ,  //K4::wm4wG	$$J &&&8J+>++++>+++>++++++++++++++++(;j((((;j(((;((((((j(((j(((((((JJz"E'N8$E: \	%[[[y[[[[[[y[[[y[[[[[[[[[[[[[)4Z'[[[[[[[\r.   )!__doc__
__future__r   builtinsr!   _pytest.assertion.rewrite	assertionrewriter   r   syspathlibr   rm   __file__resolveparents
_REPO_ROOTpathremoveinsert	dashboardr   "scripts.reconcile_task_timers_2543reconcile_task_timers_2543rQ   r-   r2   r^   rh   r{   r~   r    r.   r,   <module>r      s    O "    
 h'')11!45
 CHHHHOOJ CHH :   21A.',/**(\r.   