a
    Dg1;                     @   s   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
mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ ed	d
dZG dd deeZdS )    )RequestFactoryTestCase)reverse)translation)hooks)AdminOnlyMenuItemDismissibleMenuItemDismissibleSubmenuMenuItemMenuMenuItemSubmenuMenuItem
admin_menu)sidebar)WagtailTestUtils)UserProfileclsc                    s    fdd}|S )Nc                      s    i S )N r   argsr   kwargsr   \/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/tests/test_menu.pyhook_fn   s    zmenu_item_hook.<locals>.hook_fnr   )r   r   r   r   r   r   r   menu_item_hook   s    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 )TestMenuRenderingc                 C   s<   t  d| _| jdd| j_t| jj| _|  | _d S )Nz/adminZadminusername)	r   getrequestZcreate_superuseruserr   Zget_for_userprofilelogin)selfr   r   r   setUp   s    zTestMenuRendering.setUpc                 C   sT   d| j jd< | j td}| |d d| j jd< | j td}| |d dS )z3Sidebar should render with collapsed class applied.0Zwagtail_sidebar_collapsedZwagtailadmin_homezsidebar-collapsed1N)clientcookiesr   r   ZassertNotContainsZassertContains)r"   responser   r   r   test_remember_collapsed"   s    z)TestMenuRendering.test_remember_collapsedc              	   C   s   t dd}tdtddfdtddfg || j}W d    n1 sN0    Y  | |t | |t	
dddt	
dddg d S )	Nregister_menu_itemregister_hook_namePages/pages/Images/images/pagesimages)r
   r   register_temporarilyr   render_componentr   assertIsInstancelistassertListEqualr   LinkMenuItem)r"   menurenderedr   r   r   test_simple_menu.   s    
*z"TestMenuRendering.test_simple_menuc                 C   s   t ddd}dd }tdtddfdtdd	fd|fg || j}W d    n1 s^0    Y  | |td
ddg d S )Nr*   Zconstruct_menu)r,   Zconstruct_hook_namec                 S   s   dd |D |d d < d S )Nc                 S   s   g | ]}|j d ks|qS )r2   name.0itemr   r   r   
<listcomp>K       zZTestMenuRendering.test_menu_with_construct_hook.<locals>.remove_images.<locals>.<listcomp>r   )r   itemsr   r   r   remove_imagesJ   s    zFTestMenuRendering.test_menu_with_construct_hook.<locals>.remove_imagesr-   r.   r/   r0   r1   )	r
   r   r3   r   r4   r   assertEqualr   r8   )r"   r9   rD   r:   r   r   r   test_menu_with_construct_hookD   s"    *z/TestMenuRendering.test_menu_with_construct_hookc                 C   s   t dd}t dd}tdtd|tdfdtddfg || j}W d    n1 s\0    Y  | |t | 	t
|d | |d	 tj | 	|d	 jd
 | 	|d	 jd | |d	 jtdddg d S )Nr*   r+   register_submenu_itemzMy lovely submenur   r-   r.      r   zmy-lovely-submenur1   )r
   r   r3   r   r   r4   r   r5   r6   rE   lenr   SubMenuItemr=   labelr7   
menu_itemsr8   r"   r9   Zsubmenur:   r   r   r   test_submenu]   s(    

	*zTestMenuRendering.test_submenuc                 C   s  t dd}t dd}tdtd|tddfdtddtd	dfg || j}W d    n1 sd0    Y  | |t	 | 
t|d
 | |d tj | 
|d jd | 
|d jd | 
|d jdddd | |d jtjd	ddddd	ddg d S Nr*   r+   rG   My dismissible submenudismissible-submenu-menu-itemr   r=   r-   r.   dismissible-menu-itemrH   r   w-dismissiblew-dismissible--dismissed)data-controller"data-w-dismissible-dismissed-classdata-w-dismissible-id-valueattrs)r
   r   r3   r   r	   r   r4   r   r5   r6   rE   rI   r   rJ   r=   rK   rZ   r7   rL   r8   rM   r   r   r   test_dismissible_initialx   s^    


*
z*TestMenuRendering.test_dismissible_initialc                 C   s0  ddd| j _| j   | jj  tdd}tdd}tdt	d|t
ddfdt	d	d
tddfg || j}W d    n1 s0    Y  | |t | t|d | |d tj | |d jd | |d jd | |d jddddd | |d jtjdd	d
ddddddg d S )NT)rQ   rS   r*   r+   rG   rP   rQ   rR   r-   r.   rS   rH   r   rT   rU   true)rV   rW   rX   z"data-w-dismissible-dismissed-valuerY   )r    Zdismissiblessaver   r   refresh_from_dbr
   r   r3   r   r	   r   r4   r5   r6   rE   rI   r   rJ   r=   rK   rZ   r7   rL   r8   rM   r   r   r   test_dismissible_dismissed   sl    




*
z,TestMenuRendering.test_dismissible_dismissedc                 C   s  | j   | jj  tdd}tdd}tdtd|t	ddfdtddt
d	dfg || j}W d    n1 sz0    Y  | |t | t|d
 | |d tj | |d jd | |d jd | |d jdddd | |d jtjd	ddddd	ddg d S rO   )r    deleter   r   r^   r
   r   r3   r   r	   r   r4   r5   r6   rE   rI   r   rJ   r=   rK   rZ   r7   rL   r8   rM   r   r   r   test_dismissible_no_userprofile   sb    



*z1TestMenuRendering.test_dismissible_no_userprofilec              	   C   s   t dd}tdtddfdtddtdfg8 || j}| jdd	| j_|| j}W d    n1 sn0    Y  | 	|t
d
ddt
dddg | 	|t
d
ddg d S )Nr*   r+   r-   r.   zSecret pagesz/pages/secret/r   z	non-adminr   r1   zsecret-pages)r
   r   r3   r   r   r4   r   Zcreate_userr   r7   r   r8   )r"   r9   r:   Zrendered_non_adminr   r   r   test_admin_only_menuitem5  s0    
*z*TestMenuRendering.test_admin_only_menuitemc                 C   sp   zt `W n ty   Y n0 td  dd t jD }W d    n1 sL0    Y  h d}| ||  d S )Nfrc                 S   s   h | ]
}|j qS r   r<   r>   r   r   r   	<setcomp>`  rB   z?TestMenuRendering.test_menu_items_have_names.<locals>.<setcomp>>   r2   settingsZsnippetsZreportsZexplorerZ	documentshelpZforms)r   registered_menu_itemsAttributeErrorr   overrideassertFalse)r"   namesexpectedr   r   r   test_menu_items_have_namesV  s    .z,TestMenuRendering.test_menu_items_have_namesc              
   C   s   t  }td` tjD ]H}t|ds(qz
|j`W n tyD   Y n0 |jjD ]}||j	 qNqW d    n1 sv0    Y  h d}| 
||  d S )Nrc   r9   >   collectionsztest-site-settingZ	redirectsZ	workflowsztest-generic-settingzaging-pageszimportant-pages-generic-settingZpublishablesgroupszpromoted-search-resultszworkflow-taskszicon-site-settingzeditor-guidezfile-generic-settingzicon-generic-settingzimportant-pages-site-settingzfile-site-settingzlocked-pageszrevisable-modelssiteszsite-historyZusersZlocalesZ
styleguidezrevisable-child-models)setr   ri   r   rg   hasattrr9   rh   addr=   rj   )r"   rk   r@   subitemrl   r   r   r   test_submenu_items_have_namest  s    


."z/TestMenuRendering.test_submenu_items_have_namesN)__name__
__module____qualname__r#   r)   r;   rF   rN   r[   r_   ra   rb   rm   ru   r   r   r   r   r      s   <D=!r   N)Zdjango.testr   r   Zdjango.urlsr   Zdjango.utilsr   Zwagtailr   Zwagtail.admin.menur   r   r	   r
   r   r   r   Zwagtail.admin.uir   Zwagtail.test.utilsr   Zwagtail.users.modelsr   r   r   r   r   r   r   <module>   s   $	