Ë
    õÝjt  ã                   óê   — d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZmZmZmZmZ  G d	„ d
ej,                  «      Z G d„ de«      Zedk(  r ej4                  «        yy)uV   Claude-Adapter Ã¼ber den bestehenden Kanal (Mock-Plugin), keine zweite Claude-Instanz.é    N)ÚPath)ÚResultStatus)ÚCHANNEL_METHODÚFORWARD_ACTIONÚClaudeChannelAdapter)ÚMemorySnippet)ÚHandling)ÚOWNER_IDÚAdapterHarnessÚGatewayTestCaseÚRecordingSinkÚdocumentÚphotoc                   óP   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zy)ÚClaudeChannelTestsc                 ó�   — t        j                  «       | _        t        t	        | j                  j
                  «      «      | _        y ©N)ÚtempfileÚTemporaryDirectoryÚ_tmpr   r   ÚnameÚh©Úselfs    ú:/home/aria/aria-v3-dev/python/tests/test_claude_channel.pyÚsetUpzClaudeChannelTests.setUp   s+   € Ü×/Ñ/Ó1ˆŒ	Ü¤ T§Y¡Y§^¡^Ó 4Ó5ˆ�ó    c                 ó8   — | j                   j                  «        y r   )r   Úcleanupr   s    r   ÚtearDownzClaudeChannelTests.tearDown   s   € Ø�	‰	×ÑÕr   Nc                 óœ   — t        | j                  j                  |¬«      }|j                  | j                  j	                  ||«      |«      S )N©Úsink)r   r   ÚverifierÚexecuteÚclear)r   Újobr#   Úadapters       r   ÚforwardzClaudeChannelTests.forward   s6   € Ü& t§v¡v§¡¸TÔBˆØ�‰˜tŸv™vŸ|™|¨G°SÓ9¸3Ó?Ð?r   c           
      óÊ  — | j                  | j                  j                  d«      «      }| j                  |j                  t
        j                  «       |j                   }| j                  |d   |d   ft        t        f«       | j                  |d   dt        ddt        ddœd	œ«       | j                  |d
   d   d«       | j                  t        |d
   d   «      d«       y )Nz
Hallo AriaÚactionÚmethodÚparamsÚ7Ú	kais_testz2026-10-24T18:00:00.000Z)Úchat_idÚ
message_idÚuserÚuser_idÚts)ÚcontentÚmetaÚ	clearanceÚbackendÚclaudeÚmacé@   )r)   r   r'   ÚassertEqualÚstatusr   ÚFORWARDr   r   r
   Úlen)r   ÚresultÚinstructions      r   Ú!test_forward_instruction_for_textz4ClaudeChannelTests.test_forward_instruction_for_text   sÏ   € Ø—‘˜dŸf™fŸj™j¨Ó6Ó7ˆØ×Ñ˜Ÿ™¬×(<Ñ(<Ô=Ø—n‘nˆØ×Ñ˜+ hÑ/°¸XÑ1FÐGÌ.ÔZhÐIiÔjØ×Ñ˜ XÑ.Ø#Ü (¸À[Ô]eØ5ñ7ñ1
ô 	ð
 	×Ñ˜ [Ñ1°)Ñ<¸hÔGØ×Ñœ˜[¨Ñ5°eÑ<Ó=¸rÕBr   c                 óü   — | j                  | j                  j                  dt        d«      g¬«      «      j                   d   d   }| j	                  |d   d«       | j                  t        d„ |D «       «      «       y )Nz(photo)z/inbox/1-a.jpg©Úattachmentsr-   r6   Ú
image_pathc              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)Úattachment_N)Ú
startswith)Ú.0Úkeys     r   ú	<genexpr>zQClaudeChannelTests.test_forward_meta_photo_like_handle_inbound.<locals>.<genexpr>*   s   è ø€ ÒK¸s˜SŸ^™^¨M×:ÑKùs   ‚)r)   r   r'   r   r<   ÚassertFalseÚany©r   r6   s     r   Ú+test_forward_meta_photo_like_handle_inboundz>ClaudeChannelTests.test_forward_meta_photo_like_handle_inbound'   sk   € Ø�|‰|˜DŸF™FŸJ™J y¼uÐEUÓ?VÐ>W˜JÓXÓY×aÑaÐbjÑkÐlrÑsˆØ×Ñ˜˜lÑ+Ð-=Ô>Ø×ÑœÑKÀdÔKÓKÕLr   c                 óÜ   — | j                  | j                  j                  dt        d«      g¬«      «      j                   d   d   }| j	                  |d   |d   |d   |d	   |d
   fd«       y )Nz(document: a.pdf)úa.pdfrD   r-   r6   Úattachment_kindÚattachment_file_idÚattachment_sizeÚattachment_mimeÚattachment_name)r   ÚBQACdocÚ2048zapplication/pdfrR   )r)   r   r'   r   r<   rO   s     r   Ú.test_forward_meta_document_like_handle_inboundzAClaudeChannelTests.test_forward_meta_document_like_handle_inbound,   s~   € Ø�|‰|˜DŸF™FŸJ™JÐ':ÌÐRYÓIZÐH[˜JÓ\Ó]×eÑeÐfnÑoÐpvÑwˆØ×Ñ˜$Ð0Ñ1°4Ð8LÑ3MÈtÐTeÑOfØÐ0Ñ1°4Ð8IÑ3JðLàTõ	Vr   c                 ó®   — | j                  | j                  j                  dd ¬«      «      j                   d   d   }| j                  |d   t        «       y )NÚhallo)Úusernamer-   r6   r2   )r)   r   r'   r<   r
   rO   s     r   Útest_username_falls_back_to_idz1ClaudeChannelTests.test_username_falls_back_to_id2   sF   € Ø�|‰|˜DŸF™FŸJ™J w¸˜JÓ>Ó?×GÑGÈÑQÐRXÑYˆØ×Ñ˜˜f™¤xÕ0r   c                 óê   — t        | j                  j                  «      }| j                  j                  dt	        dd«      g¬«      }| j                  |j                  d |«      j                  d«       y )Nr\   zbrain/aÚx)ÚmemoryÚMEMORY_NOT_SUPPORTED)r   r   r$   r'   r   r<   r%   Ú
error_code)r   r(   r'   s      r   Útest_memory_not_supportedz,ClaudeChannelTests.test_memory_not_supported6   sV   € Ü& t§v¡v§¡Ó7ˆØ�f‰f�j‰j˜¬-¸	À3Ó*GÐ)HˆjÓIˆØ×Ñ˜Ÿ™¨¨sÓ3×>Ñ>Ð@VÕWr   c                 ó  — t        «       }| j                  | j                  j                  d«      |«      }| j	                  t        |j                  «      d«       | j	                  |j                  d   d   |j                  d   «       y )Nr\   é   r   r-   )r   r)   r   r'   r<   r?   Ú	delivered)r   r#   r@   s      r   Útest_sink_executes_exactly_oncez2ClaudeChannelTests.test_sink_executes_exactly_once;   sf   € Ü‹ˆØ—‘˜dŸf™fŸj™j¨Ó1°4Ó8ˆØ×Ñœ˜TŸ^™^Ó,¨aÔ0Ø×Ñ˜Ÿ™¨Ñ*¨8Ñ4°f·n±nÀXÑ6NÕOr   c                 óÞ   — | j                  | j                  j                  d«      t        d¬«      «      }| j	                  |j
                  |j                  ft        j                  df«       y )Nr\   T)ÚfailÚDELIVERY_FAILED)	r)   r   r'   r   r<   r=   rc   r   ÚFAILED)r   r@   s     r   Útest_sink_failure_reportedz-ClaudeChannelTests.test_sink_failure_reportedA   sO   € Ø—‘˜dŸf™fŸj™j¨Ó1´=ÀdÔ3KÓLˆØ×Ñ˜&Ÿ-™-¨×):Ñ):Ð;¼l×>QÑ>QÐSdÐ=eÕfr   c                 ó  — t        «       }t        | j                  j                  |¬«      }| j	                  |j                  d | j                  j                  d«      «      j                  d«       | j	                  |j                  g «       y )Nr"   r\   ÚMISSING_CLEARANCE)	r   r   r   r$   r<   r%   r'   rc   rg   )r   r#   r(   s      r   Ú)test_forward_without_clearance_impossiblez<ClaudeChannelTests.test_forward_without_clearance_impossibleE   s`   € Ü‹ˆÜ& t§v¡v§¡¸TÔBˆØ×Ñ˜Ÿ™¨¨t¯v©v¯z©z¸'Ó/BÓC×NÑNÐPcÔdØ×Ñ˜Ÿ™¨Õ,r   r   )Ú__name__Ú
__module__Ú__qualname__r   r    r)   rB   rP   rZ   r^   rd   rh   rm   rp   © r   r   r   r      s@   „ ò6òó@òCòMò
Vò1òXò
Pògó-r   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚGatewayClaudeTestsc                 ó  — | j                  «       }|j                  | j                  dd«      «      }| j                  |j                  |j
                  ft        j                  df«       | j                  t        | j                  j                  «      d«       | j                  | j                  j                  d   d   d   d«       | j                  |j                  d   | j                  j                  d   d   «       y )Nrf   zHallo Aria, was steht heute an?r9   r   r-   r5   )ÚgatewayÚhandleÚrequestr<   Úhandlingr8   r	   ÚFORWARD_TO_CLAUDE_CHANNELr?   r#   rg   r)   )r   rx   r@   s      r   Útest_gateway_forward_end_to_endz2GatewayClaudeTests.test_gateway_forward_end_to_endM   sÆ   € Ø—,‘,“.ˆØ—‘ §¡¨QÐ0QÓ RÓSˆØ×Ñ˜&Ÿ/™/¨6¯>©>Ð:¼X×=_Ñ=_ÐaiÐ<jÔkØ×Ñœ˜TŸY™Y×0Ñ0Ó1°1Ô5Ø×Ñ˜Ÿ™×,Ñ,¨QÑ/°Ñ9¸)ÑDÐFgÔhØ×Ñ˜Ÿ™¨Ñ1°4·9±9×3FÑ3FÀqÑ3IÈ(Ñ3SÕTr   c           
      ó¤  — | j                  «       }g d¢}t        |d«      D ]i  \  }}| j                  |¬«      5  | j                  |j	                  | j                  ||«      «      j                  t        j                  «       d d d «       Œk | j                  t        | j                  j                  «      t        |«      «       y # 1 sw Y   Œ®xY w)N)zBitte debug mein Pythonz	yes abcdez
/somethingzPfad /home/aria/brainzAngebot BMWé
   )Útext)rx   Ú	enumerateÚsubTestr<   ry   rz   r{   r	   r|   r?   r#   rg   )r   rx   ÚtextsÚindexr€   s        r   Ú6test_status_quo_everything_unclassified_reaches_claudezIGatewayClaudeTests.test_status_quo_everything_unclassified_reaches_claudeU   s´   € Ø—,‘,“.ˆÚnˆÜ$ U¨BÓ/ò 	E‰KˆE�4Ø—‘ 4�Ó(ñ EØ× Ñ  §¡°·±¸UÀDÓ0IÓ!J×!SÑ!SÜ!)×!CÑ!CôE÷Eð Eð	Eð 	×Ñœ˜TŸY™Y×0Ñ0Ó1´3°u³:Õ>÷Eð Eús   ¹A
CÃC	N)rq   rr   rs   r}   r…   rt   r   r   rv   rv   L   s   „ òUó?r   rv   Ú__main__)Ú__doc__r   ÚunittestÚpathlibr   Úaria_router.adapter_contractr   Úaria_router.claude_channelr   r   r   Úaria_router.contextr   Úaria_router.gatewayr	   Útests.helpersr
   r   r   r   r   r   ÚTestCaser   rv   rq   Úmainrt   r   r   ú<module>r‘      s_   ðÙ \Û Û Ý å 5ß [Ñ [Ý -Ý (ç c× cô;-˜×*Ñ*ô ;-ô|?˜ô ?ð& ˆzÒØ€H‡M�M…Oð r   