
    _j&                     N   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dS )     N)	MagicMock)SharedSystemClient)BaseHTTPClient)System)OptionalDict	GeneratorT)autousereturn)NNNc               #   ^   K   t          j                     dV  t          j                     dS )z@Automatically clear the system cache before and after each test.N)r   clear_system_cache     h/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/test/api/test_shared_system_client.pyclear_cacher   	   s5       )+++	EEE)+++++r   api_urlheadersc                 h    t          t                    }| pd|j        _        |p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44O/6}"O,7>}"O'4r   	system_idr   c                 f    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(7K%:E,Y7r   c                      t          dddi          } t          d|            t          j                    }|dk    sJ d S )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,   &   Z    -2!#56  O O444 FHHG(((((((r   c                      t          dddi          } t          d|            t          j                    }|dk    sJ d S )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                      t          dddi          } t          d|            t          j                    }|dk    sJ d S )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   >   sZ    -8!#56  O O444 FHHG(((((((r   c                  z    t          dddi          } t          d|            t          j                    }|J d S )Nzhttps://localhost:8000/api/v2r%   zlocal-api-keyr&   r'   r(   r*   s     r   #test_skips_non_chroma_cloud_clientsr3   J   sN    -/!?3  O O444 FHHG?????r   c                  z    t          d ddi          } t          d|            t          j                    }|J d S )Nr%   ztest-api-keyr&   r'   r(   r*   s     r   "test_skips_clients_without_api_urlr5   V   sN    -!>2  O O444 FHHG?????r   c                  v    t          di           } t          d|            t          j                    }|J d S )Nr$   r&   r'   r(   r*   s     r   ,test_returns_none_when_no_api_key_in_headersr7   b   sI    -2  O O444 FHHG?????r   c                      t          dddi          } t          dddi          }t          d|            t          d|           t          j                    }|dk    sJ d S )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   s    /2!;/   02!<0   &7888&7888 FHHGk!!!!!!r   c                      t          t                    } t          d          | j        _        | t
          j        d<   t          j                    }|J d S )Nr   zTest exceptionr'   )r   r   	Exceptionr   side_effectr   r    r)   )r!   r+   s     r   !test_handles_exception_gracefullyr?      sO    (((K'01A'B'BK$:E,Y7 FHHG?????r   c                  4    t          j                    } | J d S )N)r   r)   )r+   s    r   'test_returns_none_when_no_clients_existrA      s     FHHG?????r   c                  p    t                      } t          d|            t          j                    }|J dS )z3Test that non-BaseHTTPClient instances are skipped.r'   N)r   r"   r   r)   r*   s     r   test_skips_non_http_clientsrC      s6    kkOO444 FHHG?????r   c                      t          dddi          } t          d|            t          j                    }|dk    sJ d S )Nr$   zX-CHROMA-TOKENzmixed-case-keyr&   r'   r(   r*   s     r   ,test_extracts_api_key_with_mixed_case_headerrE      sZ    -2!#34  O O444 FHHG&&&&&&&r   c                      t          dddi          } t          dddi          }t          d|            t          d|           t          j                    }|dv sJ d	S )
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      s    (2!7+  J )2!7+  J ,,,,,, FHHG(((((((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 8 8 8 8 8 " " " " " " , , , , , , , , , , ,Y/0 , , , , "(,
 
c]
d38n%
 
 
 
 
C ) 	    	) 	) 	) 	)	) 	) 	) 	)	) 	) 	) 	)	 	 	 		 	 	 		 	 	 	" " " ""         	' 	' 	' 	') ) ) ) ) )r   