o
    1i'                     @   s<   d Z ddlmZ ddlmZ ddlmZ G dd deZdS )zATests for displaying CountryField(multiple=True) in Django admin.    )display_for_field)TestCase)modelsc                   @   sP   e Zd 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S )TestMultipleCountryAdminDisplayz=Test that multiple country fields display correctly in admin.c                 C   sT   t jjjdd}t jjd}t|j|d}| |t	 | 
|d | d| dS )z
        Test that multiple country fields work in list_display.

        Regression test for #311: TypeError "unhashable type: 'list'"
        when using CountryField(multiple=True) in list_display.
        zUS,CA,MX	countriesr    -United StatesN)r   MultiCountryobjectscreate_meta	get_fieldr   r   assertIsInstancestrassertNotEqualassertInselfmultifieldresult r   j/var/www/html/humari/django-venv/lib/python3.10/site-packages/django_countries/tests/test_admin_display.py(test_display_for_field_with_list_display   s   zHTestMultipleCountryAdminDisplay.test_display_for_field_with_list_displayc                 C   s`   t jjjdd}t jjd}t|j|d}| |d | 	|t
 | d| | d| dS )z
        Test that multiple country fields display correctly when readonly.

        Regression test for #463: CountryField shows up as "-" in admin
        when readonly with multiple=True.
        US,CAr   r   r	   r
   CanadaN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   test_display_for_field_readonly    s   z?TestMultipleCountryAdminDisplay.test_display_for_field_readonlyc                 C   s@   t jjjdd}t jjd}t|j|d}| |ddg dS )z9Test that empty multiple country fields display properly.r   r   r   r	   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   &test_display_for_field_empty_countries5   s   zFTestMultipleCountryAdminDisplay.test_display_for_field_empty_countriesc                 C   sh   t jjjdd}t jjd}||}| t|d t	|}| 
d| | 
d| | |t	 dS )z
        Test that value_from_object returns a MultipleCountriesDescriptor.

        This is what Django admin uses when accessing field values.
        The descriptor should be list-like but provide proper string display.
        NZ,AUr   r      zNew Zealand	AustraliaN)r   r   r   r   r   r   value_from_objectassertEquallenr   r   r   )r   r   r   value	str_valuer   r   r   5test_value_from_object_returns_displayable_descriptorA   s   
zUTestMultipleCountryAdminDisplay.test_value_from_object_returns_displayable_descriptorc                 C   s   t jjjdd}dd |jD }| |g d |jd }| |jd | t|jd | t	|j t
|j}| d	| d
S )z7Test that MultipleCountriesDescriptor acts like a list.zNZ,AU,CAr   c                 S   s   g | ]}|j qS r   )code).0countryr   r   r   
<listcomp>^   s    zdTestMultipleCountryAdminDisplay.test_multiple_countries_descriptor_list_behavior.<locals>.<listcomp>)AUCANZr   r-      CountryN)r   r   r   r   r   r$   r)   r%   
assertTrueboolreprr   )r   r   country_codesfirst_countryrepr_strr   r   r   0test_multiple_countries_descriptor_list_behaviorY   s   

zPTestMultipleCountryAdminDisplay.test_multiple_countries_descriptor_list_behaviorc                 C   sH   t jjjdd}| t|jd | t|j | t	|jd dS )z1Test MultipleCountriesDescriptor with empty list.r   r   r   N)
r   r   r   r   r$   r   r   assertFalser3   r%   )r   r   r   r   r   1test_multiple_countries_descriptor_empty_behavioro   s   zQTestMultipleCountryAdminDisplay.test_multiple_countries_descriptor_empty_behaviorc                 C   sT   t jjjdd}t jjjdd}t jjjdd}| |j|j | |j|j dS )z6Test MultipleCountriesDescriptor equality comparisons.r    r   r   N)r   r   r   r   r$   r   r   )r   multi1multi2multi3r   r   r   +test_multiple_countries_descriptor_equality|   s
   zKTestMultipleCountryAdminDisplay.test_multiple_countries_descriptor_equalityc                 C   sV   ddl m} |jjddd}|jd}|j}| | t|j	|d}| 
|d d	S )
zFTest that single (non-multiple) fields still use flatchoices normally.r   )PersonTestUS)namer+   r+   r	   zUnited States of AmericaN)django_countries.tests.modelsr?   r   r   r   r   flatchoicesassertIsNotNoner   r+   r$   )r   r?   personr   rD   r   r   r   r   %test_single_country_field_flatchoices   s   
zETestMultipleCountryAdminDisplay.test_single_country_field_flatchoicesN)__name__
__module____qualname____doc__r   r   r   r(   r8   r:   r>   rG   r   r   r   r   r   	   s    r   N)rK   django.contrib.admin.utilsr   django.testr   django_countries.testsr   r   r   r   r   r   <module>   s
    