U
    dl                     @   s  d dl Z d dlZd dlmZ d dlmZ d dlZd dl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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#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z) e*dddZ+G dd deZ,G dd deZ-G dd deZ.dd Z/dd Z0G dd deZ1G d d! d!eZ2G d"d# d#eZ3G d$d% d%eZ4G d&d' d'eZ5dS )(    N)mock)
skipUnless)checks
validators)call_command)models)Select)modelform_factory)TestCaseoverride_settings)translation)	force_str)	countriesdatafields)settings)CountryField)custom_countriesforms)	AllowNullMultiCountryPersonWithProp)returnc                  C   s*   t jdd \} }| dkp(| dko(|dkS )Nr         )djangoVERSION)majorminor r    F/tmp/pip-unpacked-wheel-dnjn05s9/django_countries/tests/test_fields.pyhas_db_collation   s    r"   c                   @   s<  e Zd Zee d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d Zd d! Zed"gd#d$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'dHdI Z(dJS )KTestCountryFieldzDjango version < 3.2c                 C   s   t  }| t|d d S )NZdb_collation)r   r   
assertTruehasattrselfcountryr    r    r!   test_db_collation   s    z"TestCountryField.test_db_collationc                 C   sJ   t ddd}| |jd | |jd | |j d|_| |j d S )NChris BeavenNZnamer(   ZZZ )r   assertEqualr(   assertNotEqualr$   assertFalser'   Zpersonr    r    r!   
test_logic%   s    zTestCountryField.test_logicc                 C   s   |  tjtj d S N)assertIsInstancer   r(   r   ZCountryDescriptorr'   r    r    r!   test_get_property_from_class/   s    z-TestCountryField.test_get_property_from_classc                 C   s,   t jd}| | ddg ddif d S )Nr(   $django_countries.fields.CountryField
max_lengthr   )r   _meta	get_fieldr/   deconstructr'   fieldr    r    r!   test_deconstruct2   s
    z!TestCountryField.test_deconstructc                 C   s"   t ddd}| t|jd d S )Nr*   r+   r,   )r   r/   r   r(   r2   r    r    r!   	test_text9   s    zTestCountryField.test_textc                 C   s    t ddd}| |jjd d S )Nr*   r+   r,   New Zealand)r   r/   r(   r-   r2   r    r    r!   	test_name=   s    zTestCountryField.test_namec              	   C   s8   t ddd}| jdd | |jjd W 5 Q R X d S )Nr*   r+   r,   /static-assets/)
STATIC_URLz/static-assets/flags/nz.gifr   r   r/   r(   flagr2   r    r    r!   	test_flagA   s    zTestCountryField.test_flagc                 C   s"   t dddd}| |jjd d S )Nr*   r+   USr-   r(   other_countryz//flags.example.com/us.gif)r   r/   rJ   rF   r2   r    r    r!   test_custom_field_flag_urlF   s    z+TestCountryField.test_custom_field_flag_urlc                 C   s$   t dddd}| t|jd d S )NzQuentin CoumesFRES)r-   r(   str_attr_countryZSpain)r   r/   strrN   r2   r    r    r!   test_custom_field_str_attrJ   s    z+TestCountryField.test_custom_field_str_attrc                 C   s2   t dddd}| |jjd | |jjd d S )NMatthew SchinckelAUZDErI   u   🇦🇺u   🇩🇪)r   r/   r(   unicode_flagrJ   r2   r    r    r!   test_unicode_flagsN   s    z#TestCountryField.test_unicode_flagsc                 C   s   t dd}| |jjd d S )NrQ   r-   r.   )r   r/   r(   rS   r2   r    r    r!   test_unicode_flag_blankS   s    
z(TestCountryField.test_unicode_flag_blankc              	   C   sb   t ddd}| jddd | |jjd W 5 Q R X | jdd	 | |jjd
 W 5 Q R X d S )Nr*   r+   r,   zimg/flag-{code_upper}.pngrC   )COUNTRIES_FLAG_URLrD   z/static-assets/img/flag-NZ.pngz*https://flags.example.com/{code_upper}.PNG)rW   z https://flags.example.com/NZ.PNGrE   r2   r    r    r!   test_COUNTRIES_FLAG_URL_settingW   s     z0TestCountryField.test_COUNTRIES_FLAG_URL_settingc                 C   s    t ddd}| |jjd d S )Nr*   r+   r,   zflag-sprite flag-n flag-_zr   r/   r(   Zflag_cssr2   r    r    r!   test_flag_cssd   s    zTestCountryField.test_flag_cssc                 C   s   t dd}| |jjd d S )Nr*   rU   r.   rY   r2   r    r    r!   test_flag_css_blankh   s    
z$TestCountryField.test_flag_css_blankc                 C   sB   t jjdd}| |jjd t jj|jd}| |jjd d S )NThe OutsiderrU   r.   pk)r   objectscreater/   r(   codegetr^   r2   r    r    r!   
test_blankl   s    zTestCountryField.test_blankc                 C   s>   t jjd d}| |jj t jj|jd}| |jj d S )Nr(   r]   )r   r_   r`   assertIsNoner(   ra   rb   r^   r2   r    r    r!   	test_nulls   s    zTestCountryField.test_nulldjango_countries.E100)ZSILENCED_SYSTEM_CHECKSc              	   C   s   zG dd dtj}G dd	 d	tj}t }| d
d |D dgd  dd |D }| 	d||j
d jk | d||j
d jk W 5 ddl m} |d}|jd |jd X d S )Nr   )appsdjango_countries_testsZmultinullcountryZmultinullcountrynoblankc                   @   s   e Zd ZejddddZdS )zBTestCountryField.test_multi_null_country.<locals>.MultiNullCountryT)multiplenullblankN__name__
__module____qualname__r   r   r   r    r    r    r!   MultiNullCountry~   s   rq   c                   @   s   e Zd ZejdddZdS )zITestCountryField.test_multi_null_country.<locals>.MultiNullCountryNoBlankT)rj   rk   Nrm   r    r    r    r!   MultiNullCountryNoBlank   s   rr   c                 S   s   g | ]
}|j qS r    )id.0er    r    r!   
<listcomp>   s     z<TestCountryField.test_multi_null_country.<locals>.<listcomp>rg   r   c                 S   s   i | ]}|j |qS r    )objrt   r    r    r!   
<dictcomp>   s      z<TestCountryField.test_multi_null_country.<locals>.<dictcomp>z
blank=Truer   )Zdjango.appsrh   Zget_app_configr   popZModelr   Z
run_checksr/   r1   r:   r;   hintr$   )r'   rh   Ztest_configrq   rr   errorsZerrors_dictr    r    r!   test_multi_null_countryz   s,    

z(TestCountryField.test_multi_null_countryc                 C   s8   t jjddd t jdjdd}| |jjd d S )Nr   r+   r,   r(   rU   )r   r_   r`   deferrb   r/   r(   ra   r2   r    r    r!   test_deferred   s    zTestCountryField.test_deferredc                 C   s4   t jjddd t jd }| |jjd d S )Nr   r+   r,   r-   )r   r_   r`   onlyrb   r/   r(   ra   r2   r    r    r!   	test_only   s    zTestCountryField.test_onlyc                 C   s0   t jjd d t jd }| |jj d S )Nrd   r(   )r   r_   r`   r~   rb   re   r(   ra   r2   r    r    r!   test_nullable_deferred   s    z'TestCountryField.test_nullable_deferredc                 C   s@   t ddd}| t|jd t dd d}| t|jd d S )Nr*   r+   r,   r   r\   r   )r   r/   lenr(   r2   r    r    r!   test_len   s    zTestCountryField.test_lenc                 C   sj   t jjddd t jjddd t jjddd t jjdd}|djdd	d
}| t|ddg d S )Nr*   r+   r,   PavlovaKiller everythingrR   rd   r-   TZflat)r   r_   r`   filterZorder_byvalues_listr/   list)r'   lookupnamesr    r    r!   test_lookup_text   s    z!TestCountryField.test_lookup_textc                 C   sp   t jjddd t jjddd t jjddd tjddd}t jj|d	}|jd
dd}| t|dg d S )Nr*   r+   r,   r   r   rR   r.   ra   flag_urlrd   r-   Tr   )	r   r_   r`   r   Countryr   r   r/   r   )r'   Zozr   r   r    r    r!   test_lookup_country   s    z$TestCountryField.test_lookup_countryc                 C   s,   t jjdd t j }| |jjd d S )Nr\   rU   r.   )r   r_   r`   rb   r/   r(   ra   r2   r    r    r!   test_save_empty_country   s    
z(TestCountryField.test_save_empty_countryc                 C   s0   t tdgd}| jd }| t|jt d S Nr(   )r   )r	   r   r   r$   
isinstancewidgetr   )r'   FormZ
form_fieldr    r    r!   test_create_modelform   s    z&TestCountryField.test_create_modelformc                 C   s   t tdgd}|   d S r   )r	   r   Zas_p)r'   r   r    r    r!   test_render_form   s    z!TestCountryField.test_render_formc                 C   s.   t ddd}| |jjd | |jd d S )NrL   test)r(   public_field)r   r/   r(   ra   r   )r'   Z	with_propr    r    r!   test_model_with_prop   s    z%TestCountryField.test_model_with_propc                 C   sr   t jjddd t jjddd t jjddd t jjddd | tt jjddgd	jd
dddddg d S )NAr+   r,   BrR   CrL   D)Zcountry__inr-   Tr   )r   r_   r`   r/   r   r   r   r6   r    r    r!   test_in   s     zTestCountryField.test_inc                 C   sd   t jjddd}| tt jjdd|g | tt jjddg  | tt jjddg  d S )Nr   r+   r,   )Zcountry__exactnzrA   r   r_   r`   r/   r   r   r'   pr    r    r!   
test_exact   s    zTestCountryField.test_exactc                 C   s0   t jjddd}| tt jjdd|g d S )Nr   r+   r,   r   )Zcountry__iexactr   r   r    r    r!   test_iexact   s    zTestCountryField.test_iexactc                 C   s   t jjddd}| tt jjdd|g | tt jjddg  | tt jjdd|g | tt jjddg  d S )	Nr   r+   r,   rA   )Zcountry__nameznew zealand)Zcountry__inameznew zr   r   r    r    r!   test_by_country_name   s
    z%TestCountryField.test_by_country_namec                 C   s   t jjddd}t jjddd}| tt jjdd||g | tt jjddg  | tt jjdd||g | tt jjdd|g | tt jjd	dg  | tt jjd	d|g d S )
Nr   r+   r,   ZNCewZcountry__containsZEW)Zcountry__icontainsr   r   r'   r   ppr    r    r!   test_by_country_name_contains   s    z.TestCountryField.test_by_country_name_containsc                 C   s   t jjddd}t jjddd}| tt jjdd||h | tt jjdd|g | tt jjddg  | tt jjdd	|g | tt jjdd|g | tt jjd
dg  | tt jjd
d	|g d S )Nr   ZZAr,   ZTFZSouthr   )Zcountry__startswithZsouth)Zcountry__istartswithZzar   r_   r`   r/   setr   r   r   r    r    r!   test_by_country_name_startswith   s     z0TestCountryField.test_by_country_name_startswithc                 C   s   t jjddd}t jjddd}| tt jjdd||h | tt jjdd|g | tt jjddg  | tt jjdd	|g | tt jjdd|g | tt jjd
dg  | tt jjd
d	|g d S )Nr   ZASr,   rH   ZAmericar   )Zcountry__endswithZamerica)Zcountry__iendswithusr   r   r    r    r!   test_by_country_name_endswith  s      z.TestCountryField.test_by_country_name_endswithc                 C   s   t jjddd}t jjddd}| tt jjdd||h | tt jjdd|g | tt jjd	dg  | tt jjd	d
|g | tt jjdd|g | tt jjddg  | tt jjdd
|g d S )Nr   ZMKr,   ZMPZNorthr   zNorth\b)Zcountry__regexznorth\b)Zcountry__iregexmpr   r   r    r    r!   test_by_country_name_regex  s    z+TestCountryField.test_by_country_name_regexN))rn   ro   rp   r   r"   r)   r3   r7   r?   r@   rB   rG   rK   rP   rT   rV   rX   rZ   r[   rc   rf   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   r#      sJ   




	
r#   c                   @   sd   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S )TestValidationc                 C   s   t ddd}|  d S )NChrisr+   r,   r   
full_cleanr2   r    r    r!   test_validate,  s    zTestValidation.test_validatec                 C   s   t ddd}|  d S )Nr   NZLr,   r   r2   r    r    r!   test_validate_alpha30  s    z#TestValidation.test_validate_alpha3c                 C   s   t dd}| tj|j d S )Nr   rU   r   assertRaisesr   ValidationErrorr   r2   r    r    r!   test_validate_empty4  s    
z"TestValidation.test_validate_emptyc                 C   s    t ddd}| tj|j d S )Nr   :(r,   r   r2   r    r    r!   test_validate_invalid8  s    z$TestValidation.test_validate_invalidc                 C   s   t ddgd}|  d S )Nr+   rR   r   r   r   r2   r    r    r!   test_validate_multiple<  s    z%TestValidation.test_validate_multiplec                 C   s   t  }| tj|j d S r4   r   r   r   r   r   r2   r    r    r!   test_validate_multiple_empty@  s    z+TestValidation.test_validate_multiple_emptyc                 C   s"   t ddgd}| tj|j d S )Nr   rR   r   r   r2   r    r    r!   test_validate_multiple_invalidD  s    z-TestValidation.test_validate_multiple_invalidc                 C   s   t ddd}|  d S )Nr+   Zxx)r   Zuneditable_countriesr   r2   r    r    r!   !test_validate_multiple_uneditableH  s    z0TestValidation.test_validate_multiple_uneditablec                 C   s&   t ddd}|d}| |d d S )NTrj   rl   r.   r   Zget_prep_valuer/   r'   Zcountry_field_instanceZ
prep_valuer    r    r!    test_get_prep_value_empty_stringL  s    
z/TestValidation.test_get_prep_value_empty_stringc                 C   s&   t ddd}|d}| |d dS )z
        Note: django migrations will call get_prep_value() with None
        see: https://github.com/SmileyChris/django-countries/issues/215
        Tr   Nr.   r   r   r    r    r!   test_get_prep_value_noneQ  s    
z'TestValidation.test_get_prep_value_nonec                 C   s&   t ddd}|d}| |d d S )NTr   r   0r   r   r    r    r!    test_get_prep_value_invalid_typeZ  s    
z/TestValidation.test_get_prep_value_invalid_typeN)rn   ro   rp   r   r   r   r   r   r   r   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S )TestCountryCustomc                 C   s    t ddd}| |jjd d S )Nr*   NVr-   fantasy_country	Neverland)r   r/   r   r-   r2   r    r    r!   rB   a  s    zTestCountryCustom.test_namec                 C   s"   |  ttjdjddg d S )Nr   )r   r   )r+   rA   )r/   r   r   r:   r;   choicesr6   r    r    r!   
test_fielde  s    zTestCountryCustom.test_fieldc              
   C   s2   t jd}| | ddg tjdddf d S )Nr   r8   Tr   )r   rl   r9   )r   r:   r;   r/   r<   r   FantasyCountriesr=   r    r    r!   r?   k  s    z"TestCountryCustom.test_deconstructN)rn   ro   rp   rB   r   r?   r    r    r    r!   r   `  s   r   c                  C   s0   t tjd} |  d dg tjddfks,td S )Nr   r8      )r   r9   )r   r   GBRegionCountriesr<   AssertionError)r>   r    r    r!   'test_longer_country_code_deconstruction|  s    
r   c                  C   sX   t tjdd} t| jd tdd | jjD  }|  d dg tj|ddfksTtd S )NT)r   rj      c                 s   s   | ]}t |V  qd S r4   )r   )ru   ra   r    r    r!   	<genexpr>  s     zCtest_longer_country_code_multiple_deconstruction.<locals>.<genexpr>r8   )r   r9   rj   )r   r   r   r   r   sumr<   r   )r>   expected_max_lengthr    r    r!   0test_longer_country_code_multiple_deconstruction  s    r   c                   @   sl   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S )TestCountryMultiplec                 C   s   t  }| |jg  d S r4   )r   r/   r   r'   rx   r    r    r!   
test_empty  s    zTestCountryMultiple.test_emptyc                 C   s   t j  d S r4   )r   r_   r`   r6   r    r    r!   test_empty_save  s    z#TestCountryMultiple.test_empty_savec                 C   sJ   t dd}| t|jd | t|jd tj | |jd d d S )Nr+   r   r   r   r   r/   r   r   r$   r   r   r   r   r    r    r!   test_single  s    
zTestCountryMultiple.test_singlec                 C   sb   t dd}| t|jd |jD ]}| t|tj q"| |jd d | |jd d d S )NzAU,NZr   r   r   rR   r   r+   r   )r'   rx   r(   r    r    r!   test_multiple  s    

z!TestCountryMultiple.test_multiplec                 C   s   d}t ||||d}|jD ]}| t|tj q| |jddg | |jddg | |jdddg | |j	dddg t dd}| |jg  d S )NzNZ,AU,NZ)r   unsorted_countriesduplicate_countriesunsorted_duplicate_countriesrR   r+   r.   r   )
r   r   r$   r   r   r   r/   r   r   r   )r'   codesrx   r(   r    r    r!   test_multiple_with_duplicates  s    

z1TestCountryMultiple.test_multiple_with_duplicatesc                 C   s"   t  }d|_| |jddg d S )NzNZ,AUrR   r+   r   r   r/   r   r    r    r!   test_set_text  s    z!TestCountryMultiple.test_set_textc                 C   s&   t  }ddg|_| |jddg d S Nr+   rR   r   r   r    r    r!   test_set_list  s    
z!TestCountryMultiple.test_set_listc                 C   s&   t  }td|_| |jdg d S )Nr+   r   r   r   r   r/   r   r    r    r!   test_set_country  s    z$TestCountryMultiple.test_set_countryc                 C   s2   t  }tdtdg|_| |jddg d S r   r   r   r    r    r!   test_set_countries  s    z&TestCountryMultiple.test_set_countriesc                 C   s<   t dd tD }tjj|d tj }| |j| d S )Nc                 s   s   | ]}|d  V  qdS )r   Nr    )ru   cr    r    r!   r     s     z9TestCountryMultiple.test_all_countries.<locals>.<genexpr>r   )sortedr   r   r_   r`   rb   r/   )r'   Z	all_codesrx   r    r    r!   test_all_countries  s    
z&TestCountryMultiple.test_all_countriesc              	   C   s@   t jd}ttjd d }| | ddg |ddf d S )Nr   r   r   r8   T)r9   rj   )r   r:   r;   r   r   Z	COUNTRIESr/   r<   )r'   r>   r   r    r    r!   r?     s    z$TestCountryMultiple.test_deconstructc                 C   s6   t jjddgd}t jjdd}| t||g d S )Nr+   rR   r   )Zcountries__contains)r   r_   r`   r   r/   r   )r'   rx   qsr    r    r!   test_contains  s    z!TestCountryMultiple.test_containsN)rn   ro   rp   r   r   r   r   r   r   r   r   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d Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),TestCountryObjectc                 C   s&   t jddd}| t|td d S NXXr.   r   )r   r   r/   hashr&   r    r    r!   	test_hash  s    zTestCountryObject.test_hashc                 C   s   t jdd}t jddd}t jddd}| t|ddd | t|ddd	dd | t|ddd
dd d S )Nr   ra   r.   r   r-   ra   Zstr_attrzCountry(code=)z, flag_url=z, str_attr=)r   r   r/   repr)r'   Zcountry1Zcountry2Zcountry3r    r    r!   	test_repr  s    zTestCountryObject.test_reprc                 C   s    t jdd}| t|d d S )Nr+   r   r   r   r/   rO   r&   r    r    r!   test_str  s    zTestCountryObject.test_strc                 C   s"   t jddd}| t|d d S )Nr+   r-   r   rA   r  r&   r    r    r!   test_str_attr  s    zTestCountryObject.test_str_attrc                 C   s    t jddd}| |jd d S )Nr.   r   r   r   r/   rF   r&   r    r    r!   test_flag_on_empty_code
  s    z)TestCountryObject.test_flag_on_empty_codec                 C   s    t jddd}| |jd d S )NNLr.   r   NED)r   r   r/   Zioc_coder&   r    r    r!   test_ioc_code  s    zTestCountryObject.test_ioc_codec                 C   s&   t jd}| |t jddd d S )Nr  r  r.   )r   )r   r   country_from_iocr/   r&   r    r    r!   test_country_from_ioc_code  s    z,TestCountryObject.test_country_from_ioc_codec                 C   s   t jd}| | d S )Nr.   r   r   r
  re   r&   r    r    r!    test_country_from_blank_ioc_code  s    z2TestCountryObject.test_country_from_blank_ioc_codec                 C   s   t jd}| | d S )NZXXXr  r&   r    r    r!   'test_country_from_nonexistence_ioc_code  s    z9TestCountryObject.test_country_from_nonexistence_ioc_codec                 C   s   t jdd}| |jd d S )NBNr   ZBRNr   r   r/   Zalpha3r&   r    r    r!   test_alpha3  s    zTestCountryObject.test_alpha3c                 C   s   t jdd}| |jd d S )Nr   r   r.   r  r&   r    r    r!   test_alpha3_invalid"  s    z%TestCountryObject.test_alpha3_invalidc                 C   s   t jdd}| |jd d S )Nr  r   `   r   r   r/   numericr&   r    r    r!   test_numeric&  s    zTestCountryObject.test_numericc                 C   sR   t jdd}| |jd t jdd}| |jd t jdd}| |jd d S )NALr   Z008r  Z096r+   Z554r   r   r/   Znumeric_paddedr&   r    r    r!   test_numeric_padded*  s    z%TestCountryObject.test_numeric_paddedc                 C   s   t jdd}| |jd  d S Nr   r   r  r&   r    r    r!   test_numeric_invalid2  s    z&TestCountryObject.test_numeric_invalidc                 C   s   t jdd}| |jd  d S r  r  r&   r    r    r!   test_numeric_padded_invalid6  s    z-TestCountryObject.test_numeric_padded_invalidc                 C   s    t jddd}| |jd d S r   r  r&   r    r    r!   test_empty_flag_url:  s    z%TestCountryObject.test_empty_flag_urlc                 C   s   t jdd}| |jd d S )Nr   r   r+   r   r   r/   ra   r&   r    r    r!   test_alpha2_code>  s    z"TestCountryObject.test_alpha2_codec                 C   s   t jdd}| |jd d S )NZNZXr   r  r&   r    r    r!   test_alpha2_code_invalidB  s    z*TestCountryObject.test_alpha2_code_invalidc                 C   s   t jdd}| |jd d S )Ni*  r   r+   r  r&   r    r    r!   test_numeric_codeF  s    z#TestCountryObject.test_numeric_codec                 C   s   t jdd}| |jd d S )Ni  r   r  r&   r    r    r!   test_numeric_code_invalidJ  s    z+TestCountryObject.test_numeric_code_invalidc              	   C   sB   t jtdddd i  tjdd}| |jd W 5 Q R X d S )NZ
EXTENSIONScodex2c                 S   s
   | j d S )Nr   r   )r   r    r    r!   <lambda>O      z3TestCountryObject.test_extensions.<locals>.<lambda>r+   r   ZNZNZ)r   patchobjectr   r   r/   r#  r&   r    r    r!   test_extensionsN  s    z!TestCountryObject.test_extensionsN)rn   ro   rp   r   r  r  r  r  r	  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r(  r    r    r    r!   r     s*   r   c                   @   sH   e Zd Zejjej dddd Zdd Z	dd Z
d	d
 Zdd ZdS )TestModelFormzNo i18n)reasonc              	   C   s   t  }t d t }zV| ttd d d | |jd j	d d d | |jd j
j	d d d W 5 t | X d S )Neor   r   ZAfganior(   )r   Zget_languageactivater   
PersonFormr/   r   r   r   r   r   )r'   langformr    r    r!   test_translated_choicesU  s    
"z%TestModelForm.test_translated_choicesc                 C   s   d}t  }| |jd jd | t|d ddd }| |d t  }| |jd jd | t|d ddd }d}| || d S )	N)r.   z	---------r(   r   >r   z/<select name="country" required id="id_country"r   z<<select name="countries" required id="id_countries" multiple)	r   r-  r/   r   r   rO   splitMultiCountryFormr0   )r'   rl   r/  htmlZ
multi_formexpectedr    r    r!   test_blank_choiced  s    zTestModelForm.test_blank_choicec                 C   s$   t  }| |jd jd d d S )NZfavourite_countryr   )ZAFZAfghanistan)r   r-  r/   r   r   r'   r/  r    r    r!   test_no_blank_choicer  s
     z"TestModelForm.test_no_blank_choicec                 C   sH   t  }| |jd jd d t|d ddd }| |d d S )Nr(   r   )r.   z(select country)r1  r   z&<select name="country" id="id_country")r   ZAllowNullFormr/   r   r   rO   r2  )r'   r/  r4  r    r    r!   test_blank_choice_labelx  s    z%TestModelForm.test_blank_choice_labelc                 C   s&   t jdddgid}| |ji  d S )Nr   r+   rR   )r   )r   r3  r/   r|   r7  r    r    r!   test_validation~  s    zTestModelForm.test_validationN)rn   ro   rp   pytestmarkZskipifr   ZUSE_I18Nr0  r6  r8  r9  r:  r    r    r    r!   r)  T  s   
r)  c                   @   s   e Zd Zdd Zdd ZdS )TestPicklingc                 C   s~   t ddd}tj|jdd}| t|d t|}| |jd | |j	d | |j
d  | |jt | |j d S )Nr*   r+   r,   r   protocol   rA   )r   pickledumpsr(   
assertLessr   loadsr/   ra   r-   r   ZassertIsr   re   r   )r'   chrisZnewly_pickled_zealandZ	unpickledr    r    r!   test_standard_country_pickling  s    
z+TestPickling.test_standard_country_picklingc                 C   st   t ddd}tj|jdd}| t|d t|}| |jd | |j	d | |j
d  | |jtj d S )Nr*   r   r   r   r>  i,  r   )r   rA  rB  r   rC  r   rD  r/   ra   r-   r   r5   r   r   r   )r'   rE  Zpickled_neverlandZ	neverlandr    r    r!   test_custom_country_pickling  s    
z)TestPickling.test_custom_country_picklingN)rn   ro   rp   rF  rG  r    r    r    r!   r=    s   r=  c                   @   s   e Zd Zdd ZdS )TestLoadDatac              	   C   s   t jjddd}tjjddgd}tjdddF}td	d
|d |  |  |  |	d td|j
dd W 5 Q R X | t j jd tj j}dd |D }| |ddg d S )Nr*   r+   r,   rR   r   z.jsonzw+)suffixmodeZdumpdatari   )stdoutr   Zloaddataz-vr   c                 S   s   g | ]
}|j qS r    r   )ru   r(   r    r    r!   rw     s     z+TestLoadData.test_basic.<locals>.<listcomp>)r   r_   r`   r   tempfileNamedTemporaryFiler   deleteflushseekr-   r/   rb   r(   r   )r'   ZsingleZmulticapturer   r    r    r!   
test_basic  s    
zTestLoadData.test_basicN)rn   ro   rp   rR  r    r    r    r!   rH    s   rH  )6rA  rL  Zunittestr   Zunittest.caser   r   r;  Zdjango.corer   r   Zdjango.core.managementr   Z	django.dbr   Zdjango.formsr   Zdjango.forms.modelsr	   Zdjango.testr
   r   Zdjango.utilsr   Zdjango.utils.encodingr   Zdjango_countriesr   r   r   Zdjango_countries.confr   Zdjango_countries.fieldsr   Zdjango_countries.testsr   r   Zdjango_countries.tests.modelsr   r   r   r   boolr"   r#   r   r   r   r   r   r   r)  r=  rH  r    r    r    r!   <module>   s>     5
Ue/#