Ë
    ÝÝj¼  ã                   óþ   — 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mZ ddlm	Z	m
Z
 ddlmZmZ ddlmZmZmZmZ  ee«      j)                  «       j*                  d   Z G d„ d	e«      Zed
k(  r ej2                  «        yy)uV   Shadow-Modus: entscheidet und protokolliert, fÃ¼hrt nie aus; echte Absender-/Chat-IDs.é    N)ÚPath)Úload_gateway_configÚparse_gateway_config)ÚGatewayÚHandling)ÚOWNER_IDÚGatewayTestCaseÚconfig_dictÚphotoé   c                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚShadowTestsc                 óò  — | j                  «       }|j                  | j                  dd«      «      }| j                  |j                  |j
                  ft        j                  df«       | j                  |«      d   }| j                  |d   |d   |d   ft        t        df«       | j                  |d   «       | j                  |d	   d
   d«       | j                  dt        j                  |«      «       y )Né*   z#public analyseÚreplyéÿÿÿÿÚ	sender_idÚchat_idÚ
message_idÚshadowÚroutingÚselectedÚcodexz	test-user)Úgatewayr   ÚrequestÚassertEqualÚhandlingÚplanned_handlingr   ÚSHADOW_DECISIONÚdecision_recordsr   Ú
assertTrueÚassertNotInÚjsonÚdumps)Úselfr   ÚresultÚrecords       ú2/home/aria/aria-v3-dev/python/tests/test_shadow.pyÚtest_shadow_logs_real_idsz%ShadowTests.test_shadow_logs_real_ids   sÛ   € Ø—,‘,“.ˆØ—‘ §¡¨RÐ1BÓ CÓDˆØ×Ñ˜&Ÿ/™/¨6×+BÑ+BÐCÄh×F^ÑF^Ð`gÐEhÔiØ×&Ñ& wÓ/°Ñ3ˆØ×Ñ˜& Ñ-¨v°iÑ/@À&ÈÑBVÐWÔZbÔdlÐnpÐYqÔrØ�‰˜˜xÑ(Ô)Ø×Ñ˜ 	Ñ*¨:Ñ6¸Ô@Ø×Ñ˜¤d§j¡j°Ó&8Õ9ó    c           	      ól  — | j                  «       }dD ]?  \  }}| j                  |j                  | j                  ||«      «      j                  «       ŒA | j                  |j                  d   j                  j                  g «       | j                  | j                  j                  g «       | j                  | j                  dz  dz  j                  «       «       | j                  |j                  «       d   d   d   d   d«       | j                  |j                  «       d   d	   d   d   d«       y )
N))r   z	#public a)é   Úhallo)é   úAngebot BMW)é   z/codex #public br   Ústateznonces.jsonÚbackendsÚbudgetÚjobsr   Úclaude)r   ÚassertFalser   r   Ú	deliveredr   ÚadaptersÚrunnerÚcallsÚsinkÚrootÚexistsÚstatus)r%   r   r   Útexts       r(   Útest_shadow_never_executesz&ShadowTests.test_shadow_never_executes   s	  € Ø—,‘,“.ˆØ mò 	WÑˆJ˜Ø×Ñ˜WŸ^™^¨D¯L©L¸ÀTÓ,JÓK×UÑUÕVð	Wà×Ñ˜×)Ñ)¨'Ñ2×9Ñ9×?Ñ?ÀÔDØ×Ñ˜Ÿ™×,Ñ,¨bÔ1Ø×Ñ˜$Ÿ)™) gÑ-°Ñ=×EÑEÓGÔHØ×Ñ˜Ÿ™Ó)¨*Ñ5°gÑ>¸xÑHÈÑPÐRSÔTØ×Ñ˜Ÿ™Ó)¨*Ñ5°hÑ?ÀÑIÈ&ÑQÐSTÕUr*   c                 óÜ  — | j                  «       }d}|j                  | j                  dd|› �t        «       g¬«      «       |j	                  | j                  d|› d�«      «       | j
                  dz  dz  j                  d	¬
«      }| j                  ||«       | j                  |«      d   }| j                  |d   t        d|› �«      «       | j                  t        |d   «      d«       y )NzGEHEIMTEXT-7f3a9cé   z#public )Úattachmentsé   z zweites malr1   zdecisions.jsonlúutf-8©Úencodingr   Úprompt_charsÚprompt_sha256é@   )r   r   r   r   Úhandler<   Ú	read_textr"   r    r   Úlen)r%   r   ÚmarkerÚrawr'   s        r(   Ú test_shadow_log_has_no_plaintextz,ShadowTests.test_shadow_log_has_no_plaintext&   sØ   € Ø—,‘,“.ˆØ$ˆØ�‰�t—|‘| A¨°&°Ð':ÌËÈ	�|ÓRÔSØ�‰�t—|‘| A¨&¨°Ð'>Ó?Ô@Ø�y‰y˜7Ñ"Ð%6Ñ6×AÑAÈ7ÐAÓSˆØ×Ñ˜ Ô%Ø×&Ñ& wÓ/°Ñ2ˆØ×Ñ˜ Ñ/´°xÀ¸xÐ5HÓ1IÔJØ×Ñœ˜V OÑ4Ó5°rÕ:r*   c                 óä  — | j                  «       }|j                  | j                  dd«      «       | j                  |j	                  | j                  dd«      «      j
                  d«       | j                  |j                  | j                  dd«      «      j
                  d«       | j                  |j	                  | j                  dd«      «      j                  t        j                  «       y )Né   z/claudeé   z	#public xr   é	   r5   )	r   r   r   r   rK   Úbackendr   r   ÚREPLY)r%   r   s     r(   Ú'test_shadow_state_separate_from_executez3ShadowTests.test_shadow_state_separate_from_execute1   s©   € Ø—,‘,“.ˆØ�‰�t—|‘| A yÓ1Ô2Ø×Ñ˜Ÿ™¨¯©°Q¸Ó(DÓE×MÑMÈwÔWØ×Ñ˜Ÿ™¨¯©°Q¸Ó(DÓE×MÑMÈxÔXà×Ñ˜Ÿ™¨¯©°Q¸Ó(DÓE×NÑNÔPX×P^ÑP^Õ_r*   c                 óÒ  — g d¢}| j                  «       }t        |d«      D ]¸  \  }}|j                  | j                  ||«      «      }|j	                  | j                  ||«      «      }| j                  |¬«      5  | j                  |j                  |j                  «       | j                  |j                  |j                  j                  «       d d d «       Œº y # 1 sw Y   ŒÅxY w)N)z#public Bitte debug mein Pythonr-   r/   z/codex Angebot BMWz/statusz
/somethingéd   )r?   )r   Ú	enumerater   r   rK   ÚsubTestr   rU   r   r   Úvalue)r%   ÚtextsÚ	shadow_gwÚindexr?   r   Úhandleds          r(   Útest_shadow_matches_handlez&ShadowTests.test_shadow_matches_handle9   sÍ   € òˆà—L‘L“Nˆ	Ü$ U¨CÓ0ò 	R‰KˆE�4Ø×%Ñ% d§l¡l°5¸$Ó&?Ó@ˆFØ×&Ñ& t§|¡|°E¸4Ó'@ÓAˆGØ—‘ 4�Ó(ñ RØ× Ñ  §¡°·±ÔAØ× Ñ  ×!8Ñ!8¸'×:JÑ:J×:PÑ:PÔQ÷Rð Rñ	R÷Rð Rús   Á;ACÃC&	c                 óÞ   — | j                  ddgi«      }|j                  | j                  dd«      «      }| j                  |j                  |j
                  ft        j                  df«       y )NÚallowed_modesÚexecuteé
   r-   ÚMODE_NOT_ENABLED)r   r   r   r   r   Úcoder   ÚERROR)r%   r   r&   s      r(   Ú#test_shadow_mode_disabled_in_configz/ShadowTests.test_shadow_mode_disabled_in_configD   sW   € Ø—,‘, °)°Ð=Ó>ˆØ—‘ §¡¨R°Ó 9Ó:ˆØ×Ñ˜&Ÿ/™/¨6¯;©;Ð7¼(¿.¹.ÐJ\Ð9]Õ^r*   c                 ó:  — t        j                  t        dz  dz  j                  d¬«      «      }t	        | j
                  dz  «      |d<   t	        | j
                  dz  dz  «      |d	   d
<   dt        gi|d<   t        t        |«      | j                  ¬«      }| j                  |j                  | j                  dd«      «      j                  d«       | j                  |j                  | j                  dd«      «      j                  t         j"                  «       y )NÚconfigzgateway.example.jsonrE   rF   r1   Ú	state_dirÚkeyszclearance.keyÚ	clearanceÚkey_fileÚallowed_sender_idsÚauth)Úclocké   r-   rf   é   )r#   ÚloadsÚPACKAGE_ROOTrL   Ústrr<   r   r   r   rr   r   rK   r   rg   r   r   r   r   )r%   Úexampler   s      r(   Ú'test_execute_disabled_in_example_configz3ShadowTests.test_execute_disabled_in_example_configI   så   € Ü—*‘*œl¨XÑ5Ð8NÑN×YÑYÐcjÐYÓkÓlˆÜ" 4§9¡9¨wÑ#6Ó7ˆ�ÑÜ+.¨t¯y©y¸6Ñ/AÀOÑ/SÓ+Tˆ�Ñ˜ZÑ(Ø/´(°Ð<ˆ�‰ÜÔ.¨wÓ7¸t¿z¹zÔJˆØ×Ñ˜Ÿ™¨¯©°R¸Ó(AÓB×GÑGÐI[Ô\Ø×Ñ˜Ÿ™¨¯©°R¸Ó(AÓB×KÑKÌX×MeÑMeÕfr*   c                 ó$  — dt        t        «      dœ}t        j                  ddi«      j	                  «       t        j                  dddz  i«      j	                  «       dfD ]ª  }t        j                  t        j                  dd	g|t        |d
d¬«      }| j                  |j                  d«       t        j                  |j                  «      }| j                  |d   d«       | j                  |d   «       | j                  |d   «       Œ¬ | j                  t        j                  t        j                  t        j                  dd	gt        j                  ddi«      j	                  «       t        |d
d¬«      j                  «      d   d«       y )Nz/usr/bin:/bin)ÚPATHÚ
PYTHONPATHr?   r-   ú"i   s   {kaputtz-mzaria_router.shadow_cliTé   )ÚinputÚcwdÚenvÚcapture_outputÚtimeoutr   r   ÚdroprU   r7   ÚxÚreasonÚMISSING_TRANSPORT_IDENTITY)rw   rv   r#   r$   ÚencodeÚ
subprocessÚrunÚsysÚ
executabler   Ú
returncoderu   ÚstdoutÚassertIsNoner6   )r%   r�   ÚpayloadÚprocr&   s        r(   Ú#test_legacy_shadow_cli_fails_closedz/ShadowTests.test_legacy_shadow_cli_fails_closedR   sW  € Ø&´c¼,Ó6GÑHˆÜŸ
™
 F¨GÐ#4Ó5×<Ñ<Ó>ÄÇ
Á
ÈFÐTWÐZ_ÑT_ÐK`Ó@a×@hÑ@hÓ@jØ"ð$ò 	2ˆGä—>‘>¤3§>¡>°4Ð9QÐ"RÐZaÔgsØ&)¸$ÈôLˆDà×Ñ˜TŸ_™_¨aÔ0Ü—Z‘Z §¡Ó,ˆFØ×Ñ˜V JÑ/°Ô8Ø×Ñ˜f YÑ/Ô0Ø×Ñ˜V KÑ0Õ1ð	2ð 	×ÑœŸ™¤J§N¡NÜ�^‰^˜TÐ#;Ð<ÄDÇJÁJÐPVÐX[È}ÓD]×DdÑDdÓDfÜ #°dÀBô%HçHNÉóPàPXñZð )õ	*r*   N)Ú__name__Ú
__module__Ú__qualname__r)   r@   rP   rW   ra   ri   ry   r’   © r*   r(   r   r      s/   „ ò:òVò	;ò`ò	Rò_ò
gó*r*   r   Ú__main__)Ú__doc__r#   Úosr‰   r‹   ÚunittestÚpathlibr   Úaria_router.configr   r   Úaria_router.gatewayr   r   Útests.helpersr   r	   r
   r   Ú__file__ÚresolveÚparentsrv   r   r“   Úmainr–   r*   r(   ú<module>r£      sl   ðÙ \Û Û 	Û Û 
Û Ý ç Hß 1ç GÓ Gá�H‹~×%Ñ%Ó'×/Ñ/°Ñ2€ôO*�/ô O*ðd ˆzÒØ€H‡M�M…Oð r*   