3
(h(                 @   s   d dl mZ d dlZd dl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mZmZ dd	lmZmZmZmZmZ dd
lmZmZmZmZ eeeegZedd ZG dd deZdS )    )contextmanagerN)expectedFailureSkipTest)settings)six)slugifyunescape_entities)expected_failure_if_grappelliexpected_failure_if_suitBaseNestedAdminTestCase   )TestAdminWidgetsRootTestAdminWidgetsATestAdminWidgetsBTestAdminWidgetsC0TestAdminWidgetsC1)TestAdminWidgetsAInlineTestAdminWidgetsBInlineTestAdminWidgetsC0InlineTestAdminWidgetsC1Inlinec              c   sj   dt jkrd} d}d}nd	} d}d
}xtD ]}t|| | q*W z
d
V  W d
xtD ]}t|| | qPW X d
S )zGA context manager that configures the inline classes to be collapsible.Z	grappelliZinline_classescollapseclosedgrp-collapse
grp-closedopengrp-openclassesN)r   r   r   r   )r   r   r   r   )r   )r   ZINSTALLED_APPSadmin_classessetattr)Z
class_attrZ	class_valZ	reset_valadmin r    W/tmp/pip-install-q3hcpn_q/django-nested-admin/nested_admin/tests/admin_widgets/tests.pyenable_inline_collapsing   s    



r"   c                   s4  e Zd ZdgZeZeeee	ffZ
e f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d Zedd Zdd Zed d! Zed"d# Zd$d% Zd&d' Z e!d(d) Z"d*d+ Z#d,d- Z$ed.d/ Z%e!d0d1 Z&d2d3 Z'd4d5 Z(ed6d7 Z)e!d8d9 Z*  Z+S ):TestAdminWidgetszadmin-widgets.xmlc                s*   t t| j  | j\| _| _\| _| _d S )N)superr#   
setUpClassnested_modelsZa_modelZb_modelZc0_modelZc1_model)cls)	__class__r    r!   r%   8   s    zTestAdminWidgets.setUpClassc             C   sp   ddt |  }|dkr:|d|d d |d d f 7 }n|d|d  7 }|dd	jd
d | j|D  7 }|S )NzItem %sz ABCzItem Cz%d%dr   r   z%dz (%s)z > c             S   s   g | ]}d |d  qS )z%sr   r    ).0ir    r    r!   
<listcomp>D   s    z9TestAdminWidgets.get_name_for_indexes.<locals>.<listcomp>r,   r,   )lenjoinZ_normalize_indexes)selfindexesnamer    r    r!   get_name_for_indexes=   s    ""z%TestAdminWidgets.get_name_for_indexesc             C   s^   | j |}ttj|}| jd|}| jd|| tjd | jj	d| }| j
||d d S )NZslugr1   g?zreturn $("%s").val()z$prepopulated slug field did not sync)r2   r   r   	text_typeget_form_field_selector	set_fieldtimesleepseleniumexecute_scriptassertEqual)r/   r0   r1   Zexpected_slugZslug_selZslug_valr    r    r!   check_prepopulatedG   s    


z#TestAdminWidgets.check_prepopulatedc             C   s   | j d|}| j d|}| jr$d}nd}|j  |j  |j|j  | jrrd}| j|dd}|j  W d Q R X tjd |j|j  | jrd	}| j|dd}|j  W d Q R X tjd | j|j	d
dd | j|j	d
dd d S )NZdate_0Zdate_1zfollowing-sibling::*[1]zfollowing-sibling::*[1]/a[1]z&#ui-datepicker-div .ui-state-highlightr   )timeoutg?z#ui-timepicker .ui-state-activevalue zDate was not setzTime was not set)
	get_fieldhas_grappelliclearfind_element_by_xpathclickZclickable_selectorr6   r7   ZassertNotEqualget_attribute)r/   r0   Zdate_elZtime_elZnow_link_xpathselectorelr    r    r!   check_datetimeS   s*    

zTestAdminWidgets.check_datetimec             C   sd   | j d|}| j d|}|j  |j  | jd|}tjd | jjd| }| j|dddg d S )	NZm2m_add_all_linkZm2m_remove_all_linkZm2m_tog?z\return $("%s").find("option").toArray().map(function(el) { return parseInt(el.value, 10); })r         )r?   rC   r4   r6   r7   r8   r9   r:   )r/   r0   Zadd_all_linkZremove_all_linkZ
m2m_to_selselectedr    r    r!   	check_m2ml   s    
zTestAdminWidgets.check_m2mc          
   C   s   | j d|}|jd}|jd}| jr0tjd |j  | j|}| j  | j	d| | j
  W d Q R X tjd |jd}| jjd| }| jt|| d S )	NZfkz	parent::*z.add-relatedr   r1   g?idz.return $("#%s").find("option:selected").html())r?   rB   Zfind_element_by_css_selectorr@   r6   r7   rC   r2   Zswitch_to_popup_windowr5   Z	save_formrD   r8   r9   r:   r   )r/   r0   fieldparentadd_relatedr1   Zfield_idZcurrent_valr    r    r!   check_fkx   s    







zTestAdminWidgets.check_fkc             C   s   | j  rtjdk rtdt  | j  | jddg}| j|j d | j rf| j	j
d| jdg}n| j	j
d| j }|j  | j|j d	 |j  | j|j d
 W d Q R X d S )Nr   
   z!Collapsible inlines not supportedr1   r   zInline did not load collapsedz9return $(arguments[0]).find("> .djn-collapse-handler")[0]zDreturn $(arguments[0]).find("> fieldset > h2 > .collapse-toggle")[0]zInline did not expandzInline did not collapse)r   rQ   )r@   djangoVERSIONr   r"   
load_adminr?   ZassertFalseZis_displayedr8   r9   Zget_itemZ	get_grouprC   Z
assertTrue)r/   Z
name_fieldZcollapse_handlerr    r    r!   test_collapsible_inlines   s"    
z)TestAdminWidgets.test_collapsible_inlinesc             C   s&   | j   | jdg | jddg d S )Nr   )rT   r;   )r/   r    r    r!   test_initial_extra_prepopulated   s    z0TestAdminWidgets.test_initial_extra_prepopulatedc             C   s&   | j   | jdg | jddg d S )Nr   )rT   rK   )r/   r    r    r!   test_initial_extra_m2m   s    z'TestAdminWidgets.test_initial_extra_m2mc             C   s   | j   | jdg d S )Nr   )rT   rP   )r/   r    r    r!   test_initial_extra_fk_one_deep   s    z/TestAdminWidgets.test_initial_extra_fk_one_deepc             C   s*   | j   | jrtjd | jddg d S )Ng333333?r   )rT   r@   r6   r7   rP   )r/   r    r    r!   test_initial_extra_fk_two_deep   s    
z/TestAdminWidgets.test_initial_extra_fk_two_deepc             C   s&   | j   | jdg | jddg d S )Nr   )rT   rG   )r/   r    r    r!   test_initial_extra_datetime   s    z,TestAdminWidgets.test_initial_extra_datetimec             C   s    | j   | j  | jdg d S )Nr   )rT   
add_inliner;   )r/   r    r    r!   test_add_prepopulated   s    z&TestAdminWidgets.test_add_prepopulatedc             C   s"   | j   | j  | jddg d S )Nr   r   )rT   r[   r;   )r/   r    r    r!   #test_add_initial_extra_prepopulated   s    z4TestAdminWidgets.test_add_initial_extra_prepopulatedc             C   s    | j   | j  | jdg d S )Nr   )rT   r[   rK   )r/   r    r    r!   test_add_m2m   s    zTestAdminWidgets.test_add_m2mc             C   sJ   | j   | jrtjd | j  | jr0tjd tjd | jdg d S )Ng333333?g?r   )rT   r@   r6   r7   r[   rP   )r/   r    r    r!   test_add_fk   s    


zTestAdminWidgets.test_add_fkc             C   s"   | j   | j  | jddg d S )Nr   r   )rT   r[   rK   )r/   r    r    r!   test_add_initial_extra_m2m   s    z+TestAdminWidgets.test_add_initial_extra_m2mc             C   sB   | j   | jrtjd | j  | jr0tjd | jddg d S )Ng333333?r   r   )rT   r@   r6   r7   r[   rP   )r/   r    r    r!   test_add_initial_extra_fk   s    

z*TestAdminWidgets.test_add_initial_extra_fkc             C   s    | j   | j  | jdg d S )Nr   )rT   r[   rG   )r/   r    r    r!   test_add_datetime   s    z"TestAdminWidgets.test_add_datetimec             C   s"   | j   | j  | jddg d S )Nr   r   )rT   r[   rG   )r/   r    r    r!   test_add_initial_extra_datetime   s    z0TestAdminWidgets.test_add_initial_extra_datetimec             C   s.   | j   | j  | jdg | jddg d S )Nr   )rT   r[   rK   )r/   r    r    r!   test_add_two_deep_m2m   s    z&TestAdminWidgets.test_add_two_deep_m2mc             C   s.   | j   | j  | jdg | jddg d S )Nr   )rT   r[   rP   )r/   r    r    r!   test_add_two_deep_fk   s    z%TestAdminWidgets.test_add_two_deep_fkc             C   s.   | j   | j  | jdg | jddg d S )Nr   )rT   r[   r;   )r/   r    r    r!   test_add_two_deep_prepopulated   s    z/TestAdminWidgets.test_add_two_deep_prepopulatedc             C   s.   | j   | j  | jdg | jddg d S )Nr   )rT   r[   rG   )r/   r    r    r!   test_add_two_deep_datetime  s    z+TestAdminWidgets.test_add_two_deep_datetimec             C   sF   | j   | j  | jdg | jdddgg | jddddgg d S )Nr   r   )rT   r[   rK   )r/   r    r    r!   test_add_three_deep_m2m  s
    z(TestAdminWidgets.test_add_three_deep_m2mc             C   sF   | j   | j  | jdg | jdddgg | jddddgg d S )Nr   r   )rT   r[   rP   )r/   r    r    r!   test_add_three_deep_fk  s
    z'TestAdminWidgets.test_add_three_deep_fkc             C   sF   | j   | j  | jdg | jdddgg | jddddgg d S )Nr   r   )rT   r[   r;   )r/   r    r    r!    test_add_three_deep_prepopulated  s
    z1TestAdminWidgets.test_add_three_deep_prepopulatedc             C   sF   | j   | j  | jdg | jdddgg | jddddgg d S )Nr   r   )rT   r[   rG   )r/   r    r    r!   test_add_three_deep_datetime"  s
    z-TestAdminWidgets.test_add_three_deep_datetime),__name__
__module____qualname__Zfixturesr   Z
root_modelr   r   r   r   r&   classmethodr%   r2   r;   rG   rK   rP   rU   rV   rW   rX   rY   rZ   r
   r\   r]   r^   r_   r   r`   ra   rb   r	   rc   rd   re   rf   rg   rh   ri   rj   rk   __classcell__r    r    )r(   r!   r#   0   s@   

	r#   ) 
contextlibr   r6   Zunittestr   r   rR   Zdjango.confr   Zdjango.utilsr   Zdjango.utils.textr   r   Znested_admin.tests.baser	   r
   r   modelsr   r   r   r   r   r   r   r   r   r   r   r"   r#   r    r    r    r!   <module>   s   