o
    Df                     @   s   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 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 d	dl	mZ d	dl	mZ G dd deeZG dd deeZG dd deeZdS )    )Column)ForeignKeyConstraint)Integer)MetaData)String)Table   )AutogenFixtureTest   )combinations)configeq_)mock)TestBasec                   @   sd   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
ejjdd Zdd Zdd ZdS )AutogenerateForeignKeysTestT)!foreign_key_constraint_reflectionc              
   C   s   t  }t  }td|tdtddd td|tdtddtdtd	d
dtdtdddtdtdtdgdg td|tdtddd td|tdtddtdtd	d
dtdtdddtdtd | ||}| j|d dddgddgdd d S )N
some_tabletest
   Tprimary_keyuseridname2   Fnullablea1xserver_defaulttest2some_table.testr   	remove_fkservergeneratedconditional_namer   r   r   r   r   r   _fixture_assert_fk_diffselfm1m2diffs r0   _/home/ubuntu/webapp/venv/lib/python3.10/site-packages/alembic/testing/suite/test_autogen_fks.pytest_remove_fk   sN   
	
z*AutogenerateForeignKeysTest.test_remove_fkc              
   C   s  t  }t  }td|tdtddtdtd td|tdtddtdtd	d
dtdtdddtdtd td|tdtddtdtd td|tdtddtdtd	d
dtdtdddtdtdtdgdg | ||}| |d dddgddg d S )Nr   r   Tr   r   r   r   r   r   Fr   r   r   r    r"   r#   r   add_fk)r   r   r   r   r   r   r)   r*   r+   r0   r0   r1   test_add_fkC   sF   	
z'AutogenerateForeignKeysTest.test_add_fkc              
   C   s   t  }t  }td|tdtddtdtd td|tdtddtdtd	d
dtdtdddtdttdgdg td|tdtddtdtd td|tdtddtdtd	d
dtdtdddtdttdgdg | ||}t|g  d S )Nr   r   Tr   r   r   r   r   r   Fr   r   r   r    r"   some_table.id)r   r   r   r   r   r   r)   r   r+   r0   r0   r1   test_no_changen   sD   

z*AutogenerateForeignKeysTest.test_no_changec                 C   s6  t  }t  }td|tdtdddtdtddd td|tdtddtd	td
ddtdtdddtdtdtdtdtddgddg td|tdtdddtdtddd td|tdtddtd	td
ddtdtdddtdtdtdtdtddgddg | ||}t|g  d S )Nr   id_1r   Tr   id_2r   r   r   r   Fr   r   r   r    
other_id_1
other_id_2some_table.id_1some_table.id_2r   r   r   r   r   r   r)   r   r+   r0   r0   r1   test_no_change_composite_fk   sT   z7AutogenerateForeignKeysTest.test_no_change_composite_fkc                 C   sB  t  }t  }td|tdtddd td|tdtddtdtd	d
dtdtdddtdtdtdgdgdd td|tdtddd td|tdtddtdtd	d
dtdtdddtdtdtdgdgdd | ||}| j|d dddgddgtj	j
jrdnd d | j|d dddgddgdd d S )Nr   r   r   Tr   r   r   r   r   Fr   r   r   r    r"   r#   MyFKr   myfkr   r$   r   r3   )r   r   r   r   r   r   r)   r*   r   requirementsfk_namesenabledr+   r0   r0   r1   1test_casing_convention_changed_so_put_drops_first   sb   
	


zMAutogenerateForeignKeysTest.test_casing_convention_changed_so_put_drops_firstc                 C   sD  t  }t  }td|tdtdddtdtddd td|tdtddtd	td
ddtdtdddtdtdtdtd td|tdtdddtdtddd td|tdtddtd	td
ddtdtdddtdtdtdtdtddgddgdd | ||}| j|d ddddgdddgdd d S )Nr   r7   r   Tr   r8   r   r   r   r   Fr   r   r   r    r9   r:   r;   r<   fk_test_namer@   r   r3   r(   r+   r0   r0   r1   test_add_composite_fk_with_name  s^   

z;AutogenerateForeignKeysTest.test_add_composite_fk_with_namec                 C   sD  t  }t  }td|tdtdddtdtddd td|tdtddtd	td
ddtdtdddtdtdtdtdtddgddgdd td|tdtdddtdtddd td|tdtddtd	td
ddtdtdddtdtdtdtd | ||}| j|d ddddgdddgdd d S )Nr   r7   r   Tr   r8   r   r   r   r   Fr   r   r   r    r9   r:   r;   r<   rF   r@   r   r$   r&   r(   r+   r0   r0   r1   test_remove_composite_fk=  s^   

z4AutogenerateForeignKeysTest.test_remove_composite_fkc                 C   s  t  }t  }td|tdtdddtdtddd td|tdtddtd	tdtd
td td|tdtddddtdtdddd td|tdtddtd	tdddtd
tdddtddgddgdd | ||}| j|d ddd	d
gdddgdd d S )Nr   r7   r   Tr   r8   r   r   r9   r:   tid1keyr   tid2oid1rK   oid2some_table.tid1some_table.tid2rF   r@   r   r3   r(   r+   r0   r0   r1   test_add_fk_colkeysu  sV   
z/AutogenerateForeignKeysTest.test_add_fk_colkeysc              
   C   s  t  }t  }td|tdtdddtdtddd td|tdtddtd	tdtd
tdtd	d
gddg td|tdtddddtdtdddd td|tdtddtd	tdddtd
tdddtddgddg | ||}t|g  d S )Nr   r7   r   Tr   r8   r   r   r9   r:   r;   r<   rI   rJ   rL   rM   rN   rO   rP   rQ   r=   r+   r0   r0   r1   test_no_change_colkeys  sJ   z2AutogenerateForeignKeysTest.test_no_change_colkeysN)__name__
__module____qualname____backend____requires__r2   r4   r6   r>   rE   rG   r   rB   no_name_normalizerH   rR   rS   r0   r0   r0   r1   r      s    /+*2=6
73r   c                   @   sP   e Zd ZdZdZeddejjdd Z	dd Z
eddejjd	d
 ZdS )IncludeHooksTestT)rC   )objectr@   c           	   	   C   s   t  }t  }td|tdtdd}td|tdttdt}|t|jjg|jjgdd	 |t|jj	g|jjgd
d	 td|tdtdd}td|tdttdt |dkrgdd }| j
|||d}n|dkrwdd }| j
|||d}| j|d dddgddgd
d tt|d d S )Nrefr   Tr   tr   yfk1r@   fk2r[   c                 S   s    t | to|dko|o|dk S Nforeign_key_constraintr_   
isinstancer   object_r   type_	reflected
compare_tor0   r0   r1   include_object   s   
zBIncludeHooksTest.test_remove_connection_fk.<locals>.include_objectobject_filtersr   c                 S   s8   | dkr|dkr
dS t |d t |d ddd dS dS )Nr_   indexTrb   r]   schema_name
table_nameschema_qualified_table_nameFr   r   rg   parent_namesr0   r0   r1   include_name  s   
z@IncludeHooksTest.test_remove_connection_fk.<locals>.include_namename_filtersr   r$   r&   r   r   r   r   r   append_constraintr   cr   r   r^   r)   r*   r   len)	r,   	hook_typer-   r.   r\   t1rj   r/   rt   r0   r0   r1   test_remove_connection_fk  s\   	z*IncludeHooksTest.test_remove_connection_fkc              	   C   s   t  }t  }td|tdtdd td|tdttdt td|tdtdd}td|tdttdt}|t|jjg|jjgdd	 |t|jj	g|jjgd
d	 dd }| j
|||d}| j|d dddgddgd
d	 tt|d d S )Nr\   r   Tr   r]   r   r^   r_   r@   r`   c                 S   s"   t | to|dko| o|dk S ra   rc   re   r0   r0   r1   rj   K  s   
z=IncludeHooksTest.test_add_metadata_fk.<locals>.include_objectrk   r   r3   r   rw   )r,   r-   r.   r\   t2rj   r/   r0   r0   r1   test_add_metadata_fk)  sH   z%IncludeHooksTest.test_add_metadata_fkc              	   C   s"  t  }t  }td|tdtdd}td|tdtddtdtdd td|tdttd	ttd
t}|t|jjg|jjgdd |t|jj	g|jjgdd td|tdtdd td|tdtddtdtdd}td|tdttd	ttd
t}|t|jj|jj
g|jj|jjgdd |t|jj	|jj
g|jj|jjgdd |dkrdd }| j|||d}	n|dkrdd }
| j|||
d}	|dkr| j|	d ddd	gddgdd | j|	d ddd	d
gdddgdd tt|	d d S |dkrtdd |	D h d d S d S )Nref_aaTr   ref_bbr]   r   r^   zr_   r@   r`   r[   c                 S   s   t | to|dko|dk S ra   rc   re   r0   r0   r1   rj     s
   
z7IncludeHooksTest.test_change_fk.<locals>.include_objectrk   r   c                 S   s8   |dkrdS | dkrt |d t |d ddd dS dS )Nrm   Tr_   rb   r]   rn   Fr   rr   r0   r0   r1   rt     s   
z5IncludeHooksTest.test_change_fk.<locals>.include_nameru   r   r$   r   r3      c                 S   s   h | ]}|d  |d j fqS )r   r   r@   ).0dr0   r0   r1   	<setcomp>  s    z2IncludeHooksTest.test_change_fk.<locals>.<setcomp>>   r3   r_   r3   r`   r$   r`   )r   r   r   r   rx   r   ry   r   r   r^   r   r   r)   r*   r   rz   )r,   r{   r-   r.   r1ar|   r2br~   rj   r/   rt   r0   r0   r1   test_change_fkZ  s   	
zIncludeHooksTest.test_change_fkN)rT   rU   rV   rW   rX   r   r   rB   rY   r}   r   r   r0   r0   r0   r1   rZ     s    M1rZ   c                   @   s  e Zd ZdZdd Zejjdd Zejjdd Z	dd	 Z
ejjd
d Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjejjdd Zejjdd Zejjd d! Zejjejjd"d# Zejjejjd$d% Zejjejjd&d' Z ejjejjd(d) Z!ejjejjd*d+ Z"ejjd,d- Z#ejj$d.d/ Z%d0S )1AutogenerateFKOptionsTestTc              
   C   s   t  }t  }td|tdtddtdtd td|tdtddtdtd	d
dtdttdgdgfi | td|tdtddtdtd td|tdtddtdtd	d
dtdttdgdgfi | | ||S )Nr   r   Tr   r   r   r   r   r   Fr   tidr5   )r   r   r   r   r   r   r)   )r,   old_optsnew_optsr-   r.   r0   r0   r1   _fk_opts_fixture  s>   		z*AutogenerateFKOptionsTest._fk_opts_fixturec              
   C   V   |  i ddi}| j|d dddgddgd d	d
 | j|d dddgddgdd d S )Nondeletecascader   r$   r   r   r   r   r%   r   r'   r   r3   r   r   r*   r,   r/   r0   r0   r1   test_add_ondelete  (   
z+AutogenerateFKOptionsTest.test_add_ondeletec              
   C   V   |  ddii }| j|d dddgddgdd	d
 | j|d dddgddgd d d S )Nr   CASCADEr   r$   r   r   r   r   r%   r   r   r3   r   r   r   r0   r0   r1   test_remove_ondelete  r   z.AutogenerateFKOptionsTest.test_remove_ondeletec                 C   "   |  ddiddi}t|g  dS )test case sensitivityr   caSCAdeCasCadeNr   r   r   r0   r0   r1   test_nochange_ondelete&  s   z0AutogenerateFKOptionsTest.test_nochange_ondeletec              
   C   r   )Nonupdater   r   r$   r   r   r   r   r%   r   r'   r   r3   r   r   r   r0   r0   r1   test_add_onupdate-  r   z+AutogenerateFKOptionsTest.test_add_onupdatec              
   C   r   )Nr   r   r   r$   r   r   r   r   r%   r   r   r3   r   r   r   r0   r0   r1   test_remove_onupdateF  r   z.AutogenerateFKOptionsTest.test_remove_onupdatec                 C   r   )r   r   r   r   Nr   r   r0   r0   r1   test_nochange_onupdate_  s   z0AutogenerateFKOptionsTest.test_nochange_onupdatec                 C   "   |  ddiddi}t|g  dS )6test the RESTRICT option which MySQL doesn't report onr   restrictNr   r   r0   r0   r1   test_nochange_ondelete_restrictg     z9AutogenerateFKOptionsTest.test_nochange_ondelete_restrictc                 C   r   )r   r   r   Nr   r   r0   r0   r1   test_nochange_onupdate_restrictp  r   z9AutogenerateFKOptionsTest.test_nochange_onupdate_restrictc                 C   r   )<test the NO ACTION option which generally comes back as Noner   	no actionNr   r   r0   r0   r1   test_nochange_ondelete_noactiony  r   z9AutogenerateFKOptionsTest.test_nochange_ondelete_noactionc                 C   r   )r   r   r   Nr   r   r0   r0   r1   test_nochange_onupdate_noaction  r   z9AutogenerateFKOptionsTest.test_nochange_onupdate_noactionc                 C   s`   |  ddiddi}| j|d dddgdd	gd
tjdd	 | j|d dddgdd	gd
dd d
S )r   r   r   r   r   r$   r   r   r   r   Nr%   r   r   r'   r   r3   r   r   r   r*   r   ANYr   r0   r0   r1   "test_change_ondelete_from_restrict  s0   
z<AutogenerateFKOptionsTest.test_change_ondelete_from_restrictc                 C   s`   |  ddiddi}| j|d dddgdd	gtjd
dd	 | j|d dddgdd	gdd
d d
S )r   r   r   r   r   r$   r   r   r   r   Nr%   r   r   r3   r   r   r   r0   r0   r1   "test_change_onupdate_from_restrict  s0   
z<AutogenerateFKOptionsTest.test_change_onupdate_from_restrictc                 C   sb   |  dddddd}| j|d dddgd	d
gdddd	 | j|d dddgd	d
gddd d S )Nr   zSET NULLr   RESTRICTr   r$   r   r   r   r   r%   r   r   r3   r   r   r0   r0   r1   test_ondelete_onupdate_combo  s2   
z6AutogenerateFKOptionsTest.test_ondelete_onupdate_comboc              
   C   r   )N	initiallydeferredr   r$   r   r   r   r   r%   r   r'   r   r3   r   r   r   r0   r0   r1   test_add_initially_deferred  r   z5AutogenerateFKOptionsTest.test_add_initially_deferredc                 C   sX   |  ddii }| j|d dddgddgd	d
dd	 | j|d dddgddgd d d S )Nr   r   r   r$   r   r   r   r   DEFERREDTr%   r   
deferrabler'   r   r3   r   r   r   r0   r0   r1   test_remove_initially_deferred  s*   
z8AutogenerateFKOptionsTest.test_remove_initially_deferredc              
   C   sZ   |  i ddd}| j|d dddgdd	gd d
d | j|d dddgdd	gddd d S )N	immediateTr   r   r   r$   r   r   r   r   r%   r   r   r3   r   r   r0   r0   r1   ,test_add_initially_immediate_plus_deferrable  s.   

zFAutogenerateFKOptionsTest.test_add_initially_immediate_plus_deferrablec                 C   s\   |  dddi }| j|d dddgdd	gd dd
d	 | j|d dddgdd	gd d d d S )Nr   Tr   r   r$   r   r   r   r   r%   r   r   r3   r   r   r0   r0   r1   /test_remove_initially_immediate_plus_deferrable:  s0   

zIAutogenerateFKOptionsTest.test_remove_initially_immediate_plus_deferrablec                 C   &   |  dddddd}t|g  d S )NTr   r   r   r   r   r0   r0   r1   *test_add_initially_deferrable_nochange_oneX  
   zDAutogenerateFKOptionsTest.test_add_initially_deferrable_nochange_onec                 C   r   )NTr   r   r   r   r0   r0   r1   *test_add_initially_deferrable_nochange_twob  r   zDAutogenerateFKOptionsTest.test_add_initially_deferrable_nochange_twoc                 C   s&   |  d ddd dd}t|g  d S )Nr   r   r   r   r0   r0   r1   ,test_add_initially_deferrable_nochange_threel  r   zFAutogenerateFKOptionsTest.test_add_initially_deferrable_nochange_threec              
   C   r   Nr   Tr   r$   r   r   r   r   r%   )r   r'   r   r3   )r   r   r   r0   r0   r1   test_add_deferrablev  r   z-AutogenerateFKOptionsTest.test_add_deferrablec              
   C   r   r   r   r   r0   r0   r1   test_remove_deferrable  r   z0AutogenerateFKOptionsTest.test_remove_deferrableN)&rT   rU   rV   rW   r   r   rB   fk_ondelete_is_reflectedr   r   r   fk_onupdate_is_reflectedr   r   fk_onupdater   fk_ondelete_restrictr   fk_onupdate_restrictr   fk_ondelete_noactionr   r   r   r   r   fk_initiallyr   r   fk_deferrabler   r   r   r   r   r   fk_deferrable_is_reflectedr   r0   r0   r0   r1   r     sh    &













r   N)
sqlalchemyr   r   r   r   r   r   _autogen_fixturesr	   testingr   r   r   r   r   r   rZ   r   r0   r0   r0   r1   <module>   s&       I v