ó
    –Vèhf  ã                   óæ   • S r SSKrSSKJs  Jr  SSKrSSK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JrJrJr   " S S	5      r " S
 S5      r " S S5      r " S S5      r " S S5      rg)z(Tests for database connection utilities.é    N)Ú	MagicMockÚpatch)Úcreate_engine)ÚEngine)ÚSession)Úget_database_urlÚ
get_engineÚget_sessionÚget_session_factoryÚinit_dbc                   ó*   • \ rS rSrSrS rS rS rSrg)ÚTestGetDatabaseUrlé   z$Tests for get_database_url function.c                 óü  • [         R                  " [        R                  0 SS9   [	        5       nSo!U:H  o3(       d¥  [
        R                  " SU4SX45      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S.-  nSS	U0-  n[        [
        R                  " U5      5      eS
=p2S
S
S
5        g
! , (       d  f       g
= f)z5Test database URL with default environment variables.T©Úclearz=postgresql+psycopg://quber:quber_dev@localhost:5432/quber_rag©ú==©z%(py0)s == %(py3)sÚurl©Úpy0Úpy3úassert %(py5)sÚpy5N©r   ÚdictÚosÚenvironr   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Úselfr   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6s         Ú&/workspace/tests/db/test_connection.pyÚtest_default_valuesÚ&TestGetDatabaseUrl.test_default_values   s‡   € ä�ZŠZœŸ
™
 B¨dÓ3Ü"Ó$ˆCàYÐYÐYÑY×Y×Y×YÒY�3×Y×Y×Y×Y×YÕY�3×Y×Y×YÑY�3×Y×YÕYÐY×Y×Y×Y×Y×Y×YÑY÷ 4×3Ö3ús   ¥B?C-Ã-
C;c                 ó  • SSSSSS.n[         R                  " [        R                  USS9   [	        5       nS	o2U:H  oD(       d¥  [
        R                  " S
U4SX#45      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS=pCSSS5        g! , (       d  f       g= f)z4Test database URL with custom environment variables.Úcustom_userÚcustom_passzdb.example.comÚ5433Ú	custom_db)ÚPOSTGRES_USERÚPOSTGRES_PASSWORDÚPOSTGRES_HOSTÚPOSTGRES_PORTÚPOSTGRES_DBTr   zJpostgresql+psycopg://custom_user:custom_pass@db.example.com:5433/custom_dbr   r   r   r   r   r   Nr   ©r(   Úenv_varsr   r)   r*   r+   r,   s          r-   Útest_custom_valuesÚ%TestGetDatabaseUrl.test_custom_values   s¡   € ð +Ø!.Ø-Ø#Ø&ñ
ˆô �ZŠZœŸ
™
 H°DÓ9Ü"Ó$ˆCàfÐfÐfÑf×f×f×fÒf�3×f×f×f×f×fÕf�3×f×f×fÑf�3×f×fÕfÐf×f×f×f×f×f×fÑf÷ :×9Ö9ús   ­B?C5Ã5
Dc                 ó  • SSS.n[         R                  " [        R                  USS9   [	        5       nSo2U:H  oD(       d¥  [
        R                  " SU4SX#45      S	[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS	[
        R                  " U5      S
.-  nSSU0-  n[        [
        R                  " U5      5      eS=pCSSS5        g! , (       d  f       g= f)z9Test database URL with some custom environment variables.ÚtestuserÚtesthost)r5   r7   Tr   z?postgresql+psycopg://testuser:quber_dev@testhost:5432/quber_ragr   r   r   r   r   r   Nr   r:   s          r-   Útest_partial_custom_valuesÚ-TestGetDatabaseUrl.test_partial_custom_values-   s›   € ð (Ø'ñ
ˆô
 �ZŠZœŸ
™
 H°DÓ9Ü"Ó$ˆCð \Ð[Ð[Ñ[×[×[×[Ò[�3×[×[×[×[×[Õ[�3×[×[×[Ñ[�3×[×[Õ[Ð[×[×[×[×[×[×[Ñ[÷	 :×9Ö9ús   ªB?C2Ã2
D © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r.   r<   rA   Ú__static_attributes__rC   ó    r-   r   r      s   † Ù.òZògõ\rJ   r   c                   ó|   • \ rS rSrSr\" S5      \" S5      S 5       5       r\" S5      \" S5      S 5       5       rSrg)	ÚTestGetEngineé;   zTests for get_engine function.z!quber.db.connection.create_enginez$quber.db.connection.get_database_urlc                 óš  • SUl         [        5       nSUR                  l        SUR                  l        X2l         [        5       nUR                  5         UR                  SSSS9  XC:H  oU(       dÛ  [        R                  " SU4SXC45      S	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
S.-  nSSU0-  n[        [        R                  " U5      5      eSng)z+Test creating engine with default settings.úpostgresql+psycopg://testÚtest_dbÚ	localhostFT©ÚechoÚpool_pre_pingr   ©z%(py0)s == %(py2)sÚengineÚmock_engine©r   Úpy2úassert %(py4)sÚpy4N)Úreturn_valuer   r   ÚdatabaseÚhostr	   Úassert_called_onceÚassert_called_once_withr    r!   r"   r#   r$   r%   r&   r'   )r(   Úmock_get_urlÚmock_create_enginerW   rV   r*   Ú@py_format3Ú@py_format5s           r-   Útest_get_engine_defaultÚ%TestGetEngine.test_get_engine_default>   sÎ   € ð %@ˆÔ!Ü“kˆØ#,ˆ�‰Ô Ø*ˆ�‰ÔØ*5Ô'ä“ˆà×'Ñ'Ô)Ø×2Ñ2Ø'¨eÀ4ð 	3ñ 	
ð Ñ$×$×$×$Ò$ˆv×$×$×$×$×$Õ$ˆv×$×$×$Ñ$ˆv×$×$×$×$×$Ö$˜×$×$×$Ñ$˜×$×$×$×$×$×$Ó$rJ   c                 óª   • SUl         [        5       nSUR                  l        SUR                  l        X2l         [        SS9nUR                  SSSS9  g)z$Test creating engine with echo=True.rO   rP   rQ   T)rS   rR   N)r\   r   r   r]   r^   r	   r`   )r(   ra   rb   rW   rV   s        r-   Útest_get_engine_with_echoÚ'TestGetEngine.test_get_engine_with_echoP   sV   € ð %@ˆÔ!Ü“kˆØ#,ˆ�‰Ô Ø*ˆ�‰ÔØ*5Ô'ä Ñ&ˆà×2Ñ2Ø'¨dÀ$ð 	3ò 	
rJ   rC   N)	rD   rE   rF   rG   rH   r   re   rh   rI   rC   rJ   r-   rL   rL   ;   sS   † Ù(á
Ð.Ó/Ù
Ð1Ó2ñ%ó 3ó 0ð%ñ  Ð.Ó/Ù
Ð1Ó2ñ
ó 3ó 0ó
rJ   rL   c                   ó‚   • \ rS rSrSr\" S5      \" S5      S 5       5       r\" S5      S 5       r\" S5      S 5       rSr	g	)
Ú
TestInitDbéa   zTests for init_db function.zquber.db.connection.Baseúquber.db.connection.get_enginec                 óè   • [        [        S9nX1l        [        5       nXBl        [	        5         UR                  5         UR                  R                  U5        UR                  R                  5         g)z5Test init_db creates a new engine when none provided.©ÚspecN)
r   r   r\   Úmetadatar   r_   Ú
create_allr`   Údrop_allÚassert_not_called)r(   Úmock_get_engineÚ	mock_baserW   Úmock_metadatas        r-   Útest_init_db_without_engineÚ&TestInitDb.test_init_db_without_engined   sX   € ô  ¤VÑ,ˆØ'2Ô$Ü!›ˆØ*ÔäŒ	à×*Ñ*Ô,Ø× Ñ ×8Ñ8¸ÔEØ×Ñ×0Ñ0Õ2rJ   c                 ó†   • [        [        S9n[        5       nX1l        [        US9  UR                  R                  U5        g)z"Test init_db uses provided engine.ro   ©rV   N)r   r   rq   r   rr   r`   ©r(   rv   rW   rw   s       r-   Útest_init_db_with_engineÚ#TestInitDb.test_init_db_with_engines   s7   € ô  ¤VÑ,ˆÜ!›ˆØ*Ôä�{Ò#à× Ñ ×8Ñ8¸ÕErJ   c                 ó¾   • [        [        S9n[        5       nX1l        [        USS9  UR                  R                  U5        UR                  R                  U5        g)z-Test init_db drops tables when drop_all=True.ro   T)rV   rs   N)r   r   rq   r   rs   r`   rr   r|   s       r-   Útest_init_db_with_drop_allÚ%TestInitDb.test_init_db_with_drop_all~   sM   € ô  ¤VÑ,ˆÜ!›ˆØ*Ôä�{¨TÒ2à×Ñ×6Ñ6°{ÔCØ× Ñ ×8Ñ8¸ÕErJ   rC   N)
rD   rE   rF   rG   rH   r   rx   r}   r€   rI   rC   rJ   r-   rk   rk   a   sc   † Ù%á
Ð%Ó&Ù
Ð+Ó,ñ3ó -ó 'ð3ñ Ð%Ó&ñFó 'ðFñ Ð%Ó&ñ	Fó 'ó	FrJ   rk   c                   óf   • \ rS rSrSr\" S5      \" S5      S 5       5       r\" S5      S 5       rSrg)	ÚTestGetSessionFactoryé‹   z'Tests for get_session_factory function.ú quber.db.connection.sessionmakerrm   c                 ól  • [        [        S9nX1l        [        5       nXBl        [        5       nUR	                  5         UR                  USS9  XT:H  of(       dÛ  [        R                  " SU4SXT45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nS	S
U0-  n[        [        R                  " U5      5      eSng)z-Test creating session factory without engine.ro   F©ÚbindÚexpire_on_commitr   rU   ÚfactoryÚmock_factoryrX   rZ   r[   N)r   r   r\   r   r_   r`   r    r!   r"   r#   r$   r%   r&   r'   )	r(   ru   Úmock_sessionmakerrW   r‹   rŠ   r*   rc   rd   s	            r-   Ú'test_get_session_factory_without_engineÚ=TestGetSessionFactory.test_get_session_factory_without_engineŽ   s¶   € ô  ¤VÑ,ˆØ'2Ô$Ü “{ˆØ)5Ô&ä%Ó'ˆà×*Ñ*Ô,Ø×1Ñ1°{ÐUZÐ1Ñ[ØÑ&×&×&×&Ò&ˆw×&×&×&×&×&Õ&ˆw×&×&×&Ñ&ˆw×&×&×&×&×&Ö&˜,×&×&×&Ñ&˜,×&×&×&×&×&×&Ó&rJ   c                 ó>  • [        [        S9n[        5       nX1l        [        US9nUR	                  USS9  XC:H  oU(       dÛ  [
        R                  " SU4SXC45      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS	.-  nS
SU0-  n[        [
        R                  " U5      5      eSng)z3Test creating session factory with provided engine.ro   r{   Fr‡   r   rU   rŠ   r‹   rX   rZ   r[   N)r   r   r\   r   r`   r    r!   r"   r#   r$   r%   r&   r'   )r(   rŒ   rW   r‹   rŠ   r*   rc   rd   s           r-   Ú$test_get_session_factory_with_engineÚ:TestGetSessionFactory.test_get_session_factory_with_engine�   s¦   € ô  ¤VÑ,ˆÜ “{ˆØ)5Ô&ä%¨[Ñ9ˆà×1Ñ1°{ÐUZÐ1Ñ[ØÑ&×&×&×&Ò&ˆw×&×&×&×&×&Õ&ˆw×&×&×&Ñ&ˆw×&×&×&×&×&Ö&˜,×&×&×&Ñ&˜,×&×&×&×&×&×&Ó&rJ   rC   N)	rD   rE   rF   rG   rH   r   r�   r�   rI   rC   rJ   r-   rƒ   rƒ   ‹   sE   † Ù1á
Ð-Ó.Ù
Ð+Ó,ñ'ó -ó /ð'ñ Ð-Ó.ñ	'ó /ó	'rJ   rƒ   c                   ó˜   • \ rS rSrSr\" S5      \" S5      S 5       5       r\" S5      \" S5      S 5       5       r\" S5      S 5       rSr	g	)
ÚTestGetSessionéª   z&Tests for get_session context manager.r…   rm   c                 ó  • [        [        S9nX1l        [        [        S9n[        US9nXRl        [	        5        nXd:H  ow(       dÛ  [
        R                  " SU4SXd45      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSS	U0-  n	[        [
        R                  " U	5      5      eS
nS
S
S
5        UR                  R                  5         UR                  R                  5         UR                   R#                  5         g
! , (       d  f       N]= f)z6Test get_session context manager successful execution.ro   ©r\   r   rU   ÚsessionÚmock_sessionrX   rZ   r[   N)r   r   r\   r   r
   r    r!   r"   r#   r$   r%   r&   r'   Úcommitr_   ÚcloseÚrollbackrt   )
r(   ru   rŒ   rW   r˜   r‹   r—   r*   rc   rd   s
             r-   Útest_get_session_successÚ'TestGetSession.test_get_session_success­   sç   € ô  ¤VÑ,ˆØ'2Ô$ä ¤gÑ.ˆÜ ¨lÑ;ˆØ)5Ô&äŒ]˜gØÑ*×*×*×*Ò*�7×*×*×*×*×*Õ*�7×*×*×*Ñ*�7×*×*×*×*×*Ö*˜l×*×*×*Ñ*˜l×*×*×*×*×*×*Ò*÷ ð 	×Ñ×.Ñ.Ô0Ø×Ñ×-Ñ-Ô/Ø×Ñ×/Ñ/Õ1÷ �]ús   ºC(E9Å9
Fc                 ó¸  • [        [        S9nX1l        [        [        S9n[        US9nXRl        [        R
                  " [        5         [        5        n[        S5      e! , (       d  f       O= f SSS5        O! , (       d  f       O= fUR                  R                  5         UR                  R                  5         UR                  R                  5         g)z0Test get_session context manager with exception.ro   r–   z
Test errorN)r   r   r\   r   ÚpytestÚraisesÚ
ValueErrorr
   r›   r_   rš   r™   rt   )r(   ru   rŒ   rW   r˜   r‹   r—   s          r-   Útest_get_session_with_exceptionÚ.TestGetSession.test_get_session_with_exception¿   sš   € ô  ¤VÑ,ˆØ'2Ô$ä ¤gÑ.ˆÜ ¨lÑ;ˆØ)5Ô&ä�]Š]œ:Õ&Ü” 'Ü  Ó.Ð.÷ •ú�÷ '×&Ö&úð 	×Ñ×0Ñ0Ô2Ø×Ñ×-Ñ-Ô/Ø×Ñ×-Ñ-Õ/s   Á
A<ÁA!Á!
A/	Á+A<Á<
B
c                 óŠ  • [        [        S9n[        [        S9n[        US9nXAl        [	        US9 nXS:H  of(       dÛ  [
        R                  " SU4SXS45      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nS	S
U0-  n[        [
        R                  " U5      5      eSnSSS5        UR                  USS9  g! , (       d  f       N= f)z&Test get_session with provided engine.ro   r–   r{   r   rU   r—   r˜   rX   rZ   r[   NFr‡   )r   r   r   r\   r
   r    r!   r"   r#   r$   r%   r&   r'   r`   )	r(   rŒ   rW   r˜   r‹   r—   r*   rc   rd   s	            r-   Ú%test_get_session_with_provided_engineÚ4TestGetSession.test_get_session_with_provided_engineÒ   sÃ   € ô  ¤VÑ,ˆÜ ¤gÑ.ˆÜ ¨lÑ;ˆØ)5Ô&ä Ò,°ØÑ*×*×*×*Ò*�7×*×*×*×*×*Õ*�7×*×*×*Ñ*�7×*×*×*×*×*Ö*˜l×*×*×*Ñ*˜l×*×*×*×*×*×*Ò*÷ -ð 	×1Ñ1°{ÐUZÐ1Ò[÷ -Õ,ús   ³C(D4Ä4
ErC   N)
rD   rE   rF   rG   rH   r   rœ   r¢   r¥   rI   rC   rJ   r-   r“   r“   ª   so   † Ù0á
Ð-Ó.Ù
Ð+Ó,ñ2ó -ó /ð2ñ  Ð-Ó.Ù
Ð+Ó,ñ0ó -ó /ð0ñ" Ð-Ó.ñ
\ó /ó
\rJ   r“   )rH   Úbuiltinsr"   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter    r   Úunittest.mockr   r   rŸ   Ú
sqlalchemyr   Úsqlalchemy.enginer   Úsqlalchemy.ormr   Úquber.db.connectionr   r	   r
   r   r   r   rL   rk   rƒ   r“   rC   rJ   r-   Ú<module>r°      sc   ðÙ .ç  „ ƒ	ß *ã Ý $Ý $Ý "÷õ ÷$\ñ $\÷N#
ñ #
÷L'Fñ 'F÷T'ñ '÷>3\ò 3\rJ   