3
̾6b9                 @   s6  d dl mZ d dlmZmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZ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mZ d dlmZ d dlmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) dd Z*dd Z+edd Z,G dd de	j-Z.G dd deZ/G dd deZ0dS )    )contextmanager)abspathdirnameexistsjoinN)forms)call_command)IntegrityError
connection)DatabaseWrapper)NOT_PROVIDED)TestCase)RequestFactory)	EnumField)	BlankEnumEnum)InvalidStatusOperationError)EnumChoiceField)	Beer	BeerState	BeerStyle	LabelBeerLamp	LampStatePersonPersonStatusPersonStatusDefaultc             C   s   | j  jd dS )NzPRAGMA foreign_keys = OFFT)cursorexecute)self r    _/var/www/html/sandeepIITI/myenv/lib/python3.6/site-packages/django_enumfield/tests/test_enum.py!_mock_disable_constraint_checking   s    r"   c             C   s.   d| j  | _ }z| j jd W d || _ X d S )NFzPRAGMA foreign_keys = ON)needs_rollbackr   r   )r   r#   r    r    r!    _mock_enable_constraint_checking#   s    r$   c              c   sJ   t jdkrd V  d S tj} tj}tt_tt_z
d V  W d | t_|t_X d S )NZsqlite)r
   vendorr   Zenable_constraint_checkingZdisable_constraint_checkingr$   r"   )Z
old_enableZold_disabler    r    r!   patch_sqlite_connection+   s    

r&   c               @   s   e Zd ZG dd dZdS )
PersonFormc               @   s   e Zd ZeZdZdS )zPersonForm.MetastatusN)r(   )__name__
__module____qualname__r   modelfieldsr    r    r    r!   Meta@   s   r.   N)r)   r*   r+   r.   r    r    r    r!   r'   ?   s   r'   c               @   s|   e Z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d Zdd ZdS )EnumFieldTestc             C   s   xt tttjij D ]p\}}t|}| j|j| | jt|j	 t|j	 t||j
d}| j|j|j
 t|d d}| j|jd  qW d S )N)default)r   r   r   UNBORNitemsr   assertEqualr0   lenchoicesALIVE)r   enumr0   fieldr    r    r!   test_enum_field_initF   s    z"EnumFieldTest.test_enum_field_initc             C   s  t jj }| j|jtj tj|_|j  | j|jtj | j|jd | j	t
t|dd tjj }|j}| j|jtj tj|_|j  | jt|jt | j|jtj tjj|d}| j|jtj | jt|jt | jt|jt | j	t
t|dd tjjtjd}| j	t
t|dtj tj|_| j|j d | j	t
 tj|_|j  W d Q R X | jtjjtjdj  tjj }tj|_| j|jtj |j  d S )N   statec   )pkr(   )r(   zPerson.save) r   objectscreater3   r;   r   OFFONsaveassertRaisesr   setattrr   r=   r(   r   r6   DEAD
assertTrue
isinstancegetintr1   VOIDfilterr   r   r   LAGERstyler   FIZZY)r   lamppersonr=   beerr    r    r!   test_enum_field_saveS   s@    


z"EnumFieldTest.test_enum_field_savec             C   sl   t jjtjd}t jj|jd}tj|_|j	  | j
|jtj | j
|jtj |j  | j
|jtj d S )N)r;   )r=   )r   r>   r?   r   r@   rH   idrA   r;   rB   r3   Zrefresh_from_db)r   rO   Zlamp2r    r    r!   test_enum_field_refresh_from_db   s    z-EnumFieldTest.test_enum_field_refresh_from_dbc             C   s(   t jjtjd}| jt|d d d S )N)rM   Zget_style_display	WEISSBIER)r   r>   r?   r   rU   r3   getattr)r   rQ   r    r    r!   test_magic_model_properties   s    z)EnumFieldTest.test_magic_model_propertiesc             C   s.   t jj }|`| j|jd  | jt|j d S )N)r   r>   r?   r;   r3   rC   r	   rB   )r   rO   r    r    r!   test_enum_field_del   s    
z!EnumFieldTest.test_enum_field_delc             C   sB   t jj }tj|_d |_|j  | j|jd  | j|jtj d S )N)	r   r>   r?   r   STOUTrM   r;   rB   r3   )r   rQ   r    r    r!   test_enum_field_del_save   s    
z&EnumFieldTest.test_enum_field_del_savec             C   s   t  }|jdddid}t|j}| jt|jd tj | j|j	  |j
 }| j|jtj |jdddid}t|j|d}| j|j	  d S )N r(   2)data99)instance)r   postr'   POSTrF   rG   r-   r   TypedChoiceFieldis_validrB   r(   r   rE   assertFalse)r   request_factoryrequestformrP   r    r    r!    test_enum_field_modelform_create   s    
z.EnumFieldTest.test_enum_field_modelform_createc             C   s   t jj }t }|jdddid}t|j|d}| jt|j	d t
j | j|j  |j  | j|jtj |jdddid}t|j|d}| j|j  d S )Nr[   r(   r\   )r]   )r_   r^   )r   r>   r?   r   r`   r'   ra   rF   rG   r-   r   rb   rc   rB   r(   r   rE   rd   )r   rP   re   rf   rg   r    r    r!   test_enum_field_modelform   s    
z'EnumFieldTest.test_enum_field_modelformc             C   sP   t jj }t|d}| j|jd jtjj	 | j
djtjj	tj|d  d S )N)r_   r(   z<option value="{}" selected)r   r>   r?   r'   r3   r-   initialr   r6   valueassertInformatsix	text_type)r   rP   rg   r    r    r!   !test_enum_field_modelform_initial   s    

z/EnumFieldTest.test_enum_field_modelform_initialc             C   s  G dd dt j}| }| jt|jd jd | j|jd jd d jd | j|jd jd d jd | j|jd jd	 d jd
 | jt|jd jd | j|jd jd d jd | j|jd jd d jd | j|jd jd	 d jd | j|jd jd d jd d S )Nc               @   s   e Zd ZG dd dZdS )z>EnumFieldTest.test_enum_field_nullable_field.<locals>.BeerFormc               @   s   e Zd ZeZdZdS )zCEnumFieldTest.test_enum_field_nullable_field.<locals>.BeerForm.MetarM   r;   N)rM   r;   )r)   r*   r+   r   r,   r-   r    r    r    r!   r.      s   r.   N)r)   r*   r+   r.   r    r    r    r!   BeerForm   s   rq   rM      r   r:   rL   rY      rU   r;      r[   rN   ZSTALEZEMPTY)r   	ModelFormr3   r4   r-   r5   label)r   rq   rg   r    r    r!   test_enum_field_nullable_field   s    z,EnumFieldTest.test_enum_field_nullable_fieldc             C   sf   t tt}| jtt|d t|d}| jt|  tdd t  tddd W d Q R X d S )Nz	models.pyZ
migrationsZmakemigrationstestsZ
sqlmigrateZ0001)r   r   __file__rF   r   r   r   r&   )r   Zapp_dirZmigrations_dirr    r    r!   test_migration   s    

zEnumFieldTest.test_migrationc             C   s   G dd dt j}|dtjid}| j|d jtjj | jdjtjjt	j
|d  | j|jd jtj  |dt	j
tjjidtjjid}| j|j |j | j|jd tj d S )Nc               @   s   e Zd ZeeZdS )z<EnumFieldTest.test_enum_form_field.<locals>.CustomPersonFormN)r)   r*   r+   r   r   r(   r    r    r    r!   CustomPersonForm   s   r{   r(   )rj   z<option value="{}" selected)r]   rj   )r   Formr   rE   r3   rj   rk   rl   rm   rn   ro   r-   r5   r6   rF   rc   errorscleaned_data)r   r{   rg   r    r    r!   test_enum_form_field   s    z"EnumFieldTest.test_enum_form_fieldc             C   s   G dd dt j}|dd idtjjid}| j|jd jtjdd | jdt	j
|d  | j|j |j | j|jd t	j
  d S )Nc               @   s   e Zd ZeeddZdS )zIEnumFieldTest.test_enum_form_field_not_required.<locals>.CustomPersonFormF)requiredN)r)   r*   r+   r   r   r(   r    r    r    r!   r{      s   r{   r(   )r]   rj   T)blankz<option value="" selected)r   r|   r   rE   rk   r3   r-   r5   rl   rn   ro   rF   rc   r}   r~   )r   r{   rg   r    r    r!   !test_enum_form_field_not_required   s    z/EnumFieldTest.test_enum_form_field_not_requiredc             C   s   t d d}| j|j  d S )N)r;   )r   assertIsNoneZget_state_display)r   rQ   r    r    r!   test_enum_display_none  s    
z$EnumFieldTest.test_enum_display_noneN)r)   r*   r+   r9   rR   rT   rW   rX   rZ   rh   ri   rp   rw   rz   r   r   r   r    r    r    r!   r/   E   s   .	r/   c               @   s|   e Z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d Zdd ZdS )EnumTestc             C   s~   | j tjjtjd | j tjjtjd | j tjtjtjd | j tjtjtjd | j tjtjtjd d S )Nr6   zStella Artois)r3   r   r6   rv   rn   ro   r   STELLA)r   r    r    r!   
test_label  s    zEnumTest.test_labelc             C   s~   | j tjjtjd | j tjjtjd | j tjtjjtjd | j tjdtjd | j tjtjtjd d S )Nr6   r   )	r3   r   r6   namern   ro   r   r   rk   )r   r    r    r!   	test_name  s    zEnumTest.test_namec             C   s   | j ttjtjt | j ttjtjdt | jtjtjtjtjd | jtjddd | jtjddd d S )Nr6   ZALIVEISH?r<   z??)	rF   rG   r   rH   r6   r   rn   ro   r3   )r   r    r    r!   test_get$  s    
zEnumTest.test_getc             C   sT   | j tjtjd | j tjtjjd | j tjtjjd | jtjd d S )Nr6   Y   )r3   r   get_namer6   rk   r   r   )r   r    r    r!   test_get_name0  s    zEnumTest.test_get_namec             C   sT   | j tjtjd | j tjtjjd | j tjtjjd | jtjd d S )NzStella Artoisr   )r3   r   Z	get_labelr   rk   r   r   )r   r    r    r!   test_get_label6  s    zEnumTest.test_get_labelc             C   s   | j ttj tt xHtj D ]<\}}| jt|t | jt|t | jtj||k q"W tjddd }| j |tj	j
tj	f d S )NT)r   r   )r3   r4   r   r5   rF   rG   rI   rH   r   ZBLANKrk   )r   rk   memberr   r    r    r!   test_choices<  s    zEnumTest.test_choicesc             C   sl   | j ttj tt xNtj D ]B\}}| jt|t | jt|tj | j tj	|tj	| q"W d S )N)
r3   r4   r   r2   rF   rG   rI   rn   string_typesrH   )r   r   rk   r    r    r!   
test_itemsE  s
    zEnumTest.test_itemsc             C   s4   x.t d ttjij D ]\}}| j|j | qW d S )N)r   r   r1   r2   r3   r0   )r   r7   r0   r    r    r!   test_defaultL  s    zEnumTest.test_defaultc             C   s   | j ttj t d S )N)rF   rG   r   r8   r   )r   r    r    r!   
test_fieldS  s    zEnumTest.test_fieldc             C   sD   | j tjtjk | jtjtjk | jtjtjtjtj d S )N)rF   r   r6   rd   rE   r3   rH   )r   r    r    r!   
test_equalV  s    zEnumTest.test_equalc             C   s   | j tjjtjj | jtjjtjj | jttjjt	j
 | j tjjt	jd | j tjtjjt	jd | j tjdt	jd d S )NzStella Artoisr   )r3   r   JUPILERr   rv   ZassertNotEqualr   rF   rG   rn   r   ro   rk   )r   r    r    r!   test_labels]  s    zEnumTest.test_labelsc             C   s   | j tjditj  d S )NT)rF   r   r   )r   r    r    r!   	test_hashi  s    zEnumTest.test_hashc             C   s8   | j tjtjj | jtjtj | j tjtjj d S )N)ZassertGreaterr   r6   r1   rk   Z
assertLess
REANIMATEDrJ   )r   r    r    r!   test_comparisonl  s    zEnumTest.test_comparisonc             C   sD   | j tjtjjtjtjjtjtjjtjtjjtjtjjtji d S )N)	r3   r   valuesr1   rk   r6   rE   r   rJ   )r   r    r    r!   test_valuesq  s    



zEnumTest.test_valuesN)r)   r*   r+   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   r     s   	r   )1
contextlibr   os.pathr   r   r   r   rn   Zdjangor   Zdjango.core.managementr   Z	django.dbr	   r
   Zdjango.db.backends.sqlite3.baser   Zdjango.db.models.fieldsr   Zdjango.testr   Zdjango.test.clientr   Zdjango_enumfield.db.fieldsr   Zdjango_enumfield.enumr   r   Zdjango_enumfield.exceptionsr   Zdjango_enumfield.forms.fieldsr   Zdjango_enumfield.tests.modelsr   r   r   r   r   r   r   r   r   r"   r$   r&   ru   r'   r/   r   r    r    r    r!   <module>   s*   , G