
    aEih                     t   d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
ZddlZdZdZd Z ej                          d        Z ej                          d        Z G d	 d
      Zd Z G d d      Z G d d      Z G d d      ZdZdZ G d d      Z G d d      Z G d d      Z G d d      Zy)up   
아르고스 (테스터) — event-queue.py 전체 테스트
대상: /home/jay/workspace/memory/event-queue.py
    N)Path)/home/jay/workspace/memory/event-queue.pyz/home/jay/workspace/promptsc                      t         j                  j                  dt              } t         j                  j	                  |       }| j
                  j                  |       |S )uJ   event-queue.py를 importlib로 로드 (하이픈 포함 파일명 대응).event_queue)	importlibutilspec_from_file_locationEVENT_QUEUE_PYmodule_from_specloaderexec_module)specmodules     2/home/jay/workspace/teams/dev1/test_event_queue.py_import_event_queuer      sC    >>11-PD^^,,T2FKKF#M    c                 "    t        | dz        }|S )uF   테스트마다 독립적인 임시 큐 파일 경로를 제공한다.ztest-event-queue.json)str)tmp_pathqfs     r   tmp_queue_filer   &   s     
X//	0BIr   c                 :    t               }|j                  |       S )u3   EventQueue 인스턴스 (임시 큐 파일 사용).
queue_file)r   
EventQueue)r   r   s     r   eqr   -   s      !"F77r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestFIFOOrderu6   enqueue 3건 후 FIFO 순서대로 peek/dequeue 확인c                     |j                  dddd       |j                  dddd       |j                  ddd	d
       |j                         }|J d       |d   dk(  sJ d|d    d       y)uO   enqueue 3건 후 peek은 가장 먼저 넣은 이벤트를 반환해야 한다.task_completetask-A	dev1-team
/path/a.mdtask-B	dev2-team
/path/b.mdtask-C	dev3-team
/path/c.mdNu,   peek()은 None을 반환하면 안 됩니다task_idu&   첫 peek은 task-A이어야 하지만     반환)enqueuepeek)selfr   firsts      r   test_fifo_enqueue_and_peekz(TestFIFOOrder.test_fifo_enqueue_and_peek;   s    


?Hk<H


?Hk<H


?Hk<H	 P"PP Y8+o/UV[\eVfUggn-oo+r   c                    |j                  dddd       |j                  dddd       |j                  ddd	d
       |j                         }|d   dk(  sJ |j                  |d         }|J |d   dk(  sJ |j                         }|J d       |d   dk(  sJ d|d    d       |j                  |d         }|d   dk(  sJ |j                         }|J d       |d   dk(  sJ d|d    d       y)u?   dequeue 순서가 enqueue 순서와 동일해야 한다 (FIFO).r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   idNu4   task-A dequeue 후 peek은 task-B이어야 합니다u-   두 번째 peek은 task-B이어야 하지만 r+   u4   task-B dequeue 후 peek은 task-C이어야 합니다u-   세 번째 peek은 task-C이어야 하지만 )r,   r-   dequeue)r.   r   r/   	removed_asecond	removed_bthirds          r   test_fifo_dequeue_orderz%TestFIFOOrder.test_fifo_dequeue_orderE   sB   


?Hk<H


?Hk<H


?Hk<H 	Y8+++JJuT{+	$$$#x/// !Y#YY!i H,x0]^den^o]ppw.xx,JJvd|,	#x/// 	 X"XX Y8+v/\]bcl]m\nnu-vv+r   c                    |j                  dddd       |j                  dddd       |j                  ddd	d
       |j                         dk(  sJ |j                         }|j                  |d          |j                         dk(  sJ |j                         }|j                  |d          |j                         dk(  sJ y)u)   dequeue 후 count가 감소해야 한다.r    r!   r"   r#   r$   r%   r&   r'   r(   r)      r2         N)r,   countr-   r3   )r.   r   r/   r5   s       r   'test_fifo_count_decreases_after_dequeuez5TestFIFOOrder.test_fifo_count_decreases_after_dequeue^   s    


?Hk<H


?Hk<H


?Hk<HxxzQ	


5;xxzQ


6$< xxzQr   c                     |j                  dddd       |j                         }|j                  |d          |j                  d      }|d   D cg c]  }|d	   	 }}d|v sJ d
       yc c}w )u@   dequeue된 이벤트는 processed 목록에 존재해야 한다.r    r!   r"   r#   r2   Tinclude_processed	processedr*   u.   dequeue된 task-A가 processed에 없습니다N)r,   r-   r3   list_events)r.   r   r/   resulteprocessed_idss         r   test_fifo_processed_listz&TestFIFOOrder.test_fifo_processed_listn   su    


?Hk<H	


5;$7/5k/BC!9CC=(Z*ZZ( Ds   A,N)__name__
__module____qualname____doc__r0   r8   r>   rG    r   r   r   r   8   s    @pw2 [r   r   c                 8   | \  }}ddl m} |j                  dd      }|j                  |      }|j                  j                  |       |j                  |      }	 |j                  dd| d| d	d
| d      }|d   S # t        $ r}d| cY d}~S d}~ww xY w)uK   멀티프로세스 워커: 각 프로세스가 이벤트 하나씩 enqueue.r   Nr   r   r   r    ztask-Pdevz-teamz/path/pz.mdr2   ERROR:)	importlib.utilr   r	   r   r   r   r   r,   	Exception)	argsr   idx_ilur   r   r   evtrE   s	            r   _worker_enqueuerV   }   s    OJ!''7bcD""4(FKKF#			j		1BjjF3%.CuE:JgVYUZZ]L^_4y s|s   #B 	B
BBBc                       e Zd ZdZd Zd Zy)TestConcurrentEnqueueuN   멀티프로세스 동시 enqueue — 파일 잠금으로 충돌 없음 확인c           	         d}t        j                  |      5 }|j                  t        t	        |      D cg c]  }||f c}      }ddd       D cg c]'  }t        |t              s|j                  d      s&|) }}|r
J d|        t               }|j                  |      }	|	j                         }
|
|k(  sJ d| d|
 d	       yc c}w # 1 sw Y   xY wc c}w )
uF   5개 프로세스가 동시에 enqueue 후 count == 5이어야 한다.   	processesNrO   u   enqueue 중 에러 발생: r   u	   count가 u   이어야 하지만 r+   )multiprocessingPoolmaprV   range
isinstancer   
startswithr   r   r=   )r.   r   	num_procspooliresultsrerrorsr   r   r=   s              r   test_concurrent_enqueue_countz3TestConcurrentEnqueue.test_concurrent_enqueue_count   s    	!!I6 	a$hheT]N^0_.!1D0_`G	a %V
1c(:q||H?U!VVA8AAz %&.9
	!\Yyk9MeWT[#\\! 1`	a 	a Ws.   CCCC +C =C CCc           	         d}t        j                  |      5 }|j                  t        t	        |      D cg c]  }||f c}      }ddd       D cg c]&  }t        |t              r|j                  d      r%|( }}t        |      |k(  sJ d| dt        |       d       t        |      t        t        |            k(  s
J d|        yc c}w # 1 sw Y   xY wc c}w )	u@   동시 enqueue된 이벤트 ID가 모두 유니크해야 한다.rZ   r[   NrO   u   성공한 enqueue가 u   개여야 하지만 u   개u   중복 ID 발생: )
r]   r^   r_   rV   r`   ra   r   rb   lenset)r.   r   rc   rd   re   rf   rg   idss           r   "test_concurrent_enqueue_unique_idsz8TestConcurrentEnqueue.test_concurrent_enqueue_unique_ids   s    	!!I6 	a$hheT]N^0_.!1D0_`G	a "YQ*Q*<hAWqYY3x9$j(=i[H\]`ad]e\ffi&jj$3x3s3x=(D,>se*DD( 1`	a 	a Zs(   CCC&C#<C#CC N)rH   rI   rJ   rK   ri   rn   rL   r   r   rX   rX      s    X] 	Er   rX   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestEmptyQueueuF   빈 큐에서 peek/dequeue 호출 시 에러 없이 None 반환 확인c                 >    |j                         }|J d| d       y)u4   빈 큐에서 peek()은 None을 반환해야 한다.Nu(   빈 큐 peek은 None이어야 하지만 r+   )r-   r.   r   rD   s      r   test_peek_empty_queuez$TestEmptyQueue.test_peek_empty_queue   s'    ~Y!I&QXYY~r   c                 @    |j                  d      }|J d| d       y)uB   존재하지 않는 ID로 dequeue 시 None을 반환해야 한다.nonexistentNu:   존재하지 않는 ID dequeue는 None이어야 하지만 r+   )r3   rr   s      r   test_dequeue_nonexistent_eventz-TestEmptyQueue.test_dequeue_nonexistent_event   s,    M*~k![\b[ccjkk~r   c                 .    |j                         dk(  sJ y)u2   빈 큐에서 count()는 0을 반환해야 한다.r   N)r=   )r.   r   s     r   test_count_empty_queuez%TestEmptyQueue.test_count_empty_queue   s    xxzQr   c                 8    |j                         }|d   g k(  sJ y)u@   빈 큐에서 list_events()는 빈 queue를 반환해야 한다.queueNrC   rr   s      r   test_list_empty_queuez$TestEmptyQueue.test_list_empty_queue   s     !g"$$$r   c                 P    |j                  d      }|d   g k(  sJ |d   g k(  sJ y)uZ   빈 큐에서 list_events(include_processed=True)는 빈 processed도 반환해야 한다.Tr@   rz   rB   Nr{   rr   s      r   test_list_all_empty_queuez(TestEmptyQueue.test_list_all_empty_queue   s7    $7g"$$$k"b(((r   N)	rH   rI   rJ   rK   rs   rv   rx   r|   r~   rL   r   r   rp   rp      s     PZ
l
%
)r   rp   c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestCLIu,   subprocess를 이용한 CLI 명령 테스트c                 r    t         j                  t        g|z   d|gz   }t        j                  |dd      }|S )u   CLI 명령 실행 헬퍼.z--queue-fileT)capture_outputtext)sys
executabler
   
subprocessrun)r.   rR   r   cmdrD   s        r   _runzTestCLI._run   s6    ~~~.58TTDtDr   c                     | j                  g d|      }|j                  dk(  sJ d|j                          t        j                  |j
                        }|d   dk(  sJ |d   dk(  sJ |d   d	k(  sJ d
|v sJ y)u2   enqueue CLI 명령이 JSON을 반환해야 한다.	r,   --typer    	--task-idtask-99--teamr"   --reportz/tmp/test.mdr   u   enqueue 실패: r*   r   typer    statuspendingr2   Nr   
returncodestderrjsonloadsstdoutr.   r   rD   datas       r   test_cli_enqueue_returns_jsonz%TestCLI.test_cli_enqueue_returns_json   s    @

   A%I)9&--'II%zz&--(I)+++F|...H~***t||r   c                     | j                  g d|       | j                  dg|      }|j                  dk(  sJ d|j                          t        j                  |j
                        }|d   dk(  sJ y)u/   peek CLI 명령이 JSON을 반환해야 한다.r   r-   r   u   peek 실패: r*   r   Nr   r   s       r   test_cli_peek_returns_jsonz"TestCLI.test_cli_peek_returns_json   su     			@	

 F8^4  A%Fv}}o'FF%zz&--(I)+++r   c                     | j                  dg|      }|j                  dk(  sJ d|j                          t        j                  |j
                        }|ddik(  s
J d|        y)uE   빈 큐에서 peek CLI는 {"status": "empty"}를 반환해야 한다.r-   r   u   빈 큐 peek 실패: r   emptyu%   예상: {"status": "empty"}, 실제: Nr   r   s       r    test_cli_peek_empty_returns_jsonz(TestCLI.test_cli_peek_empty_returns_json   sm    F8^4  A%N)>v}}o'NN%zz&--('**`.YZ^Y_,``*r   c                 &   | j                  g d|       | j                  g d|       | j                  dg|      }|j                  dk(  sJ d|j                          t        |j                  j                               }|dk(  sJ d| d       y	)
u2   count CLI 명령이 숫자를 반환해야 한다.)	r,   r   r    r   task-1r   r"   r   z
/tmp/t1.md)	r,   r   r    r   task-2r   r"   r   z
/tmp/t2.mdr=   r   u   count 실패: r;   u   count는 2이어야 하지만 r+   N)r   r   r   intr   strip)r.   r   rD   r=   s       r   test_cli_count_returns_numberz%TestCLI.test_cli_count_returns_number   s     			>	

 			>	

 G9n5  A%G'GG%FMM'')*zJ;E7'JJzr   c                    | j                  g d|      }t        j                  |j                        d   }| j                  d|g|      }|j                  dk(  sJ d|j
                          t        j                  |j                        }|d   |k(  sJ |d   dk(  sJ | j                  dg|      }t        |j                  j                               dk(  sJ y	)
uZ   dequeue CLI 명령이 이벤트를 제거하고 처리 완료 JSON을 반환해야 한다.r   r2   r3   r   u   dequeue 실패: r   rB   r=   N)r   r   r   r   r   r   r   r   )r.   r   
enq_resultevent_idrD   r   count_results          r   test_cli_dequeue_removes_eventz&TestCLI.test_cli_dequeue_removes_event  s     YY@


 ::j//06 Ix0.A  A%I)9&--'II%zz&--(DzX%%%H~,,, yy'N;<&&,,./1444r   c                     | j                  ddg|      }|j                  dk7  sJ d       t        j                  |j                        }d|v sJ y)uK   존재하지 않는 ID dequeue CLI는 에러 코드를 반환해야 한다.r3   zevt-999r   uF   존재하지 않는 ID dequeue는 nonzero 반환코드여야 합니다errorN)r   r   r   r   r   r   s       r   *test_cli_dequeue_nonexistent_returns_errorz2TestCLI.test_cli_dequeue_nonexistent_returns_error"  sO    Iy1>B  A%o'oo%zz&--($r   c                 *   | j                  g d|       | j                  ddg|      }|j                  dk(  sJ d|j                          t        j                  |j
                        }d|v sJ t        |d         dk(  sJ |d   d   d   d	k(  sJ y
)uK   list --pending CLI 명령이 pending 이벤트 JSON을 반환해야 한다.)	r,   r   r    r   task-L1r   r"   r   z
/tmp/l1.mdlistz	--pendingr   u   list --pending 실패: rz   r<   r*   r   N)r   r   r   r   r   r   rk   r   s       r   test_cli_list_pendingzTestCLI.test_cli_list_pending)  s    		>	

 FK0.A  A%P)@'PP%zz&--($4=!Q&&&G}Q	*i777r   c                    | j                  g d|      }t        j                  |j                        d   }| j                  d|g|       | j                  ddg|      }|j                  dk(  sJ d|j
                          t        j                  |j                        }d|v sJ d	|v sJ t        |d	         d
k(  sJ |d	   d   d   dk(  sJ y)uD   list --all CLI 명령이 processed 이벤트도 포함해야 한다.)	r,   r   r    r   task-L2r   r"   r   z
/tmp/l2.mdr2   r3   r   z--allr   u   list --all 실패: rz   rB   r<   r*   r   N)r   r   r   r   r   r   rk   )r.   r   r   r   rD   r   s         r   $test_cli_list_all_includes_processedz,TestCLI.test_cli_list_all_includes_processed7  s     YY>


 ::j//06 			9h'8FG,n=  A%L)<V]]O'LL%zz&--($d"""4$%***K #I.);;;r   N)rH   rI   rJ   rK   r   r   r   r   r   r   r   r   r   rL   r   r   r   r      s4    6,aK$5*8<r   r   z-/home/jay/.claude/hooks/user-prompt-submit.shz%/home/jay/.cokacdir/workspace/autosetc                   "    e Zd ZdZd Zd Zd Zy)TestUserPromptSubmitHookuM   user-prompt-submit.sh 훅 실행 시 이벤트 큐 count 포함 출력 확인c                    d}t        |dd      5 }|j                         }ddd       	 t               }|j                         }|j	                  dddd	      }|j                         }|d
k\  sJ d       t        j                  dt        i      }	t        j                  dt        g|	ddd      }
|
j                  |
j                  z   }d|v rd|v s
J d|        t        |      |v sJ d| d|        	 t        |dd      5 }|j                         ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w# t        |dd      5 }|j                         ddd       w # 1 sw Y   w xY wxY w)uj   큐에 이벤트가 있을 때 훅 실행 시 '미처리 이벤트 N건' 메시지를 출력해야 한다.2/home/jay/workspace/memory/events/event-queue.jsonrg   utf-8encodingNr    ztask-hook-testr"   z/tmp/hook-test.mdr<   u%   훅 테스트 전 count가 0입니다cwdbashT   inputr   r   timeout   미처리 이벤트u   건uL   훅 출력에 '미처리 이벤트 N건' 메시지가 없습니다.
출력:
u   훅 출력에 count (u/   )가 포함되어 있지 않습니다.
출력:
w)openreadr   r   r,   r=   r   dumpsANU_CWDr   r   HOOK_SCRIPTr   r   r   write)r.   r   default_queueforiginal_contentr   
eq_default
test_eventcount_before
hook_inputrD   outputs               r   /test_hook_shows_pending_count_when_events_existzHTestUserPromptSubmitHook.test_hook_shows_pending_count_when_events_existY  s    M -w7 	(1 vvx	(%	*(*F**,J#++!1;@SJ
 &++-L1$M&MM$ UG$45J^^% #F ]]V]]2F )F2u `ag`hiF
 |$. '~5fgmfno. mS7; *q()* *O	( 	(N* *mS7; *q()* * *s;   DC
D7 D+D(+D47E-E!	E-!E*&E-c                    d}t        |dd      5 }|j                         }t        j                  |      }ddd       j	                  d      rt        j                  d       	 t        j                  dt        i      }t        j                  d	t        g|d
d
d      }|j                  |j                  z   }d|vsd|v s
J d|        t        |dd      5 }|j                         ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w# t        |dd      5 }|j                         ddd       w # 1 sw Y   w xY wxY w)u[   큐가 비어있을 때 훅 실행 시 '미처리 이벤트' 메시지가 없어야 한다.r   rg   r   r   Nrz   uB   현재 큐가 비어있지 않아 이 테스트를 건너뜁니다r   r   Tr   r   r   u   0건uJ   빈 큐인데 '미처리 이벤트' 메시지가 출력됩니다.
출력:
r   )r   r   r   r   getpytestskipr   r   r   r   r   r   r   r   )r.   r   r   r   original_datar   rD   r   s           r   -test_hook_no_pending_message_when_queue_emptyzFTestUserPromptSubmitHook.test_hook_no_pending_message_when_queue_empty  sB   L -w7 	91 vvx JJ'78M	9
 W%KK\]	*UG$45J^^% #F ]]V]]2F )6&F:J ^_e^fgJ mS7; *q()* *3	9 	92* *mS7; *q()* * *s<   &C5&A&D D5C>D
ED7.	E7E <Ec                     d}t        j                  d|i      }t        j                  dt        g|ddd      }|j
                  |j                  z   }d|vs
J d|        y	)
uP   anu가 아닌 cwd로 훅 실행 시 이벤트 큐 메시지가 없어야 한다.z/home/jay/workspace/teams/dev1r   r   Tr   r   r   uC   dev1 cwd인데 이벤트 큐 메시지가 출력됩니다.
출력:
N)r   r   r   r   r   r   r   )r.   dev1_cwdr   rD   r   s        r   %test_hook_non_anu_cwd_no_queue_outputz>TestUserPromptSubmitHook.test_hook_non_anu_cwd_no_queue_output  sq    3ZZ 12
[!
 .$F2 	
STZS[\	
2r   N)rH   rI   rJ   rK   r   r   r   rL   r   r   r   r   V  s    W.*`*B
r   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestBuildPromptEnqueueuY   team_prompts.py build_prompt()가 event-queue.py enqueue 명령을 포함하는지 확인c                     ddl }|j                  j                  dd      }|j                  j                  |      }|j                  j                  |       |j                  S )u1   team_prompts.build_prompt를 import하여 반환.r   Nteam_promptsz+/home/jay/workspace/prompts/team_prompts.py)r   r   r	   r   r   r   build_prompt)r.   r   r   r   s       r   _get_build_promptz(TestBuildPromptEnqueue._get_build_prompt  sS    ~~559
 006'"""r   c                 \    | j                         } |ddd      }d|v sJ d|dd  d       y)	ub   dev1-team (direct 타입) 프롬프트에 event-queue.py enqueue 명령이 포함되어야 한다.r"   	task-test	test descevent-queue.py enqueueuc   dev1-team 프롬프트에 'event-queue.py enqueue' 문자열이 없습니다.
프롬프트 일부:
N  ...r   r.   r   prompts      r   &test_dev1_team_prompt_contains_enqueuez=TestBuildPromptEnqueue.test_dev1_team_prompt_contains_enqueue  J    --/k;D'61 	
%%+DS\N#7	
1r   c                 \    | j                         } |ddd      }d|v sJ d|dd  d       y)	ub   dev3-team (direct 타입) 프롬프트에 event-queue.py enqueue 명령이 포함되어야 한다.r(   r   r   r   uc   dev3-team 프롬프트에 'event-queue.py enqueue' 문자열이 없습니다.
프롬프트 일부:
Nr   r   r   r   s      r   &test_dev3_team_prompt_contains_enqueuez=TestBuildPromptEnqueue.test_dev3_team_prompt_contains_enqueue  r   r   c                 d    | j                         } |ddd      }dD ]  }||v rJ d| d        y)uk   dev1-team 프롬프트의 enqueue 명령에 --type, --task-id, --team, --report 인수가 있어야 한다.r"   r   r   r   r   r   r   u*   dev1-team 프롬프트에 enqueue 인수 '   '가 없습니다Nr   r.   r   r   args       r   .test_dev1_team_prompt_enqueue_has_correct_argszETestBuildPromptEnqueue.test_dev1_team_prompt_enqueue_has_correct_args  K    --/k;D@ 	fC&=e$NseSd"ee=	fr   c                 d    | j                         } |ddd      }dD ]  }||v rJ d| d        y)uk   dev3-team 프롬프트의 enqueue 명령에 --type, --task-id, --team, --report 인수가 있어야 한다.r(   r   r   r   u*   dev3-team 프롬프트에 enqueue 인수 'r   Nr   r   s       r   .test_dev3_team_prompt_enqueue_has_correct_argszETestBuildPromptEnqueue.test_dev3_team_prompt_enqueue_has_correct_args  r   r   c                 N    | j                         } |ddd      }d|v sJ d       y)ue   dev2-team (direct 타입) 프롬프트에도 event-queue.py enqueue 명령이 포함되어야 한다.r%   r   r   r   uM   dev2-team 프롬프트에 'event-queue.py enqueue' 문자열이 없습니다.Nr   r   s      r   &test_dev2_team_prompt_contains_enqueuez=TestBuildPromptEnqueue.test_dev2_team_prompt_contains_enqueue  s6    --/k;D'61 	
[	
1r   N)
rH   rI   rJ   rK   r   r   r   r   r   r   rL   r   r   r   r     s%    c	#

ff
r   r   c                       e Zd ZdZd Zd Zy)TestEventIdFormatu   이벤트 ID 형식 검증c                     |j                  dddd      }|d   j                  d      sJ d|d           |d   dd	 }|j                         s
J d
|        y	)u=   enqueue된 이벤트의 ID는 evt-NNN 형식이어야 한다.r    ztask-Xr"   z
/path/x.mdr2   zevt-u-   ID 형식이 evt-로 시작해야 하지만:    Nu,   ID 숫자 부분이 숫자여야 하지만: )r,   rb   isdigit)r.   r   rU   suffixs       r   test_event_id_formatz&TestEventIdFormat.test_event_id_format  sp    jj(KN4y##F+h/\]`ae]f\g-hh+T12~~X#OPVx!XXr   c                    |j                  dddd      }|j                  dddd      }|j                  dddd      }t        |d	   d
d       }t        |d	   d
d       }t        |d	   d
d       }||cxk  r|k  sn J d| d| d|        y)u>   순차 enqueue 시 ID 시퀀스 번호가 증가해야 한다.r    r   r"   z
/path/1.mdr   z
/path/2.mdztask-3z
/path/3.mdr2   r   Nu(   ID 시퀀스가 증가해야 하지만: z, )r,   r   )r.   r   evt1evt2evt3seq1seq2seq3s           r   "test_sequential_ids_are_increasingz4TestEventIdFormat.test_sequential_ids_are_increasing  s    zz/8[,Ozz/8[,Ozz/8[,O4:ab>"4:ab>"4:ab>"d!T!d%MdVSUVZU[[]^b]c#dd!r   N)rH   rI   rJ   rK   r  r
  rL   r   r   r   r     s    $Y
er   r   c                       e Zd ZdZd Zd Zy)TestListEventsu%   list_events() 필터링 동작 검증c                 d    |j                  dddd       |j                         }d|v sJ d|vsJ y)uU   list_events()는 기본적으로 queue만 포함하고 processed는 없어야 한다.r    r!   r"   r#   rz   rB   N)r,   rC   rr   s      r   test_list_pending_onlyz%TestListEvents.test_list_pending_only  s<    


?Hk<H!&   &(((r   c                     |j                  dddd      }|j                  |d          |j                  d      }d|v sJ d	|v sJ t        |d	         d
k(  sJ y)uU   list_events(include_processed=True)는 queue와 processed 모두 포함해야 한다.r    r!   r"   r#   r2   Tr@   rz   rB   r<   N)r,   r3   rC   rk   )r.   r   rU   rD   s       r   test_list_all_includes_bothz*TestListEvents.test_list_all_includes_both   sj    jj(KN


3t9$7&   f$$$6+&'1,,,r   N)rH   rI   rJ   rK   r  r  rL   r   r   r  r    s    /)-r   r  )rK   r   r]   osr   r   tempfiletimepathlibr   rP   r   r   r
   PROMPTS_DIRr   fixturer   r   r   rV   rX   rp   r   r   r   r   r   r   r  rL   r   r   <module>r     s   
   	  
      =+   8 8>[ >[JE EF) )Bz< z<B >
1c
 c
T4
 4
ve e6- -r   