
    i;                        d Z ddlZddlZddlZej                  j                  dd       ddlmZmZ dddZ	dZ
dZd	Zd
e de de
 dZd
e de Ze de dZdZddz  ZdedefdZd Zd Zd Zd Zd Zedk(  rLeeeeegZdZdZeD ],  Z	  edej2                           e         ed       edz  Z.  ed!e d"e d#       yy# e$ rZ  ed e         edz  ZY dZ [ ZdZ [ ww xY w)$uK  
test_task_106_1.py - _build_glm_prompt() 수정사항 검증 테스트

태스크 106-1: glm_message 변수 내 task_desc 직접 삽입 → 파일 경로 참조 변경 검증

변경 전: f"작업 ID: {task_id}. {task_desc}. "
변경 후: f"작업 지시서: {WORKSPACE_ROOT}/memory/tasks/{task_id}.md 를 읽고 작업 수행. "
    Nz/home/jay/workspace)_build_glm_promptWORKSPACE_ROOTz	dev8-teamglm)nametypeztask-106-testnormalzpython3 z/memory/task-timer.py start z --team u    --desc "테스트"z/memory/task-timer.py end z/memory/reports/.md2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABi  promptreturnc                 t    t        j                  d| t         j                        }|r|j                  d      S y)u   
    프롬프트에서 openclaw agent 명령어 내 glm_message 부분을 추출한다.
    `openclaw agent --agent main -m "..."` 형태에서 -m "..." 의 값을 반환.
    z+-m\s+"(.*?)"(?:\s+--json|\s+--deliver|\s*$)    )researchDOTALLgroup)r   matchs     1/home/jay/workspace/teams/dev2/test_task_106_1.pyextract_glm_messager   !   s/     IIDfbiiXE{{1~    c            
         t        t        t        t        t        t
        t        t        t              } t        t        t        t        t        t
        t        t        t              }t        |       }t        |      }|dk7  sJ d       |dk7  sJ d       t        dt        |              t        dt        |              t        |      t        |      k(  sJ dt        |       dt        |              y)	u   
    요구사항 1: 짧은/긴 task_desc로 프롬프트를 생성했을 때,
    glm_message 부분의 길이가 task_desc 길이와 무관하게 일정해야 한다.
    r   u:   짧은 task_desc로 생성 시 glm_message가 비어있음u7   긴 task_desc로 생성 시 glm_message가 비어있음u)     [짧은 task_desc] glm_message 길이: u'     [긴  task_desc] glm_message 길이: u<   glm_message 길이가 task_desc에 따라 달라짐: 짧은=u   , 긴=N)r   TEAMTEAM_IDTASK_IDSHORT_TASK_DESCLEVELTIMER_START	TIMER_ENDREPORT_PATHLONG_TASK_DESCr   printlen)prompt_shortprompt_long	glm_shortglm_longs       r   0test_glm_message_length_independent_of_task_descr)   -   s    
 %gwYL $gwYK
 $L1I";/H?XXX?r>TTT>	5c)n5E
FG	3CM?
CDy>S]* i.!H	8*r   c                  
   dt         fdt        ffD ]p  \  } }t        t        t        t
        |t        t        t        t              }t        |      }|dk7  s
J |  d       ||vsJ |  d|dd  d       t        d	|  d
       r y)u^   
    요구사항 2: glm_message에 task_desc 문자열이 포함되지 않아야 한다.
       짧은   긴r   8    task_desc 케이스: glm_message를 추출하지 못함u_    task_desc 케이스: glm_message에 task_desc 문자열이 포함되어 있음
  glm_message: N   z...  [u8    task_desc] glm_message에 task_desc 미포함 확인 OK)r   r"   r   r   r   r   r   r   r    r!   r   r#   )
desc_label	task_descr   glm_messages       r   +test_glm_message_does_not_contain_task_descr3   J   s     $,_"=~?V!W Z
I"'7IuK
 *&1b iZL0h"ii + 	
l )$3/05	
+ 	J<WXYZr   c            
          t        t        t        t        t        t
        t        t        t              } g d}|D ]   }|| v sJ d| d       t        d| d       " y)ud   
    요구사항 3: 기존 키워드(openclaw, --agent main, --json, --deliver) 보존 확인.
    )openclawz--agent mainz--jsonz	--deliveru   필수 키워드 'u   '가 프롬프트에 없음u     키워드 'u   ' 존재 확인 OKN)
r   r   r   r   r   r   r   r    r!   r#   )r   required_keywordskeywords      r   +test_glm_message_contains_required_keywordsr8   ]   sn     gwYF
 L$ ;&  	
 	)DE	
  	gY&89:	;r   c                      dt         fdt        ffD ]S  \  } }t        t        t        t
        |t        t        t        t              }d| |v s
J |  d       t        d|  d       U y)uc   
    요구사항 4: 본문 '내용:' 필드에는 여전히 task_desc가 존재해야 한다.
    r+   r,   u   내용: uD    task_desc 케이스: 본문 '내용:' 필드에 task_desc가 없음r/   uA    task_desc] 본문 '내용:' 필드에 task_desc 존재 확인 OKN)r   r"   r   r   r   r   r   r   r    r!   r#   )r0   r1   r   s      r   #test_prompt_body_contains_task_descr:   n   s     $,_"=~?V!W 
c
I"'7IuK
 )%/ 	
l^_	
/ 	J<`ab
cr   c                  "   dt          d} dt        fdt        ffD ]r  \  }}t        t        t
        t         |t        t        t        t              }t        |      }|dk7  s
J | d       | |v sJ | d|  d|        t        d	| d
|  d       t y)ut   
    요구사항 5: glm_message에 파일 경로 참조(/memory/tasks/{task_id}.md)가 포함되어야 한다.
    z/memory/tasks/r	   r+   r,   r   r-   u;    task_desc 케이스: glm_message에 파일 경로 참조 'u   '가 없음
  glm_message: r/   u#    task_desc] glm_message에 경로 'u   ' 포함 확인 OKN)r   r   r"   r   r   r   r   r   r    r!   r   r#   )expected_pathr0   r1   r   r2   s        r   -test_glm_message_contains_file_path_referencer=      s     %WIS1M#+_"=~?V!W f
I"'7IuK
 *&1b iZL0h"ii + 	
lUVcUd e)],	
+ 	J<B=/Qcdefr   __main__u
   
[실행] z	  => PASSr   z  => FAIL: u	   
결과: z	 passed, z failed)!__doc__r   sysospathinsertprompts.team_promptsr   r   r   r   r   r   r   r    r!   r   r"   strr   r)   r3   r8   r:   r=   __name__testspassedfailedtest_fnr#   AssertionErrore r   r   <module>rN      s   
 
 	 ( ) B U+

((DWIXV]U^^st~&&@	J	  0	=t	 	 	:Z&;"c"f* z 	933+5E FF 	K 0 0123IIaKF 
Jvhixw
78) "  	Ks#$aKF	s   )C

C)C$$C)