o
    1i                     @   s   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 d dlmZ d d	lmZ d d
lmZ dddZG dd deZG dd deZdS )    )mock)parse)modelform_factory)TestCaseoverride_settings)
safestring)escape)	countriesfieldswidgets)settings)Person)CountrySelectWidgetNc                 K   s(   | d u rdt i} ttfdg| d|S )Ncountry)r
   r   )r   r   r   )r   kwargs r   d/var/www/html/humari/django-venv/lib/python3.10/site-packages/django_countries/tests/test_widgets.pyperson_form   s   r   c                   @   sT   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S )TestCountrySelectWidgetc                 C      t ` d S Nr	   selfr   r   r   setUp      zTestCountrySelectWidget.setUpc                 C   r   r   r   r   r   r   r   tearDown   r   z TestCountrySelectWidget.tearDownc                 C   s.   t i d}| jd j}| t|tj d S )N)r   r   )r   r
   widgetassertFalse
isinstancer   r   )r   
PersonFormr   r   r   r   test_not_default_widget   s   
z/TestCountrySelectWidget.test_not_default_widgetc                 C   sb   | j ddid t }|  }| ttt jt j| W d    d S 1 s*w   Y  d S )NAUDesertCOUNTRIES_ONLY)	r   r   as_passertInr   urlparseurljoin
STATIC_URLCOUNTRIES_FLAG_URLr   r    htmlr   r   r   test_render_contains_flag_url!   s   
"z5TestCountrySelectWidget.test_render_contains_flag_urlc                 C   s~   | j ddid- t }|  }| jd|dd | tdj| | tdj| W d    d S 1 s8w   Y  d S )Nr"   r#   r$   z"<option value="AU">Desert</option>   )count__)	r   r   r&   assertInHTMLr'   r
   CountryflagassertNotInr,   r   r   r   test_render,   s   
"z#TestCountrySelectWidget.test_renderc                 C   sv   | j ddid) t }|ddid }| tdj| | tdj| W d    d S 1 s4w   Y  d S )Nr"   r#   r$   r   )initialr1   )r   r   r&   r'   r
   r3   r4   r5   r,   r   r   r   test_render_initial4   s   "z+TestCountrySelectWidget.test_render_initialc                 C   s>   t  dd}| d| | d| | t|tj d S )Ntestz<script>z&lt;script&gt;)	r   r   renderr'   r5   
assertTruer   r   SafeData)r   outputr   r   r   test_render_escaping;   s   z,TestCountrySelectWidget.test_render_escapingc                 C   s"   t dd}t }||d  d S )NNZ)r   )instance)r   r   r&   )r   personr    r   r   r   test_render_modelform_instanceA   s   
z6TestCountrySelectWidget.test_render_modelform_instancec                 C   s:   t  }| d  }|d |dd  }| d| d S )Nr   >r/   required)r   	as_widgetfindr'   )r   r    renderedr   r   r   test_required_attributeF   s   z/TestCountrySelectWidget.test_required_attributeN)__name__
__module____qualname__r   r   r!   r.   r6   r8   r>   rB   rH   r   r   r   r   r      s    r   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zed	d
gddd Zed	gd	d
gdddd Z	ed	d
gddd Z
dS )TestDefaultSelectWidgetc                 C   r   r   r   r   r   r   r   r   N   r   zTestDefaultSelectWidget.setUpc                 C   r   r   r   r   r   r   r   r   Q   r   z TestDefaultSelectWidget.tearDownc                 C   s   t tdgd| _dS )z
        Setup form for use in tests.

        Note that this isn't in setUp so that we can call it inside of a
        settings override scope.
        r   )r
   N)r   r   Formr   r   r   r   
setup_formT   s   z"TestDefaultSelectWidget.setup_formc                 C   s8   |    |  jd j}| |tj | |tj d S )Nr   )	rN   rM   r
   r   assertNotIsInstancer   r   assertIsInstance
LazySelect)r   r   r   r   r   test_is_default_widget]   s   z.TestDefaultSelectWidget.test_is_default_widgetr?   r"   r$   c                 C   sJ   |    |  d  }|d |dd  }| d| | d| d S )Nr   rC   r/   rD   a  
            <select name="country" id="id_country" required>
              <option value="" selected>---------</option>
              <option value="AU">Australia</option>
              <option value="NZ">New Zealand</option>
            </select>
            rN   rM   rE   rF   r'   assertHTMLEqual)r   rG   rendered_first_tagr   r   r   rH   d   s   z/TestDefaultSelectWidget.test_required_attributez-----)COUNTRIES_FIRSTr%   COUNTRIES_FIRST_BREAKc                 C   sN   |    |  d }| }|d |dd  }| d| | d| d S )Nr   rC   r/   rD   a  
            <select name="country" id="id_country" required>
                <option value="NZ">New Zealand</option>
                <option value="" selected>-----</option>
                <option value="AU">Australia</option>
            </select>
            rS   )r   fieldrG   rU   r   r   r   2test_required_attribute_with_countries_first_breakv   s   zJTestDefaultSelectWidget.test_required_attribute_with_countries_first_breakc                 C   s   |    |  }|jd j}| |tj | |j | 	|
|jd  tjjt|dtjdd | |
|jd  W d   dS 1 sJw   Y  dS )z
        Test that LazySelect.use_required_attribute returns False for hidden widgets.
        This is defensive code since LazySelect is never actually hidden in practice.
        r   	is_hiddenT)new_callablereturn_valueN)rN   rM   r
   r   rP   r   rQ   r   rZ   r;   use_required_attributer   patchobjecttypePropertyMock)r   formr   r   r   r   3test_lazy_select_use_required_attribute_when_hidden   s   "zKTestDefaultSelectWidget.test_lazy_select_use_required_attribute_when_hiddenN)rI   rJ   rK   r   r   rN   rR   r   rH   rY   rc   r   r   r   r   rL   M   s    	

rL   r   )unittestr   urllibr   r(   django.forms.modelsr   django.testr   r   django.utilsr   django.utils.htmlr   django_countriesr	   r
   r   django_countries.confr   django_countries.tests.modelsr   django_countries.widgetsr   r   r   rL   r   r   r   r   <module>   s    
8