
^Q\`*                 @   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 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 Gd d   d e  Z  d S)    )contextmanagerN)expectedFailureSkipTest)settings)six)slugifyunescape_entities)expected_failure_if_grappelliexpected_failure_if_suitskip_if_not_grappelliBaseNestedAdminTestCase   )TestAdminWidgetsRootTestAdminWidgetsATestAdminWidgetsBTestAdminWidgetsC0TestAdminWidgetsC1)TestAdminWidgetsAInlineTestAdminWidgetsBInlineTestAdminWidgetsC0InlineTestAdminWidgetsC1Inlinec              c   s   d t  j k r$ d }  d } d } n d	 }  d } d
 } x t D] } t | |  |  q= Wz	 d
 VWd
 x t D] } t | |  |  qj WXd
 S)zGA context manager that configures the inline classes to be collapsible.Z	grappelliZinline_classescollapseclosedgrp-collapse
grp-closedopengrp-openZclassesN)r   zclosedr   r   )r   zopenr   r   )r   )r   ZINSTALLED_APPSadmin_classessetattr)Z
class_attrZ	class_valZ	reset_valadmin r    Y/var/www/dbchiro/venv/build/django-nested-admin/nested_admin/tests/admin_widgets/tests.pyenable_inline_collapsing   s    		r"   c                   s  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! d0 d1    Z& d2 d3   Z' d4 d5   Z( e d6 d7    Z) e! d8 d9    Z* e+ d: d;    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   s   d d t  |  } | d k rG | 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   sL  |  j  d |  } |  j  d |  } |  j r6 d } n d } | j   | j   |  j | j |   |  j r d } |  j | d d  } |  j |  Wd  QXn  t j d  |  j | j |   |  j rd	 } |  j | d d  } |  j |  Wd  QXn  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-highlighttimeoutr   g?z#ui-timepicker .ui-state-activevalue zDate was not setzTime was not set)
	get_fieldhas_grappelliclearclickfind_element_by_xpathZclickable_selectorr6   r7   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   s   |  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?   rB   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 rI t j d  n  |  j |  |  j |  } |  j    |  j	 d |  |  j
   Wd  QXt j d  | j d  } |  j j d |  } |  j t |  |  d  S)	NZfk1z	parent::*z.add-relatedr   r1   g?idz.return $("#%s").find("option:selected").html())r?   rC   Zfind_element_by_css_selectorr@   r6   r7   rB   r2   Zswitch_to_popup_windowr5   Z	save_formrE   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   n  t    |  j   |  j d d g  } |  j | j   d  |  j  r |  j	 j
 d |  j d g   } n |  j	 j
 d |  j    } |  j |  |  j | j   d	  |  j |  |  j | j   d
  Wd  QXd  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   rR   )r@   djangoVERSIONr   r"   
load_adminr?   ZassertFalseZis_displayedr8   r9   Zget_itemZ	get_grouprB   Z
assertTrue)r/   Z
name_fieldZcollapse_handlerr    r    r!   test_collapsible_inlines   s"    

			z)TestAdminWidgets.test_collapsible_inlinesc             C   s1   |  j    |  j d g  |  j d d g  d  S)Nr   )rU   r;   )r/   r    r    r!   test_initial_extra_prepopulated   s    
z0TestAdminWidgets.test_initial_extra_prepopulatedc             C   s1   |  j    |  j d g  |  j d d g  d  S)Nr   )rU   rL   )r/   r    r    r!   test_initial_extra_m2m   s    
z'TestAdminWidgets.test_initial_extra_m2mc             C   s   |  j    |  j d g  d  S)Nr   )rU   rQ   )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  n  |  j d d g  d  S)Ng333333?r   )rU   r@   r6   r7   rQ   )r/   r    r    r!   test_initial_extra_fk_two_deep   s    
	z/TestAdminWidgets.test_initial_extra_fk_two_deepc             C   s1   |  j    |  j d g  |  j d d g  d  S)Nr   )rU   rH   )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   )rU   
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   )rU   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   )rU   r\   rL   )r/   r    r    r!   test_add_m2m   s    

zTestAdminWidgets.test_add_m2mc             C   sg   |  j    |  j r# t j d  n  |  j   |  j rF t j d  n  t j d  |  j d g  d  S)Ng333333?g?r   )rU   r@   r6   r7   r\   rQ   )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   )rU   r\   rL   )r/   r    r    r!   test_add_initial_extra_m2m   s    

z+TestAdminWidgets.test_add_initial_extra_m2mc             C   s]   |  j    |  j r# t j d  n  |  j   |  j rF t j d  n  |  j d d g  d  S)Ng333333?r   r   )rU   r@   r6   r7   r\   rQ   )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   )rU   r\   rH   )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   )rU   r\   rH   )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   )rU   r\   rL   )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   )rU   r\   rQ   )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   )rU   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   )rU   r\   rH   )r/   r    r    r!   test_add_two_deep_datetime  s    

z+TestAdminWidgets.test_add_two_deep_datetimec             C   s]   |  j    |  j   |  j d g  |  j d d d g g  |  j d d d d g g  d  S)Nr   r   )rU   r\   rL   )r/   r    r    r!   test_add_three_deep_m2m  s
    

z(TestAdminWidgets.test_add_three_deep_m2mc             C   s]   |  j    |  j   |  j d g  |  j d d d g g  |  j d d d d g g  d  S)Nr   r   )rU   r\   rQ   )r/   r    r    r!   test_add_three_deep_fk  s
    

z'TestAdminWidgets.test_add_three_deep_fkc             C   s]   |  j    |  j   |  j d g  |  j d d d g g  |  j d d d d g g  d  S)Nr   r   )rU   r\   r;   )r/   r    r    r!    test_add_three_deep_prepopulated  s
    

z1TestAdminWidgets.test_add_three_deep_prepopulatedc             C   s]   |  j    |  j   |  j d g  |  j d d d g g  |  j d d d d g g  d  S)Nr   r   )rU   r\   rH   )r/   r    r    r!   test_add_three_deep_datetime"  s
    

z-TestAdminWidgets.test_add_three_deep_datetimec             C   sl   |  j    |  j   |  j d g  |  j j d  } |  j t |  d d  |  j t |  d d  d  S)Nr   zN//*[@id="id_testadminwidgetsa_set-1-testadminwidgetsb_set-0-fk2-autocomplete"]r   z$Zero autocomplete fields initializedz(Too many autocomplete fields initialized)rU   r\   r8   Zfind_elements_by_xpathrD   r-   r:   )r/   Zautocomplete_elementsr    r    r!   test_autocomplete_single_init*  s    

		z.TestAdminWidgets.test_autocomplete_single_init)-__name__
__module____qualname__Zfixturesr   Z
root_modelr   r   r   r   r&   classmethodr%   r2   r;   rH   rL   rQ   rV   rW   rX   rY   rZ   r[   r
   r]   r^   r_   r`   r   ra   rb   rc   r	   rd   re   rf   rg   rh   ri   rj   rk   rl   r   rm   r    r    )r(   r!   r#   0   sB   	
	r#   )!
contextlibr   r6   Zunittestr   r   rS   Zdjango.confr   Zdjango.utilsr   Zdjango.utils.textr   r   Znested_admin.tests.baser	   r
   r   r   modelsr   r   r   r   r   r   r   r   r   r   r   r"   r#   r    r    r    r!   <module>   s   "("