Ë
    lQêj&  ã                   ó2  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ  e j                  d¬«      d	ed
   fd„«       Z	 	 dde
e   de
eeef      d	efd„Zdeded	ef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dd„Zy) é    N)Ú	MagicMock)ÚSharedSystemClient)ÚBaseHTTPClient)ÚSystem)ÚOptionalÚDictÚ	GeneratorT)ÚautouseÚreturn)NNNc               #   ód   K  — t        j                  «        d–— t        j                  «        y­w)z@Automatically clear the system cache before and after each test.N)r   Úclear_system_cache© ó    úp/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/test/api/test_shared_system_client.pyÚclear_cacher   	   s#   è ø€ ô ×)Ñ)Ô+Û	Ü×)Ñ)Õ+ùs   ‚.0Úapi_urlÚheadersc                 óz   — t        t        ¬«      }| xs d|j                  _        |xs i |j                  _        |S )zGCreate a mock BaseHTTPClient instance with the specified configuration.©ÚspecÚ )r   r   Úget_api_urlÚreturn_valueÚget_request_headers)r   r   Úmock_server_apis      r   Úcreate_mock_http_clientr      s8   € ô
  ¤^Ô4€Oà/6ª}¸"€O×ÑÔ,Ø7>²}À"€O×'Ñ'Ô4àÐr   Ú	system_idr   c                 ón   — t        t        ¬«      }||j                  _        |t        j
                  | <   |S )z8Register a mock system with the given ID and server API.r   )r   r   Úinstancer   r   Ú_identifier_to_system)r   r   Úmock_systems      r   Úregister_mock_systemr"      s1   € ä¤Ô(€KØ(7€K×ÑÔ%Ø:EÔ×,Ñ,¨YÑ7ØÐr   c                  óp   — t        dddi¬«      } t        d| «       t        j                  «       }|dk(  sJ ‚y )Nú https://api.trychroma.com/api/v2úX-Chroma-Tokenztest-api-key-123©r   r   útest-id©r   r"   r   Ú%get_chroma_cloud_api_key_from_clients©r   Úapi_keys     r   Ú.test_extracts_api_key_from_chroma_cloud_clientr,   &   óA   € Ü-Ø2Ø!Ð#5Ð6ô€Oô ˜ OÔ4ä ×FÑFÓH€GàÐ(Ò(Ð(Ñ(r   c                  óp   — t        dddi¬«      } t        d| «       t        j                  «       }|dk(  sJ ‚y )Nr$   zx-chroma-tokenztest-api-key-456r&   r'   r(   r*   s     r   Ú+test_extracts_api_key_with_lowercase_headerr/   2   r-   r   c                  óp   — t        dddi¬«      } t        d| «       t        j                  «       }|dk(  sJ ‚y )Nz&https://dummy.gcp.trychroma.com/api/v2r%   zgcp-test-api-keyr&   r'   r(   r*   s     r   Ú2test_extracts_api_key_from_gcp_chroma_cloud_clientr1   >   sA   € Ü-Ø8Ø!Ð#5Ð6ô€Oô ˜ OÔ4ä ×FÑFÓH€GàÐ(Ò(Ð(Ñ(r   c                  ój   — t        dddi¬«      } t        d| «       t        j                  «       }|�J ‚y )Nzhttps://localhost:8000/api/v2r%   zlocal-api-keyr&   r'   r(   r*   s     r   Ú#test_skips_non_chroma_cloud_clientsr3   J   s;   € Ü-Ø/Ø! ?Ð3ô€Oô ˜ OÔ4ä ×FÑFÓH€Gàˆ?Ð‰?r   c                  ój   — t        d ddi¬«      } t        d| «       t        j                  «       }|�J ‚y )Nr%   ztest-api-keyr&   r'   r(   r*   s     r   Ú"test_skips_clients_without_api_urlr5   V   s;   € Ü-ØØ! >Ð2ô€Oô ˜ OÔ4ä ×FÑFÓH€Gàˆ?Ð‰?r   c                  óf   — t        di ¬«      } t        d| «       t        j                  «       }|�J ‚y )Nr$   r&   r'   r(   r*   s     r   Ú,test_returns_none_when_no_api_key_in_headersr7   b   s6   € Ü-Ø2Øô€Oô ˜ OÔ4ä ×FÑFÓH€Gàˆ?Ð‰?r   c                  ó¦   — t        dddi¬«      } t        dddi¬«      }t        d| «       t        d|«       t        j                  «       }|dk(  sJ ‚y )Nr$   r%   z	first-keyr&   z
second-keyz	test-id-1z	test-id-2r(   )Úmock_server_api_1Úmock_server_api_2r+   s      r   Ú6test_returns_first_api_key_found_from_multiple_clientsr;   n   sd   € Ü/Ø2Ø! ;Ð/ôÐô 0Ø2Ø! <Ð0ôÐô ˜Ð&7Ô8Ü˜Ð&7Ô8ä ×FÑFÓH€Gà�kÒ!Ð!Ñ!r   c                  ó®   — t        t        ¬«      } t        d«      | j                  _        | t
        j                  d<   t        j                  «       }|�J ‚y )Nr   zTest exceptionr'   )r   r   Ú	Exceptionr   Úside_effectr   r    r)   )r!   r+   s     r   Ú!test_handles_exception_gracefullyr?      sI   € Ü¤Ô(€KÜ'0Ð1AÓ'B€K×ÑÔ$Ø:EÔ×,Ñ,¨YÑ7ä ×FÑFÓH€Gàˆ?Ð‰?r   c                  ó4   — t        j                  «       } | �J ‚y )N)r   r)   )r+   s    r   Ú'test_returns_none_when_no_clients_existrA   ‰   s   € Ü ×FÑFÓH€Gàˆ?Ð‰?r   c                  ó`   — t        «       } t        d| «       t        j                  «       }|�J ‚y)z3Test that non-BaseHTTPClient instances are skipped.r'   N)r   r"   r   r)   r*   s     r   Útest_skips_non_http_clientsrC   �   s+   € ä“k€OÜ˜ OÔ4ä ×FÑFÓH€Gàˆ?Ð‰?r   c                  óp   — t        dddi¬«      } t        d| «       t        j                  «       }|dk(  sJ ‚y )Nr$   zX-CHROMA-TOKENzmixed-case-keyr&   r'   r(   r*   s     r   Ú,test_extracts_api_key_with_mixed_case_headerrE   ™   sA   € Ü-Ø2Ø!Ð#3Ð4ô€Oô ˜ OÔ4ä ×FÑFÓH€GàÐ&Ò&Ð&Ñ&r   c                  ó¤   — t        dddi¬«      } t        dddi¬«      }t        d| «       t        d|«       t        j                  «       }|dv sJ ‚y	)
z<Test that multiple clients return one of the available keys.r$   r%   úkey-1r&   úkey-2zid-1zid-2)rG   rH   Nr(   )Ú
mock_api_1Ú
mock_api_2r+   s      r   Ú%test_multiple_clients_returns_one_keyrK   ¥   sa   € ä(Ø2Ø! 7Ð+ô€Jô )Ø2Ø! 7Ð+ô€Jô ˜ Ô,Ü˜ Ô,ä ×FÑFÓH€GàÐ(Ñ(Ð(Ñ(r   )NN)r   N)ÚpytestÚunittest.mockr   Ú!chromadb.api.shared_system_clientr   Úchromadb.api.base_http_clientr   Úchromadb.configr   Útypingr   r   r	   Úfixturer   Ústrr   r"   r,   r/   r1   r3   r5   r7   r;   r?   rA   rC   rE   rK   r   r   r   ú<module>rT      sÔ   ðÛ Ý #Ý @Ý 8Ý "ß ,Ñ ,ð €‡�˜Ôð,�YÐ/Ñ0ò ,ó ð,ð "Ø(,ñ
Ø�c‰]ð
à�d˜3 ˜8‘nÑ%ð
ð ó
ð Cð ¸)ð È	ó ó	)ó	)ó	)ó	ó	ó	ó"ó"óóó	'ô)r   