
    i                       d Z ddlm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
 e	e      j                         j                  d   ZddZ e
j                          dd       ZddZdd	Zdd
ZddZddZddZddZddZddZddZddZy)u
  tests/regression/test_automation_audit_helpers.py — task-2471+1 자동화 회귀.

회장 명령 (E): regression test 5건 — 자동화 헬퍼 함수 (audit jsonl 보존,
sha256 chunked, slugify) 의 회귀 차단.

검증 대상:
- ``_sha256_file`` chunked 처리 (대용량 OOM-safe)
- ``_append_audit_jsonl`` parent dir 자동 생성 + 한 줄당 한 record
- ``_slugify_reason`` archive path suffix 안전 변환
- ``ESCALATED_AUDIT_LOG`` / ``BRANCH_CLEANUP_LOG`` /
  ``CONSISTENCY_AUDIT_LOG`` 경로 상수 검증
    )annotationsN)Path   c                p   | j                  dt        |             t        j                  j	                  dt        t
        dz  dz              }|r|j                  sJ t        j                  j                  |      }|t        j                  |j                  <   |j                  j                  |       |S )NWORKSPACE_ROOTtaskctl_helpers_isolatedscriptsz
taskctl.py)setenvstr	importlibutilspec_from_file_location	WORKSPACEloadermodule_from_specsysmodulesnameexec_module)monkeypatchrootspecmods       a/home/jay/workspace/.worktrees/task-2471+1-dev2/tests/regression/test_automation_audit_helpers.py_load_taskctlr      s    'T3>>11"I	!L01D DKK
..
)
)$
/C CKK		KKC J    c                    t        ||       S )N)r   )tmp_pathr   s     r   r   r   '   s    h//r   c                    |dz  }d}|j                  |       t        j                  |      j                         }| j	                  |      |k(  sJ y )Nz	small.binsx   hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
write_byteshashlibsha256	hexdigest_sha256_filer   r   pdataexpecteds        r   *test_sha256_file_matches_hashlib_for_smallr*   ,   sM    ;A DMM$~~d#--/HA(***r   c                    |dz  }ddz  }|j                  |       t        j                  |      j                         }| j	                  |      |k(  sJ y )Nz	large.bin   ai  r    r&   s        r   "test_sha256_file_chunked_for_larger-   4   sR    ;A>"DMM$~~d#--/HA(***r   c                Z    |dz  }|j                          | j                  |      dk(  sJ y )Nz	empty.bin@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855)touchr%   )r   r   r'   s      r   test_sha256_empty_filer1   <   s7    ;AGGIM	N	Nr   c                   |dz  dz  dz  }|j                   j                         rJ | j                  |ddi       |j                         sJ |j                  d      }t	        j
                  |j                               d   dk(  sJ y )Ndeeplynestedaudit.jsonlk   utf-8encoding)parentexists_append_audit_jsonl	read_textjsonloadsstrip)r   r   loglines       r   *test_append_audit_jsonl_creates_parent_dirrD   E   s    
X

(=
8Czz  """C#q*::<<=='=*D::djjl#C(A---r   c                   |dz  }t        d      D ]  }| j                  ||d| d        |j                  d      j                         D cg c]  }|j	                         s| }}t        |      dk(  sJ |D cg c]  }t        j                  |       }}|D cg c]  }|d   	 c}t        t        d            k(  sJ y c c}w c c}w c c}w )Nr5      r)imsgr8   r9   rH   )	ranger=   r>   
splitlinesrA   lenr?   r@   list)r   r   rB   rH   llinesparsedrG   s           r   'test_append_audit_jsonl_appends_recordsrQ   N   s    
]
"C1X ?1qW%=>? =='=2==?1779E  u:??%*+djjm+F+"#qAcF#tE!H~555 ,#s   C	&C	 C"Cc                    |dz  }ddd}| j                  ||       |j                  d      }t        j                  |j	                               }|d   dk(  sJ y )Nzaudit_unicode.jsonlu   한글 테스트 ✅z	task-test)reasontask_idr8   r9   rS   )r=   r>   r?   r@   rA   )r   r   rB   recordtextrP   s         r   $test_append_audit_jsonl_unicode_saferW   Z   s_    
*
*C.;GFC(=='=*DZZ

%F(5555r   c                    | j                  d      dk(  sJ | j                  d      dk(  sJ | j                  d      dk(  sJ | j                  d      dk(  sJ y )Nzstale 30min!!!zstale-30minz/path/with/slashzpath-with-slash archivedz!!!)_slugify_reason)r   s    r   'test_slugify_reason_strips_unsafe_charsr\   c   si    /0MAAA126GGGGr"j000u%333r   c                J    d}| j                  |      }t        |      dk  sJ y )Naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(   )r[   rL   )r   long_reasonouts      r   test_slugify_reason_max_lenrb   j   s'    K


k
*Cs8r>>r   c                    dD ]D  }t        | |      }|j                  j                  dk(  sJ | d|        |j                  dk(  rDJ  y)uO   3 audit jsonl 경로 모두 ``orchestration-audit/`` 하위에 위치 (정책).)ESCALATED_AUDIT_LOGBRANCH_CLEANUP_LOGCONSISTENCY_AUDIT_LOGzorchestration-auditz! not under orchestration-audit/: z.jsonlN)getattrr;   r   suffix)r   
const_namepaths      r   2test_audit_log_constants_under_orchestration_auditrk   p   sd     	'

 sJ'{{#88 	
l;D6B	
8 {{h&&&	'r   c                j    | j                   | j                  | j                  h}t        |      dk(  sJ y)u4   3 audit log은 서로 다른 파일 (mixing 방지).   N)rd   re   rf   rL   )r   pathss     r   !test_audit_log_constants_distinctro   ~   s8     	!!E
 u:??r   c                f    | j                   }|D ch c]  \  }}|	 }}}h d}||k(  sJ yc c}}w )uW   ``_FINISH_TASK_STAGES`` 가 14정상 경로 중 자동화 가능 8단계 모두 포함.>   MERGEDPR_OPENVERIFIED	COMMITTED
CI_PENDINGREVIEW_READYGEMINI_PENDINGHUMAN_APPROVEDN)_FINISH_TASK_STAGES)r   stagess_
src_statesr)   s         r   )test_finish_task_stages_cover_normal_pathr~      s@    $$F &'1!'J'	H !!! (s   -)r   pytest.MonkeyPatchr   r   )r   r   r   r   )r   r   returnNone)r   r   )__doc__
__future__r   r"   importlib.utilr   r?   r   pathlibr   pytest__file__resolveparentsr   r   fixturer   r*   r-   r1   rD   rQ   rW   r\   rb   rk   ro   r~    r   r   <module>r      s    #    
  N""$,,Q/	
 0 0++.	664'"r   