a
    xdR\                     @   sF  d dl 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 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mZmZmZmZmZmZmZm Z  d dl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddlm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7 dd Z8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd  Z?d!d" Z@e&d#d$ ZAd%d& ZBd'd( ZCd)d* ZDd+d, ZEd-d. ZFd/d0 ZGd1d2 ZHd3d4 ZIe'd5d6 ZJe'd7d8 ZKe$d9d: ZLe&d;d< ZMe&d=d> ZNe&e jOPd?d@dAgdBdC ZQe%dDdE ZRe&dFdG ZSdHdI ZTe&dJdK ZUe&dLdM ZVdS )N    N)forms)formset_factorymodelformset_factory)_get_new_csrf_string)render)ContextTemplate)reverse)gettext_lazy)FieldInlineCheckboxes)
FormHelper)	HTMLButtonHolderColumnDivFieldsetLayout
MultiFieldRowSubmit)render_crispy_form   )only_bootstraponly_bootstrap3only_bootstrap4only_uni_form)AdvancedFileFormCheckboxesSampleFormCrispyEmptyChoiceTestModelCrispyTestModelFileForm
SampleFormSampleForm2SampleForm3SampleForm4SampleForm5SampleForm6SelectSampleForm)contains_partialparse_expected
parse_formc                 C   sj   t  }|td td}tt |d}d| _tt	 |
| W d    n1 s\0    Y  d S )Nu   españaP
        {% load crispy_forms_tags %}
        {% crispy form form_helper %}
    formform_helperFr   
add_layoutr   r   r   r"   ZCRISPY_FAIL_SILENTLYpytestZraises	Exceptionr   settingsr/   templatec r8   V/var/www/html/Ranjet/env/lib/python3.9/site-packages/crispy_forms/tests/test_layout.pytest_invalid_unicode_characters"   s    r:   c                  C   s,   G dd dt j} t|  }d|v s(J d S )Nc                       s,   e Zd Z fddZe Zede_  ZS )z,test_unicode_form_field.<locals>.UnicodeFormc                    s$   t  j|i | t | jd< d S )N   contraseña)super__init__r   	CharFieldfields)selfargskwargs	__class__r8   r9   r=   5   s    z5test_unicode_form_field.<locals>.UnicodeForm.__init__r;   )	__name__
__module____qualname__r=   r   helperr   layout__classcell__r8   r8   rC   r9   UnicodeForm4   s   rK   u   id="id_contraseña")r   Formr   )rK   htmlr8   r8   r9   test_unicode_form_field3   s    
rN   c                  C   s^   G dd dt } |  }|jd= t }td|_td}t||d}||}d|vsZJ d S )Nc                   @   s   e Zd ZG dd dZdS )z@test_meta_extra_fields_with_missing_fields.<locals>.FormWithMetac                   @   s   e Zd ZdZdS )zEtest_meta_extra_fields_with_missing_fields.<locals>.FormWithMeta.Meta)email
first_name	last_nameN)rE   rF   rG   r?   r8   r8   r8   r9   MetaB   s   rR   N)rE   rF   rG   rR   r8   r8   r8   r9   FormWithMetaA   s   rS   rO   rP   r,   r-   )r"   r?   r   r   rI   r   r   r   )rS   r.   r/   r6   r7   rM   r8   r8   r9   *test_meta_extra_fields_with_missing_fields@   s    

rT   c                 C   sj   t  }|td td}tt |d}d| _tt	 |
| W d    n1 s\0    Y  d S )NZtypor,   r-   Fr0   r4   r8   r8   r9   test_layout_unresolved_fieldW   s    rU   c                 C   sl   t  }|tdd td}tt |d}d| _tt	 |
| W d    n1 s^0    Y  d S )N
is_companyr,   r-   Fr0   r4   r8   r8   r9   test_double_rendered_fieldg   s    rW   c                  C   sf   G dd dt j} |  }t }td}t||d}||}|ddksPJ |ddksbJ d S )	Nc                   @   s   e Zd Ze ZdS )z+test_context_pollution.<locals>.ExampleFormN)rE   rF   rG   r   r>   commentr8   r8   r8   r9   ExampleFormx   s   rY   zw
        {% load crispy_forms_tags %}
        {{ form.as_ul }}
        {% crispy form2 %}
        {{ form.as_ul }}
    )r.   form2zname="comment"   zname="is_company"r   )r   rL   r"   r   r   r   count)rY   r.   rZ   r6   r7   rM   r8   r8   r9   test_context_pollutionw   s    
r]   c                 C   s  t  }|ttdddddddtdd	td
ddddtdtddd td}tt |ddd}|	|}d|v s|J d|v sJ d|v sJ d|v sJ d|v sJ |
ddksJ | jdkrd|v sJ n$| jd krd!|v sJ nd"|v sJ d|v sJ d#|v sJ d S )$NCompany DatarV   Zfieldset_company_dataZ	fieldsetsZfieldset_title123)css_id	css_classtitleZtest_fieldsetz	User DatarO   	password1	password2Zrow_passwordsrowsr`   ra   z'<a href="#" id="testLink">test link</a>zK
                    {% if flag %}{{ message }}{% endif %}
                rP   rQ   r,   TzHello!)r.   r/   flagmessagezid="fieldset_company_data"zclass="fieldsetsztitle="fieldset_title"ztest-fieldset="123"zid="row_passwords"z<label   uni_formzclass="formRow rows"
bootstrap4zclass="form-row rows"zclass="row rows"ZtestLink)r   r1   r   r   r   r   r   r   r"   r   r\   CRISPY_TEMPLATE_PACK)r5   r/   r6   r7   rM   r8   r8   r9   5test_layout_fieldset_row_html_with_unicode_fieldnames   s^    


rm   c                  C   s~   t d} t }t }|ttdddddddtd	d
dd |jd= |jjd jd= t	||d}| 
|}d|vszJ d S )Nr,   r^   rV   rO   rc   rd   multifield_infor`   rP   rQ   column_namer   r   r-   )r   r"   r   r1   r   r   r   r?   rI   r   r   )r6   r.   r/   r7   rM   r8   r8   r9   +test_change_layout_dynamically_delete_field   s6    
rq   c                 C   s   t d}t }t }|ttdddddddtd	d
 t||d}||}| j	dkr|
ddksnJ |
ddksJ n.| j	dkr|
ddksJ |
ddksJ d S )Nr,   r^   rV   rO   rc   rd   rn   ro   rP   rQ   r-   rj   
formColumnr   colr   rk   col-md)r   r"   r   r1   r   r   r   r   r   rl   r\   r5   r6   r.   r/   r7   rM   r8   r8   r9   test_column_has_css_classes   s4    


rv   c              
   C   s   t d}t }t }|ttddtddddtdddd t||d}||}|dd	ksjJ |dd
ks|J d S )Nr,   rP   rQ   zcol-smra   zmb-4r-   rt   r[   r   )	r   r"   r   r1   r   r   r   r   r\   ru   r8   r8   r9   test_bs4_column_css_classes  s     
rx   c                 C   s  t tdd}| }t }d|_d|_d|_d|_ttddd	t	d
t
ddtddd|_t||dt id}t|ds|J t|dsJ t|dsJ t|dsJ |ddksJ |ddksJ |ddksJ d|v sJ d|v sJ d|v sJ dtd |v sJ d|v s&J d|v s4J d |v sBJ |d!dksVJ | jd"krx|d#dksJ n | jd$v r|d%dksJ | jd&kr|d'd(ksJ d S ))N   )extraZthisFormsetRockszformsets-that-rockPOSTZsimpleActionzItem {{ forloop.counter }}rV   rO   z9{% if forloop.first %}Note for first form only{% endif %}rc   rd    rP   rQ   Z
csrf_token)r.   rH   contextQ<input id="id_form-TOTAL_FORMS" name="form-TOTAL_FORMS" type="hidden" value="3"/>U<input id="id_form-INITIAL_FORMS" name="form-INITIAL_FORMS" type="hidden" value="0"/>X<input id="id_form-MAX_NUM_FORMS" name="form-MAX_NUM_FORMS" type="hidden" value="1000"/>zU<input id="id_form-MIN_NUM_FORMS" name="form-MIN_NUM_FORMS" type="hidden" value="0"/>hidden   z<formr   Zcsrfmiddlewaretokenzmethod="post"zid="thisFormsetRocks"zaction="%s"zItem 1zItem 2zItem 3zNote for first form onlyrj   ZformRow)
bootstrap3rk   rowrk   z
form-group   )r   r"   r   Zform_id
form_classZform_methodZform_actionr   r   r   r   rI   r   r   r)   r\   r	   rl   )r5   ZSampleFormSetformsetrH   rM   r8   r8   r9   test_formset_layout+  sZ    
r   c                  C   s   t ttdd} | tj d}t }td|_t||d}|	ddksLJ |	ddks^J |	d	dkspJ t
|d
s~J t
|dsJ t
|dsJ |	ddksJ |	ddksJ |	ddksJ |	ddksJ |	ddksJ d S )Nry   )r.   rz   )ZquerysetrO   )r.   rH   zid_form-0-idr   zid_form-1-idzid_form-2-idr~   r   r   zname="form-0-email"zname="form-1-email"zname="form-2-email"zname="form-3-email"r   password)r   r    r%   Zobjectsnoner   r   rI   r   r\   r)   )ZCrispyModelFormSetr   rH   rM   r8   r8   r9   test_modelformset_layoutc  s(    
r   c                  C   sb   t d} t }t }tttdttddd|_||_| 	t
d|i}|ddks^J d S )NzP
        {% load crispy_forms_tags %}
        {% crispy form form.helper %}
    z	i18n textzi18n legendrP   rQ   r.   r   )r   r"   r   r   r   _r   rI   rH   r   r   r\   )r6   r.   r/   rM   r8   r8   r9   	test_i18n~  s     
r   c                  C   s    t  } | jjjg dksJ d S )N)rV   rO   rc   rd   rP   rQ   Zdatetime_field)r#   rH   rI   r?   	test_formr8   r8   r9   test_default_layout  s    r   c                  C   s   t  } | jjjdgksJ d S )NrO   )r$   rH   rI   r?   r   r8   r8   r9   test_default_layout_two  s    r   c                  C   s>   t  } t | _td| j_t| }d|v s.J d|vs:J d S )NrO   r   )r%   r   rH   r   rI   r   r   rM   r8   r8   r9   "test_modelform_layout_without_meta  s    r   c                  C   sH   t  } t | jd _t | _tdtd| j_	t
| }d|v sDJ d S )NrO   z0<span>first span</span> <span>second span</span>)r"   r   ZTextarear?   Zwidgetr   rH   r   r   rI   r   r   r8   r8   r9   2test_specialspaceless_not_screwing_intended_spaces  s    r   c                  C   s.   t  } d | _t| d}t|}d|v s*J d S )N)instancechecked)r   Zfruitr'   r   )Zmodel_instancer   rM   r8   r8   r9   !test_choice_with_none_is_selected  s
    
r   c                  C   s   t  } | tttdddddtdddd	ttd
d
ddtddddd	 td}t	t
 | d}||}d|v s|J d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|vsJ d S )NSome company datarV   rO   rn   ro   rP   rp   columnsrf   Savebutton whiterw   rc   rd   
custom-div
customdivs\
            {% load crispy_forms_tags %}
            {% crispy form form_helper %}
        r-   
multiFieldrr   id="multifield_info"id="column_name"class="formColumn columns"class="buttonHolder">input type="submit"zname="Save"id="custom-div"class="customdivs"rQ   r   r1   r   r   r   r   r   r   r   r   r"   r   r/   r6   r7   rM   r8   r8   r9   test_layout_composition  sV    
r   c                  C   s|  t  } | ttdddddddtdd	d
ddttddddddtddtdddddd td}t	t
 | dd}||}d|v sJ d|v sJ d|v sJ d|v sJ d |v sJ d!|v sJ d"|v sJ d#|v sJ d$|v sJ d|v sJ d%|v sJ d&|v sJ d'|v s$J d(|v s2J d)|v s@J d*|v sNJ d+|v s\J d,|v sjJ d-|v sxJ d S ).Nr   rV   rO   rn   Zmultifield_titler_   )r`   rb   Zmultifield_testrP   rQ   rp   r   rf   zSave the worldz{{ value_var }}r   test)ra   Zdata_idZ	data_namestorezStore resultsrc   rd   r   r   )r`   ra   Ztest_markupr   r   )r.   r/   Z	value_varr   rr   r   ztitle="multifield_title"zmultifield-test="123"r   r   r   r   zdata-id="test"zdata-name="test"zname="save-the-world"zvalue="Save"zname="store"zvalue="Store results"r   r   ztest-markup="123"r   r   r8   r8   r9   <test_second_layout_multifield_column_buttonholder_submit_div  sd    

r   c                 C   s   t  }t |_tdtdd|j_d|i}td d|d}| jdkrX|j	dd	ksJ nR| jd
krx|j	dd	ksJ n2| jdkr|j	dd	ksJ |j	ddksJ d S )N
checkboxesalphacheckboxesnumeric_multiple_checkboxesr.   zcrispy_render_template.html)requestZtemplate_namer}   Z	bootstraps   checkbox inlinery   r   s   checkbox-inlinerk   s   custom-control-inlines   custom-checkboxr   )
r   r   rH   r   r   rI   r   rl   contentr\   )r5   r.   r}   responser8   r8   r9    test_keepcontext_context_manager4  s    


r   c                  C   s   t  } t | _tdtdd| j_t| tdks6J d| j_t| tdksRJ d| j_t| tdksnJ t i } t | _tdtdd| j_t| tdksJ d S )	Nr   r   r   zNbootstrap4/test_layout/test_use_custom_control_is_used_in_checkboxes_true.htmlTFzObootstrap4/test_layout/test_use_custom_control_is_used_in_checkboxes_false.htmlzVbootstrap4/test_layout/test_use_custom_control_is_used_in_checkboxes_true_failing.html)	r   r   rH   r   r   rI   r+   r*   use_custom_controlr.   r8   r8   r9   -test_use_custom_control_is_used_in_checkboxesI  s8    


r   c                  C   s   t  } t | _td| j_t| tdks.J d| j_t| tdksJJ d| j_t| tdksfJ t i } t | _td| j_t| tdksJ d S )NZradio_selectzIbootstrap4/test_layout/test_use_custom_control_is_used_in_radio_true.htmlTFzJbootstrap4/test_layout/test_use_custom_control_is_used_in_radio_false.htmlzQbootstrap4/test_layout/test_use_custom_control_is_used_in_radio_true_failing.html)r&   r   rH   r   rI   r+   r*   r   r   r8   r8   r9   (test_use_custom_control_is_used_in_radiom  s0    


r   z!use_custom_control, expected_html)TzBbootstrap4/test_layout/test_use_custom_control_in_select_true.html)FzCbootstrap4/test_layout/test_use_custom_control_in_select_false.htmlc                 C   sB   t  }t |_d|j_td|j_| |j_t|t|ks>J d S )Nrk   select)	r(   r   rH   Ztemplate_packr   rI   r   r+   r*   )r   Zexpected_htmlr.   r8   r8   r9   !test_use_custom_control_in_select  s    	r   c                  C   s   t  } t | _d| j_d| j_tddd| j_t| }|ddksHJ |dd	ksZJ |d
dkslJ |ddks~J |ddksJ |dd	ksJ d S )Nform-inlinez#bootstrap3/layout/inline_field.htmlrO   rc   rQ   class="form-inline"r   zclass="form-group"ry   $<label for="id_email" class="sr-onlyz$id="div_id_email" class="form-group"placeholder="email"</label> <input	r"   r   rH   r   Zfield_templater   rI   r   r\   r.   rM   r8   r8   r9   test_form_inline  s     r   c                  C   s   t  } t | _d| j_d| j_tddd| j_t| }|ddksHJ |dd	ksZJ |d
dkslJ |ddks~J |ddksJ |dd	ksJ d S )Nr   z#bootstrap4/layout/inline_field.htmlrO   rc   rQ   r   r   zclass="input-group"ry   r   z%id="div_id_email" class="input-group"r   r   r   r   r8   r8   r9   test_bootstrap4_form_inline  s    r   c                  C   s   t  } t | _tdtdd| j_| jd jdd t| }|ddksNJ t | _tdtdddd| j_| jd jdd t| }|d	dksJ d S )
NrO   rc   rd   Zhellorw   z class="hello textinputr   Zhello2z class="hello hello2 textinput)	r"   r   rH   r   r   rI   Zupdate_attributesr   r\   r   r8   r8   r9   test_update_attributes_class  s    
r   c                  C   s   t  } t | _td| j_t| tdks.J d| j_t| tdksJJ d| j_td| j_t| tdksrJ d| j_t| tdksJ d S )	Nclearable_filezDbootstrap4/test_layout/test_file_field_clearable_custom_control.htmlFz5bootstrap4/test_layout/test_file_field_clearable.htmlT
file_fieldz:bootstrap4/test_layout/test_file_field_custom_control.htmlz3bootstrap4/test_layout/test_file_field_default.html)r!   r   rH   r   rI   r+   r*   r   r   r8   r8   r9   test_file_field  s    r   c                  C   sR   t  } t | _td| j_t| tdks.J td| j_t| tdksNJ d S )Nr   zGbootstrap4/test_layout/test_file_field_with_custom_class_clearable.htmlr   z=bootstrap4/test_layout/test_file_field_with_custom_class.html)r   r   rH   r   rI   r+   r*   r   r8   r8   r9   !test_file_field_with_custom_class  s    
r   )Wr2   Zdjangor   Zdjango.forms.modelsr   r   Zdjango.middleware.csrfr   Zdjango.shortcutsr   Zdjango.templater   r   Zdjango.urlsr	   Zdjango.utils.translationr
   r   Zcrispy_forms.bootstrapr   r   Zcrispy_forms.helperr   Zcrispy_forms.layoutr   r   r   r   r   r   r   r   r   Zcrispy_forms.utilsr   Zconftestr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   utilsr)   r*   r+   r:   rN   rT   rU   rW   r]   rm   rq   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r8   r8   r8   r9   <module>   sx   ,8;&#
8

	
4
:

#



