
    ci/                     f   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ej                  j                  dd      Zej                  j                  e      Zej                  j                  e       ej                   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d Zd Zd ZdZ d Z!d Z"y)u  
task-123.1 통합 테스트
작성자: 아르고스 (테스터, dev1-team)
대상:
  1. /home/jay/workspace/memory/pending_actions.py - PendingActions 모듈 단위 테스트
  2. /home/jay/workspace/dispatch.py - followup_action 연동 검증
  3. /home/jay/workspace/prompts/team_prompts.py - pending-actions 문구 포함 여부
  4. /home/jay/.claude/hooks/user-prompt-submit.sh - bash 구문 검증
    Npending_actionsz-/home/jay/workspace/memory/pending_actions.pyc                 2   t        | dz        }t        |      }t        j                  j	                  |      sJ d       t        |d      5 }t        j                  |      }ddd       dv sJ d|v sJ |d   g k(  sJ |d   g k(  sJ y# 1 sw Y   *xY w)	uA   빈 디렉토리에서 초기화 시 JSON 파일이 생성된다.pending-actions.jsonactions_fileu%   JSON 파일이 생성되어야 한다utf-8encodingNactionsresolved)strPendingActionsospathexistsopenjsonload)tmp_pathr   pafdatas        1/home/jay/workspace/teams/dev1/test_task_123_1.pytest_init_creates_filer   '   s    x"889L	\	2B77>>,'P)PP'	lW	- yy|	?b   
r!!! s   BBc                     t        | dz        }t        |      }|j                  d      }|j                         }t	        |      dk(  sJ |d   d   |d   k(  sJ |d   d   dk(  sJ |d   d	   d
k(  sJ y)u;   action 추가 후 pending 목록에 포함되어야 한다.r   r   u   테스트 약속 1description   r   idr   statuspendingN)r   r   
add_actionget_pendinglen)r   r   r   resultr!   s        r   test_add_actionr&   4   s    x"889L	\	2B]]';]<FnnGw<11:dvd|+++1:m$(<<<<1:h9,,,    c                     t        | dz        }t        |      }|j                  d      }|j                  d      }|j                  d      }|d   dk(  sJ |d   d	k(  sJ |d   d
k(  sJ y)uJ   연속 추가 시 ID가 pa-001, pa-002, ... 순서로 증가해야 한다.r   r   u   약속 1r   u   약속 2u   약속 3r   pa-001zpa-002zpa-003N)r   r   r"   r   r   r   a1a2a3s         r   test_add_action_id_incrementsr.   @   s    x"889L	\	2B	:	.B	:	.B	:	.Bd8xd8xd8xr'   c                    t        | dz        }t        |      }|j                  d      }|d   |j                        }|J d       |d   k(  sJ |d   d	k(  sJ |d
   J d       |j	                         }t        fd|D              sJ d       |j                  d      }t        fd|d	   D              sJ d       y)uY   resolve 후 actions에서 제거, resolved에 추가, resolved_at 설정되어야 한다.r   r   u   이행할 약속r   r   Nu-   resolve 결과가 None이 아니어야 한다r    r   resolved_atu%   resolved_at이 설정되어야 한다c              3   .   K   | ]  }|d    k7    ywr   N .0a	action_ids     r   	<genexpr>z&test_resolve_action.<locals>.<genexpr>\   s     5qw)#5   u$   actions에서 제거되어야 한다Tinclude_resolvedc              3   .   K   | ]  }|d    k(    ywr2   r3   r4   s     r   r8   z&test_resolve_action.<locals>.<genexpr>`   s     Bqw)#Br9   u#   resolved 목록에 있어야 한다)r   r   r"   resolve_actionr#   alllist_allany)r   r   r   addedr   r!   all_datar7   s          @r   test_resolve_actionrC   L   s    x"889L	\	2BMM&8M9EdI  +HP!PPD>Y&&&H+++M".W0WW. nnG5W55]7]]5 {{D{1HBXj-ABBiDiiBr'   c                 b    t        | dz        }t        |      }|j                  d      }|J y)u?   존재하지 않는 ID resolve 시 None을 반환해야 한다.r   r   zpa-999N)r   r   r=   r   r   r   r%   s       r   test_resolve_nonexistentrF   c   s6    x"889L	\	2Bx(F>>r'   c                    t        | dz        }t        |      }|j                         dk(  sJ |j                  d      }|j                  d      }|j                  d      }|j                         dk(  sJ |j	                  |d	          |j                         d
k(  sJ |j	                  |d	          |j	                  |d	          |j                         dk(  sJ y)u3   추가/해결 후 카운트가 정확해야 한다.r   r   r   u   약속 Ar   u   약속 Bu   약속 C   r      N)r   r   count_pendingr"   r=   r*   s         r   test_count_pendingrK   k   s    x"889L	\	2B"""	:	.B	:	.B	:	.B"""bh"""bhbh"""r'   c                 |   t        | dz        }t        |      }|j                  d      }|j                  d      }|j                  |d          |j	                  d      }d	|v sJ d
|v sJ t        |d	         dk(  sJ |d	   d   d   |d   k(  sJ t        |d
         dk(  sJ |d
   d   d   |d   k(  sJ y)uD   include_resolved=True 시 resolved 항목이 포함되어야 한다.r   r      pending 약속r      resolve할 약속r   Tr:   r   r   r   r   Nr   r   r"   r=   r?   r$   r   r   r   r+   r,   r%   s         r   test_list_all_with_resolvedrQ      s    x"889L	\	2B	#3	4B	#6	7Bbh[[$[/Fvi !Q&&&)Q%D111vj!"a'''*a &"T(222r'   c                 :   t        | dz        }t        |      }|j                  d      }|j                  d      }|j                  |d          |j	                  d      }d	|v sJ d
|vsJ d       t        |d	         dk(  sJ |d	   d   d   |d   k(  sJ y)uT   include_resolved=False(기본) 시 resolved 항목이 포함되지 않아야 한다.r   r   rM   r   rN   r   Fr:   r   r   u;   include_resolved=False 시 resolved 키가 없어야 한다r   r   NrO   rP   s         r   test_list_all_without_resolvedrS      s    x"889L	\	2B	#3	4B	#6	7Bbh[[%[0FV#b%bb#vi !Q&&&)Q%D111r'   c                 v   t        | dz        }|dz   }t        |      }|j                  d       ddl}|j	                  ||       t        |dd	
      5 }|j                  d       ddd       t        |      }|j                         }t        |      dk(  sJ d       |d   d   dk(  sJ y# 1 sw Y   HxY w)uF   JSON 파일이 깨진 경우 .bak 파일에서 복구되어야 한다.r   z.bakr   u   백업에서 복구할 약속r   r   Nwr   r	   z{ invalid json !!!r   u=   백업에서 복구된 pending 항목이 1개이어야 한다r   )	r   r   r"   shutilcopy2r   writer#   r$   )r   r   backup_filer   rV   r   pa2r!   s           r   test_backup_recoveryr[      s    x"889L'K	\	2BMM=M> 
LL{+ 
lC'	2 &a	$%& l
3CooGw<1]]]1:m$(GGGG& &s   B//B8c                     t        | dz        }t        |      }|j                  d      }|d   dk(  sJ |d   dk(  sJ |j                         dk(  sJ y	)
u.   빈 description도 추가 가능해야 한다.r   r    r   r   r)   r   r   N)r   r   r"   rJ   rE   s       r   test_empty_description_acceptedr^      sh    x"889L	\	2B]]r]*F$<8###- B&&&"""r'   c                      t         j                  j                  dd       dt         j                  v rt         j                  d   } nt	        j
                  d      } t        | d      sJ d       | j                  J y)uN   dispatch.py가 PendingActions를 정상적으로 import하는지 확인한다.r   /home/jay/workspacedispatchr   u<   dispatch 모듈에 PendingActions 속성이 있어야 한다N)sysr   insertmodules	importlibimport_modulehasattrr   )dispatch_mods    r   %test_dispatch_imports_pending_actionsri      sh    HHOOA,-S[[ {{:. ..z:<!12r4rr2&&222r'   c                  "   t         j                  j                  dd       dt         j                  v rt         j                  d   } nt	        j
                  d      } t        j                  | j                        }d|j                  v sJ d       y)uL   dispatch() 함수가 followup_action 파라미터를 받는지 확인한다.r   r`   ra   followup_actionu>   dispatch()에 followup_action 파라미터가 있어야 한다N)
rb   r   rc   rd   re   rf   inspect	signaturera   
parameters)rh   sigs     r   .test_dispatch_function_accepts_followup_actionrp      sm    HHOOA,-S[[ {{:. ..z:


L11
2C.p0pp.r'   c                  b    t        j                  g ddd      } d| j                  v sJ d       y)u?   dispatch.py CLI에 --followup 옵션이 있는지 확인한다.)python3z/home/jay/workspace/dispatch.pyz--helpTcapture_outputtextz
--followupu4   --followup 옵션이 help 출력에 있어야 한다N)
subprocessrunstdoutr%   s    r   %test_dispatch_cli_has_followup_optionrz      s3    ^^@F
 6==(`*``(r'   c                     t         j                  j                  dd       t        t         j                  j                               D ]  } d| v st         j                  | =  ddlm} d} |d|dd      }d	|v sJ d
       d|v sJ d       d}t        j                  j                  |      rt        j                  |       yy)uX   dev1-team 프롬프트에 pending_actions 확인 지시가 포함되는지 확인한다.r   r`   team_promptsbuild_promptztask-test-1z	dev1-team   테스트 작업normalpending_actions.py pendinguQ   dev1-team 프롬프트에 'pending_actions.py pending' 문구가 있어야 한다   미이행 약속uG   dev1-team 프롬프트에 '미이행 약속' 문구가 있어야 한다z//home/jay/workspace/memory/tasks/task-test-1.mdNrb   r   rc   listrd   keysprompts.team_promptsr~   r   r   removemod_namer~   task_idprompt	task_files        r   +test_direct_prompt_includes_pending_actionsr      s    HHOOA,-))+, &X%H%& 2G+w0BHMF'61 \[\1' RQR' BI	ww~~i 
		) !r'   c                     t         j                  j                  dd       t        t         j                  j                               D ]  } d| v st         j                  | =  ddlm} d} |d|dd      }d	|v sJ d
       d|v sJ d       d}t        j                  j                  |      rt        j                  |       yy)uX   dev3-team 프롬프트에 pending_actions 확인 지시가 포함되는지 확인한다.r   r`   r|   r}   ztask-test-2z	dev3-teamr   r   r   uQ   dev3-team 프롬프트에 'pending_actions.py pending' 문구가 있어야 한다r   uG   dev3-team 프롬프트에 '미이행 약속' 문구가 있어야 한다z//home/jay/workspace/memory/tasks/task-test-2.mdNr   r   s        r   (test_glm_prompt_includes_pending_actionsr     s    HHOOA,-))+, &X%H%& 2G+w0BHMF'61 \[\1' RQR' BI	ww~~i 
		) !r'   z-/home/jay/.claude/hooks/user-prompt-submit.shc                      t        j                  ddt        gdd      } | j                  dk(  sJ d| j                          y)uB   user-prompt-submit.sh의 bash 구문이 유효한지 확인한다.bashz-nTrs   r   u   bash 구문 오류:
N)rv   rw   	HOOK_PATH
returncodestderrry   s    r   test_hook_syntax_validr   #  sK    ^^	y!F
 ! 0
/0!r'   c                      t        t        d      5 } | j                         }ddd       dv sJ d       d|v sJ d       d|v sJ d	       y# 1 sw Y   +xY w)
uQ   user-prompt-submit.sh에 pending-actions 체크 코드가 있는지 확인한다.r   r	   Nzpending_actions.py countu=   hook에 'pending_actions.py count' 코드가 있어야 한다r   u?   hook에 'pending_actions.py pending' 코드가 있어야 한다r   u8   hook에 '미이행 약속' 문자열이 있어야 한다)r   r   read)r   contents     r   (test_hook_contains_pending_actions_checkr   .  s~    	i'	* a&&( &0 HGH0'72 JIJ2( CBC( s   AA)#__doc__importlib.utilre   rl   r   r   rv   rb   pytestutilspec_from_file_location_pa_specmodule_from_spec_pa_modloaderexec_moduler   r   r&   r.   rC   rF   rK   rQ   rS   r[   r^   ri   rp   rz   r   r   r   r   r   r3   r'   r   <module>r      s       	  
  >>113 ..
)
)(
3   G $''
"	-	 j.#(3"2H.#
3	qa06 <	0
Cr'   