
    Qii                     4   d Z ddlZddlZddlmZ ddlZdZeej                  vrej                  j                  de       ddl	m
Z
mZ  G d d      Z G d d	      Z G d
 d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Zy)u  TDD RED Phase 4 테스트 모음.

대상 함수 (아직 미구현):
  - orchestrator.event_bus.scan_done_events : memory/events/*.done 스캔 → incoming/ 복사

기능 요약:
  - events_dir/*.done 파일을 스캔하여 incoming_dir/로 복사
  - 원본 .done 파일은 보존 (Layer 2 독립성)
  - 이미 incoming/ 또는 processed/에 있으면 건너뜀 (중복 방지)
  - symlink이면 거부 (보안)

작성자 : 헤임달 (dev2-team tester)
날짜   : 2026-03-24
    N)Pathz/home/jay/workspace)consume_eventscan_done_eventsc                   (    e Zd ZdZd Zd Zd Zd Zy)TestSingleTeamDoneuC   T1: 단일 .done 파일 스캔 → Layer 2·3 독립 동작 확인.c                 T   |dz  }|dz  }|dz  }|j                          |j                          |j                          d}||z  j                  d       t        t        |      t        |      t        |            }||v sJ d| d|        ||z  j	                         sJ d       y	)
ut   events/에 .done 파일이 있으면 scan_done_events가 incoming/에 복사하고 파일명을 반환해야 한다.eventsincoming	processedpipeline-001.donedoneu   복사된 파일 목록에 u   이 없음: u0   incoming/에 .done 파일이 복사되지 않음Nmkdir
write_textr   strexistsselftmp_path
events_dirincoming_dirprocessed_dir
event_filecopieds          O/home/jay/workspace/.worktrees/task-2117-dev1/orchestrator/tests/test_phase4.py&test_scan_copies_done_file_to_incomingz9TestSingleTeamDone.test_scan_copies_done_file_to_incoming*   s    (
*, ;.(
	j	 ,,V4!#j/3|3Dc-FXYV#c'B:,l[aZb%cc#z)113g5gg3    c                 2   |dz  }|dz  }|dz  }|j                          |j                          |j                          d}||z  j                  d       t        t        |      t        |      t        |             ||z  j	                         sJ d       y)ut   scan_done_events 호출 후 원본 .done 파일이 events/에 그대로 남아 있어야 한다 (Layer 2 독립성).r	   r
   r   r   r   uF   scan 후 원본 .done 파일이 삭제됨 — Layer 2 독립성 위반Nr   r   r   r   r   r   r   s         r   &test_scan_preserves_original_done_filez9TestSingleTeamDone.test_scan_preserves_original_done_file;   s    (
*, ;.(
	j	 ,,V4Z#l*;S=OPZ'//1{3{{1r   c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          d}||z  j                  d       t        t        |      t        |      t        |             t	        t        |      t        |      |      }|du sJ d       ||z  j                         sJ d       ||z  j                         rJ d	       y
)uq   scan → incoming 복사 후 consume_event가 incoming → processed로 이동하고 True를 반환해야 한다.r	   r
   r   r   r   Tu5   scan 후 consume_event가 True를 반환하지 않음u*   consume 후 processed/에 파일이 없음u/   consume 후 incoming/에 파일이 남아있음Nr   r   r   r   r   r   r   r   r   r   r   r   results          r   0test_consume_event_after_scan_moves_to_processedzCTestSingleTeamDone.test_consume_event_after_scan_moves_to_processedK   s    (
*, ;.(
	j	 ,,V4Z#l*;S=OPs<0#m2DjQ~VVV~
*224b6bb4 :-557j9jj77r   c                 p   |dz  }|dz  }|dz  }|j                          |j                          |j                          d}||z  j                  d       t        t        |      t        |      t        |             t	        t        |      t        |      |       ||z  j                         sJ d       y)uX   consume_event 완료 후에도 events/의 원본 .done 파일이 보존되어야 한다.r	   r
   r   r   r   uV   consume_event 완료 후 원본 .done 파일이 삭제됨 — Layer 2 독립성 위반Nr"   r   s         r   .test_original_done_file_survives_consume_eventzATestSingleTeamDone.test_original_done_file_survives_consume_event^   s    (
*, ;.(
	j	 ,,V4Z#l*;S=OPc,']);ZH #
&( 	ml	m r   N)__name__
__module____qualname____doc__r   r    r%   r'    r   r   r   r   '   s    Mh"| k&mr   r   c                   "    e Zd ZdZd Zd Zd Zy)TestDuplicatePreventionu]   T2: 중복 방지 — 이미 incoming/ 또는 processed/에 있으면 재복사하지 않음.c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          d}||z  j                  d       t        t        |      t        |      t        |            }t        t        |      t        |      t        |            }||v sJ d| d       ||vsJ d| d	       t	        |      d
k(  sJ dt	        |       d       y)u_   scan_done_events 2회 연속 호출 시 두 번째 호출에서는 복사 0건이어야 한다.r	   r
   r   zpipeline-002.doner   u   첫 번째 scan에서 u   이 복사되지 않음u1   두 번째 scan에서 이미 incoming/에 있는 u-   을 다시 복사함 — 중복 방지 실패r   u6   두 번째 scan 복사 건수가 0이어야 하는데    건임Nr   r   r   r   len)r   r   r   r   r   r   first_copiedsecond_copieds           r   7test_second_scan_returns_empty_when_already_in_incomingzOTestDuplicatePrevention.test_second_scan_returns_empty_when_already_in_incomingz   s   (
*, ;.(
	j	 ,,V4'J\9JCP]L^_(Z#l:KSQ^M_`\)g-CJ<Of+gg)m+	y>zlJwx	y+=!Q&{*`aderas`ttz({{&r   c                 D   |dz  }|dz  }|dz  }|j                          |j                          |j                          d}||z  j                  d       ||z  j                  d       t        t        |      t        |      t        |            }||vsJ d| d       y)	uX   processed/에 이미 있는 파일은 scan_done_events가 복사하지 않아야 한다.r	   r
   r   zpipeline-already-done.doner   u   processed/에 이미 있는 u>   을 scan이 복사함 — 중복 파이프라인 시작 위험Nr   r   r   r   r   s          r   )test_scan_skips_file_already_in_processedzATestDuplicatePrevention.test_scan_skips_file_already_in_processed   s    (
*, ;.1
	j	 ,,V4		#//7!#j/3|3Dc-FXY f$	u)*5st	u$r   c                     |dz  }|dz  }|dz  }|j                          |j                          |j                          d}d}d}||z  j                  d       ||z  j                  d       ||z  j                  d       ||z  j                  d       ||z  j                  d       t        t        |      t        |      t        |            }||v sJ d| d	       ||vsJ d
| d       ||vsJ d| d       y)ui   신규 .done만 복사하고, 이미 incoming/ 또는 processed/에 있는 것은 건너뛰어야 한다.r	   r
   r   zpipeline-new.donezpipeline-in-incoming.donezpipeline-in-processed.doner   u   신규 파일    이 복사 목록에 없음u   이미 incoming/에 있는 u   이 다시 복사됨u   이미 processed/에 있는 Nr7   )	r   r   r   r   r   new_filein_incomingin_processedr   s	            r   *test_scan_copies_only_new_files_when_mixedzBTestDuplicatePrevention.test_scan_copies_only_new_files_when_mixed   s'   (
*, ;.&13	h	**62	k	!--f5	l	"..v6		#//7		%11&9!#j/3|3Dc-FXY6!Y^H:=X#YY!&(i,G}Th*ii(6)l-I,Wk+ll)r   N)r(   r)   r*   r+   r5   r8   r>   r,   r   r   r.   r.   w   s    g|*u(mr   r.   c                   "    e Zd ZdZd Zd Zd Zy)TestConcurrentDoneFilesuO   T3: 여러 .done 파일 동시 생성 → 모두 독립적으로 처리 가능.c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          g d}|D ]  }||z  j                  d        t        t        |      t        |      t        |            }t	        |      t	        |      k(  s J dt	        |       dt	        |       d       |D ].  }||v s
J | d	       ||z  j                         r%J d
| d        y)ui   events/에 여러 .done 파일이 있을 때 scan_done_events가 모두 incoming/에 복사해야 한다.r	   r
   r   )zteam-alpha.donezteam-beta.donezteam-gamma.donezteam-delta.donezteam-epsilon.doner   u   복사 건수가 u   이어야 하는데 r0   r:   u   incoming/에 
   이 없음N)r   r   r   r   r2   r   )r   r   r   r   r   event_filesefr   s           r   'test_scan_copies_all_done_files_at_oncez?TestConcurrentDoneFiles.test_scan_copies_all_done_files_at_once   s   (
*, ;.
  	1B"_((0	1 "#j/3|3Dc-FXY6{c+..}2CCDTCUUijmntjuivv|0}}. 	PB<CB4'B!CC< 2%--/O=J1OO/	Pr   c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          g d}|D ]  }||z  j                  d        t        t        |      t        |      t        |             |D ]M  }t	        t        |      t        |      |      }|du s
J | d       ||z  j                         rDJ d| d	        y
)u\   incoming/에 복사된 각 파일을 독립적으로 consume_event 할 수 있어야 한다.r	   r
   r   )zteam-A.donezteam-B.donezteam-C.doner   Tu'    소비 시 True를 반환하지 않음u   처리 후 processed/에 rB   Nr"   )r   r   r   r   r   rC   rD   r$   s           r   3test_each_copied_file_can_be_consumed_independentlyzKTestConcurrentDoneFiles.test_each_copied_file_can_be_consumed_independently   s    (
*, ;.C 	1B"_((0	1 	Z#l*;S=OP 	]B"3|#4c-6H"MFT>QbT)P#QQ>!B&..0\4MbTQ[2\\0	]r   c                 Z   |dz  }|dz  }|dz  }|j                          |j                          |j                          g d}|D ]  }||z  j                  d        t        t        |      t        |      t        |             |D ]   }||z  j	                         rJ d| d        y)	u_   여러 .done 동시 스캔 후에도 모든 원본 파일이 events/에 보존되어야 한다.r	   r
   r   )zteam-X.donezteam-Y.donezteam-Z.doner   u   원본 u3   이 scan 후 삭제됨 — Layer 2 독립성 위반Nr   )r   r   r   r   r   rC   rD   s          r   +test_scan_preserves_all_original_done_fileszCTestConcurrentDoneFiles.test_scan_preserves_all_original_done_files   s    (
*, ;.C 	1B"_((0	1 	Z#l*;S=OP 	qBO++-p<o/pp-	qr   N)r(   r)   r*   r+   rE   rG   rI   r,   r   r   r@   r@      s    YP4](qr   r@   c                   "    e Zd ZdZd Zd Zd Zy)!TestManualAndAutoChainCoexistenceua   T4: .done 원본 보존 + .done.notified 생성 — 양쪽 경로가 충돌 없이 독립 동작.c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          d}d}||z  j                  d       ||z  j                  d       t        t        |      t        |      t        |            }||v sJ d       ||z  j	                         sJ d	       ||vsJ d
       ||z  j	                         rJ d       y)us   scan_done_events가 incoming/에 복사하는 동안 .done.notified 파일이 공존해도 충돌 없어야 한다.r	   r
   r   zpipeline-chain.donezpipeline-chain.done.notifiedr   notifiedu+   scan이 .done 파일을 복사하지 않음u#   incoming/에 .done 파일이 없음u*   .done.notified가 scan 결과에 포함됨u(   .done.notified가 incoming/에 복사됨Nr   )r   r   r   r   r   r   notified_markerr   s           r   ;test_scan_copies_to_incoming_while_notified_marker_coexistsz]TestManualAndAutoChainCoexistence.test_scan_copies_to_incoming_while_notified_marker_coexists  s    (
*, ;.*
8	j	 ,,V4	o	%11*=!#j/3|3Dc-FXYV#R%RR#z)113Z5ZZ3f,Z.ZZ, ?2::<h>hh<<r   c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          d}d}||z  j                  |       t        t        |      t        |      t        |             ||z  j	                         sJ d       ||z  j                         |k(  sJ d       ||z  j	                         sJ d       y	)
uj   scan 후 원본 .done이 보존되어 chain_manager와 auto_orch 양쪽 모두 사용 가능해야 한다.r	   r
   r   zpipeline-multi-consumer.donezpipeline_id=multi-consumeru5   원본 .done이 삭제되어 Layer 2 경로 차단됨u    원본 .done 내용이 변경됨u/   Layer 3 경로용 incoming/ 복사본이 없음N)r   r   r   r   r   	read_text)r   r   r   r   r   r   original_contents          r   6test_original_done_available_for_both_paths_after_scanzXTestManualAndAutoChainCoexistence.test_original_done_available_for_both_paths_after_scan&  s    (
*, ;.3
7	j	 ,,-=>Z#l*;S=OP Z'//1j3jj1Z'2248HHlJllH z)113f5ff3r   c                 $   |dz  }|dz  }|dz  }|j                          |j                          |j                          |dz  j                  d       t        t        |      t        |      t        |            }t	        |      dk(  sJ d       y)	ub   .done.notified 마커가 있어도 scan_done_events 결과가 .done 파일만 포함해야 한다.r	   r
   r   z$pipeline-notified-only.done.notifiedrM   r   u7   .done.notified만 있는데 scan이 파일을 복사함Nr1   r   r   r   r   r   r   s         r   0test_notified_marker_does_not_affect_scan_resultzRTestManualAndAutoChainCoexistence.test_notified_marker_does_not_affect_scan_result<  s    (
*, ;. 
<	<HHT!#j/3|3Dc-FXY6{aZ!ZZr   N)r(   r)   r*   r+   rO   rS   rV   r,   r   r   rK   rK     s    ki0g,[r   rK   c                   "    e Zd ZdZd Zd Zd Zy)TestDoneClearRenameuD   T5: .done → .done.clear rename 후 scan이 무시하는지 확인.c                 H   |dz  }|dz  }|dz  }|j                          |j                          |j                          d}||z  j                  d       t        t        |      t        |      t        |            }||vsJ d       ||z  j	                         rJ d       y)	u\   .done.clear 파일은 *.done 패턴이 아니므로 scan_done_events가 무시해야 한다.r	   r
   r   zpipeline-003.done.clearclearedu.   .done.clear 파일이 scan 결과에 포함됨u,   .done.clear 파일이 incoming/에 복사됨Nr   )r   r   r   r   r   cleared_filer   s          r   "test_done_clear_is_ignored_by_scanz6TestDoneClearRename.test_done_clear_is_ignored_by_scanU  s    (
*, ;.0	l	"..y9!#j/3|3Dc-FXY6)[+[[) </779i;ii99r   c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          d}d}||z  j                  d       t        t        |      t        |      t        |            }||v sJ d       ||z  j	                  ||z         ||z  j                         rJ d       t        t        |      t        |      t        |            }t        |      d	k(  s
J d
|        y)uM   scan → .done.clear rename → 재scan 시 재처리 없음을 확인한다.r	   r
   r   zpipeline-anu.donezpipeline-anu.done.clearr   u#   첫 번째 scan에서 복사 실패u#   .done → .done.clear rename 실패r   u;   rename 후 재scan에서 불필요한 복사가 발생함: N)r   r   r   r   renamer   r2   )	r   r   r   r   r   r   
clear_filer3   r4   s	            r   0test_scan_then_rename_to_clear_then_no_reprocesszDTestDoneClearRename.test_scan_then_rename_to_clear_then_no_reprocessf  s   (
*, ;.(
.
	j	 ,,V4 (J\9JCP]L^_\)P+PP) 
j	 ((j)@A+335\7\\5 )Z#l:KSQ^M_`=!Q&u*efset(uu&r   c                 N   |dz  }|dz  }|dz  }|j                          |j                          |j                          |dz  j                  d       |dz  j                  d       t        t        |      t        |      t        |            }d|vsJ d       d|v sJ d	       y
)uF   task-123.done.clear 형식은 scan_done_events가 무시해야 한다.r	   r
   r   task-123.done.clearrZ   zpipeline-valid.doner   u/   task-123.done.clear가 scan 결과에 포함됨u/   유효한 .done 파일이 scan 결과에 없음Nr7   rU   s         r   /test_invalid_pattern_task_done_clear_is_ignoredzCTestDoneClearRename.test_invalid_pattern_task_done_clear_is_ignored  s    (
*, ;.	+	+77	B	+	+77?!#j/3|3Dc-FXY$F2e4ee2$.a0aa.r   N)r(   r)   r*   r+   r\   r`   rc   r,   r   r   rX   rX   R  s    Nj"v4br   rX   c                       e Zd ZdZd Zd Zy)TestSymlinkRejectionu4   scan_done_events의 symlink 보안 거부 테스트.c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          |dz  }|j                  d       |dz  }|j                  |       |j                         sJ d       t	        t        |      t        |      t        |            }d|vsJ d       |dz  j                         rJ d	       y
)uh   events/의 .done 파일이 symlink이면 scan_done_events가 무시하고 복사하지 않아야 한다.r	   r
   r   z	real.doner   pipeline-symlink.doneu   symlink 생성 실패uI   symlink .done 파일이 scan 결과에 포함됨 — 보안 거부 실패u@   symlink .done이 incoming/에 복사됨 — 보안 거부 실패N)r   r   
symlink_to
is_symlinkr   r   r   )r   r   r   r   r   	real_filesymlink_filer   s           r   #test_scan_rejects_symlink_done_filez8TestSymlinkRejection.test_scan_rejects_symlink_done_file  s    (
*, ;.{*	V$!$;;	*&&(A*AA(!#j/3|3Dc-FXY&f4  	B  7B  	B422
&( 	WV	W  r   c                 z   |dz  }|dz  }|dz  }|j                          |j                          |j                          |dz  j                  d       |dz  }|j                  d       |dz  j                  |       t        t	        |      t	        |      t	        |            }d|v sJ d       d|vsJ d	       y
)uL   실제 .done 파일은 복사하고 symlink .done은 건너뛰어야 한다.r	   r
   r   zpipeline-real.doner   zreal_target.donerg   u.   실제 .done 파일이 복사 목록에 없음u2   symlink .done 파일이 복사 목록에 포함됨N)r   r   rh   r   r   )r   r   r   r   r   rj   r   s          r   ,test_scan_copies_real_file_but_skips_symlinkzATestSymlinkRejection.test_scan_copies_real_file_but_skips_symlink  s    (
*, ;. 
*	*66v> 11	V$	-	-99)D!#j/3|3Dc-FXY#v-_/__-&f4j6jj4r   N)r(   r)   r*   r+   rl   rn   r,   r   r   re   re     s    >W.kr   re   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestEdgeCasesuP   빈 디렉토리, 미존재 디렉토리, 잘못된 패턴 등 엣지 케이스.c                     |dz  }|dz  }|dz  }|j                          |j                          |j                          t        t        |      t        |      t        |            }|g k(  sJ d| d       y)ub   events_dir에 .done 파일이 없을 때 scan_done_events는 빈 리스트를 반환해야 한다.r	   r
   r   u/   빈 디렉토리인데 빈 리스트가 아닌    를 반환함Nr   r   r   rU   s         r   (test_empty_events_dir_returns_empty_listz6TestEdgeCases.test_empty_events_dir_returns_empty_list  s|    (
*, ;.!#j/3|3Dc-FXY|dNvhVcdd|r   c                     |dz  }|dz  }|dz  }|j                          |j                          t        t        |      t        |      t        |            }|g k(  sJ d| d       y)um   events_dir가 존재하지 않을 때 scan_done_events는 예외 없이 빈 리스트를 반환해야 한다.nonexistent_eventsr
   r   u5   미존재 디렉토리인데 빈 리스트가 아닌 rr   Nrs   rU   s         r   .test_nonexistent_events_dir_returns_empty_listz<TestEdgeCases.test_nonexistent_events_dir_returns_empty_list  ss     44
*, ;.!#j/3|3Dc-FXY|jTU[T\\ijj|r   c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          t        t        |      t        |      t        |            }t        |t              sJ dt        |              y)u7   scan_done_events는 항상 list를 반환해야 한다.r	   r
   r   u2   scan_done_events 반환 타입이 list가 아님: N)r   r   r   
isinstancelisttype)r   r   r   r   r   r$   s         r   test_scan_returns_list_typez)TestEdgeCases.test_scan_returns_list_type  s    (
*, ;.!#j/3|3Dc-FXY&$'l+]^bci^j]k)ll'r   c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          |dz  j                  d       |dz  j                  d       |dz  j                  d       |dz  j                  d	       |d
z  j                  d       t        t        |      t        |      t        |            }t	        |      dk(  sJ dt	        |       d       d
|v sJ d       y)uY   .txt, .yaml, .json 등 .done이 아닌 파일은 scan_done_events가 무시해야 한다.r	   r
   r   zpipeline-001.txtznot donezpipeline-001.yamlzpipeline-001.jsonREADMEreadmer   r      u6   유효한 .done 파일이 1개인데 복사 건수가 r0   u'   .done 파일이 복사 목록에 없음Nr1   rU   s         r   )test_non_done_extension_files_are_ignoredz7TestEdgeCases.test_non_done_extension_files_are_ignored  s   (
*, ;.	(	(44Z@	)	)55jA	)	)55jA	h	**84	)	)55f=!#j/3|3Dc-FXY6{am#YZ]^dZeYffl!mm"f,W.WW,r   c                 X   |dz  }|dz  }|dz  }|j                          |j                          |j                          g d}|D ]  }||z  j                  d        t        t        |      t        |      t        |            }t	        |      dk(  sJ dt	        |       d|        y	)
ue   *.done.clear, *.done.notified 등 확장자 패턴이 *.done과 다른 파일은 무시해야 한다.r	   r
   r   )zpipeline-001.done.clearzpipeline-002.done.notifiedzpipeline-003.done.bakrb   invalidr   u!   잘못된 패턴 파일들인데 u   건이 복사됨: Nr1   )r   r   r   r   r   invalid_patternsfnamer   s           r   #test_done_clear_pattern_not_matchedz1TestEdgeCases.test_done_clear_pattern_not_matched
  s    (
*, ;.
 & 	7E%++I6	7 "#j/3|3Dc-FXY6{al#DS[MQcdjck!llr   N)	r(   r)   r*   r+   rt   rw   r|   r   r   r,   r   r   rp   rp     s#    Ze
kmX(mr   rp   c                   "    e Zd ZdZd Zd Zd Zy)TestConsumeEventIndependenceue   consume_event의 기존 동작이 scan_done_events 도입 후에도 그대로 유지되는지 확인.c                    |dz  }|dz  }|j                          |j                          |dz  }|j                  d       |dz  }|j                  |       t        t	        |      t	        |      d      }|du sJ d       y)	uS   scan 도입 후에도 consume_event는 incoming/의 symlink를 거부해야 한다.r
   r   zreal_event.doner   rg   FuH   consume_event가 symlink를 거부하지 않음 — 보안 거부 실패N)r   r   rh   r   r   )r   r   r   r   rj   symlink_in_incomingr$   s          r   4test_consume_event_still_rejects_symlink_in_incomingzQTestConsumeEventIndependence.test_consume_event_still_rejects_symlink_in_incoming)  s    *, ;.00	V$*-DD&&y1s<0#m2DF]^j jjr   c                    |dz  }|dz  }|dz  }|j                          |j                          |j                          d}||z  j                  d       t        t        |      t        |      t        |             t	        t        |      t        |      |      }|du sJ d       ||z  j                         rJ d       ||z  j                         sJ d	       y
)uf   scan으로 복사된 파일에 대해 consume_event의 원자적 rename이 정상 동작해야 한다.r	   r
   r   zpipeline-atomic.doner   Tu   원자적 rename이 실패함u.   rename 후 incoming/에 파일이 남아있음u)   rename 후 processed/에 파일이 없음Nr"   r#   s          r   ,test_consume_event_atomic_rename_still_workszITestConsumeEventIndependence.test_consume_event_atomic_rename_still_works9  s    (
*, ;.+
	j	 ,,V4Z#l*;S=OPs<0#m2DjQ~>>>~ :-557i9ii7
*224a6aa4r   c                     |dz  }|dz  }|j                          |j                          t        t        |      t        |      d      }|du sJ d       y)ue   scan 없이 incoming/에 파일이 없는 상태에서 consume_event는 False를 반환해야 한다.r
   r   zpipeline-not-there.doneFuC   incoming/에 없는 파일인데 consume_event가 True를 반환함N)r   r   r   )r   r   r   r   r$   s        r   :test_consume_event_returns_false_when_file_not_in_incomingzWTestConsumeEventIndependence.test_consume_event_returns_false_when_file_not_in_incomingL  sY    *, ;.s<0#m2DF_`e eer   N)r(   r)   r*   r+   r   r   r   r,   r   r   r   r   &  s    ok b&	fr   r   )r+   ossyspathlibr   pytestWORKSPACE_ROOTpathinsertorchestrator.event_busr   r   r   r.   r@   rK   rX   re   rp   r   r,   r   r   <module>r      s    
 
  
 '!HHOOA~&
 CHm Hm`Cm CmVAq AqR?[ ?[N=b =bJ.k .klQm Qmr/f /fr   