
    <h                        S SK rS SKJs  Jr  S SKJrJrJ	r	J
r
JrJr  S SKrS SKJr  S SKJr  S SKJr  S SKJrJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJrJ r   \RB                  S\	\SS4   4S j5       r" " S S\5      r#\RB                  S\S\	\#SS4   4S j5       r$Sr%\" \%SS0S9r&\RB                  " SS9S\	\SS4   4S j5       r'g)    N)AnyDict	GeneratorListOptionalTuple)
TestClient)MonkeyPatch)create_engine)SessionsessionmakerSettings)Base)app)BaseProvider)get_providerget_settingsreturnc               #      #    S[         4S jn U [        R                  [        '   [	        [        5       nUv   SSS5        [        R                  R                  5         g! , (       d  f       N-= f7f)z
A TestClient instance that can be used in all tests.
It has the authentication dependency overridden to use a static test API key.
This fixture is function-scoped to ensure test isolation.
r   c                      [        SSS9$ )Ntest_keytesting)admin_api_keyapp_envr        &/root/zotify-API/api/tests/conftest.pyget_settings_override%client.<locals>.get_settings_override   s    j)DDr   N)r   r   dependency_overridesr   r	   clear)r   cs     r   clientr$      sT     E8 E
 .CC\*	CA 
 ""$	 
s   2A1A 'A1 
A.*A1c                       \ rS rSrSrS\S\S\S\S\\\	\\
4      \4   4
S jrS	\S\	\\
4   4S
 jrS	\S\S\S\	\\
4   4S jrS\	\\
4   4S jrS\S\4S jrS\\   S\\   S\S\4S jrSrg)FakeProvider&   zd
A mock provider for testing purposes.
Implements the BaseProvider interface and returns mock data.
qtypelimitoffsetr   c                    #    SS0/S4$ 7f)Nid
test_track   r   )selfr(   r)   r*   r+   s        r   searchFakeProvider.search,   s      |$%q((s   
playlist_idc                    #    USS.$ 7f)NzTest Playlist)r-   namer   )r0   r3   s     r   get_playlistFakeProvider.get_playlist1   s     !?;;   c                    #    SSSS00/0$ 7f)Nitemstrackr-   r.   r   )r0   r3   r*   r+   s       r   get_playlist_tracks FakeProvider.get_playlist_tracks4   s      7T<$89:;;s   
c                    #    SSS.$ 7f)Nsuccessr/   )statuscountr   )r0   s    r   sync_playlistsFakeProvider.sync_playlists9   s     #a00r8   statec                    #    SU 3$ 7f)Nz%http://fake.provider.com/login?state=r   )r0   rD   s     r   get_oauth_login_url FakeProvider.get_oauth_login_url<   s     6ug>>r8   codeerrorc                 &   #    U(       a  SU S3$ g7f)Nz<html><body>Error: z</body></html>z!<html><body>Success</body></html>r   )r0   rH   rI   rD   s       r   handle_oauth_callback"FakeProvider.handle_oauth_callback?   s      (~>>2s   r   N)__name__
__module____qualname____firstlineno____doc__strintr   r   r   r   r1   r6   r<   rB   rF   r   rK   __static_attributes__r   r   r   r&   r&   &   s    
)))(+)58)	tDcN#S(	))
<c <d38n <<<'*<47<	c3h<
1d38n 1?s ?s ?3SM3*23-3@C3	3r   r&   monkeypatchc              #      ^#    [        5       mU4S j[        R                  [        '   Tv   [        R                  [        	 g7f)zH
Fixture to override the get_provider dependency with the FakeProvider.
c                     > T $ )Nr   )fake_providers   r   <lambda>mock_provider.<locals>.<lambda>O   s    ]r   N)r&   r   r!   r   )rU   rX   s    @r   mock_providerr[   G   s3      !NM-BC\*
  .s   A Azsqlite:///:memory:check_same_threadF)connect_argsfunction)scopec               #     #    [         R                  5       n U R                  5       n[        R                  R                  U S9  [        SSU S9nU" 5       n Uv   UR                  5         UR                  5         U R                  5         g! UR                  5         UR                  5         U R                  5         f = f7f)a2  
Pytest fixture to set up a new in-memory SQLite database for each test function.
It creates a single connection for the test's duration, creates all tables on
that connection, and yields a session bound to it. This pattern is crucial
for ensuring the in-memory database persists across the test function.
)bindF)
autocommit	autoflushra   N)	engineconnectbeginr   metadata
create_allr   closerollback)
connectiontransactionTestingSessionLocaldbs       r   test_db_sessionro   [   s      !J ""$K 	MM*- 'E
 
	B

	 	
s   ACB 1C2B>>C)(builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_artypingr   r   r   r   r   r   pytestfastapi.testclientr	   r
   
sqlalchemyr   sqlalchemy.ormr   r   zotify_api.configr   zotify_api.database.modelsr   zotify_api.mainr   zotify_api.providers.baser   zotify_api.services.depsr   r   fixturer$   r&   r[   SQLALCHEMY_DATABASE_URLrd   ro   r   r   r   <module>r      s       > >  )  $ 0 & +  2 ? %	*dD01 % %*3< 3B 	/	/|T4'(	/ 	/ / 	+>*F

 j! 7D$#67   " r   