a
    DgvS                     @   s  d dl Z d dlmZm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 d d	lmZmZmZ d d
lmZmZmZ d dlmZ d dlmZ G dd deeZG dd deeZG dd deeZG dd deeZ G dd deeZ!dS )    N)AnonymousUser
Permission)ContextTemplate)TestCase)reverse)hooks)AccessibilityItem)get_dummy_request)PAGE_TEMPLATE_VARPageSite)BusinessChildBusinessIndex
SimplePage)WagtailTestUtils)RemovedInWagtail70Warningc                   @   sr   e Zd Zdd Zddddd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S )TestUserbarTagc                 C   s&   | j dddd| _tjjdd| _d S )Ntestztest@email.compassword)usernameemailr      id)Zcreate_superuseruserr   objectsgethomepageself r!   _/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/tests/test_userbar.pysetUp   s    zTestUserbarTag.setUpNF)
is_previewin_preview_panelrevision_id
is_editingc                C   s2   t  }|pt |_||_||_||_|r.||_|S N)r
   r   r   r$   r'   r%   r&   )r    r   r$   r%   r&   r'   requestr!   r!   r"   dummy_request   s    	zTestUserbarTag.dummy_requestc                 C   sf   t d}tt| jd| | ji}| d ||}W d    n1 sL0    Y  | d| d S )N-{% load wagtailuserbar %}{% wagtailuserbar %}r)      $<!-- Wagtail user bar embed code -->)	r   r   r   r   r*   r   ZassertNumQueriesrenderassertIn)r    templatecontextcontentr!   r!   r"   test_userbar_tag*   s    (zTestUserbarTag.test_userbar_tagc                 C   s&   t d}|ti }| d| d S )Nz1{% load wagtailuserbar %}{% wagtailuserbar %}boomZboom)r   r.   r   assertEqualr    r0   r2   r!   r!   r"   +test_userbar_does_not_break_without_request7   s    z:TestUserbarTag.test_userbar_does_not_break_without_requestc                 C   s6   t d}|t| j| | jd}| d| dS )zW
        Ensure the userbar renders with `self` instead of `PAGE_TEMPLATE_VAR`
        r+   r    r)   r-   N)r   r.   r   r   r*   r   r/   r5   r!   r!   r"   test_userbar_tag_self=   s    
	z$TestUserbarTag.test_userbar_tag_selfc                 C   s4   t d}|tt| jd|  i}| |d d S )Nr+   r)    )r   r.   r   r   r   r*   r4   r5   r!   r!   r"   test_userbar_tag_anonymous_userM   s    
z.TestUserbarTag.test_userbar_tag_anonymous_userc                 C   s2   t d}|td| | ji}| d| d S )Nr+   r)   r-   )r   r.   r   r*   r   r/   r5   r!   r!   r"   test_userbar_tag_no_page[   s    z'TestUserbarTag.test_userbar_tag_no_pagec              
   C   sH   t d}|tt| jd| j| jddi}| d| | d| d S )Nr+   r)   Fr$   r-   Edit this pager   r.   r   r   r   r*   r   r/   r5   r!   r!   r"   test_edit_linkg   s    zTestUserbarTag.test_edit_linkc              
   C   sb   t d}|tt| jd| j| jddi}| d| | d| | td| jj	fd| d S )	Nr+   r)   Tr<   r-   r=   wagtailadmin_pages:editargs)
r   r.   r   r   r   r*   r   r/   r   r   r5   r!   r!   r"   "test_userbar_edit_menu_in_previewst   s    z1TestUserbarTag.test_userbar_edit_menu_in_previewsc                 C   sd   t d}|tt| jd| j| jdddi}| d| | d| | t	d| jj
fd| d S )	Nr+   r)   T)r$   r'   r-   r=   r@   rA   )r   r.   r   r   r   r*   r   r/   ZassertNotInr   r   r5   r!   r!   r"   %test_userbar_edit_menu_not_in_preview   s    
z4TestUserbarTag.test_userbar_edit_menu_not_in_previewc                 C   s>   t d}|tt| jd| j| jdddi}| d| d S )Nr+   r)   T)r$   r%   z<aside hidden>r>   r5   r!   r!   r"   $test_userbar_hidden_in_preview_panel   s    z3TestUserbarTag.test_userbar_hidden_in_preview_panel)N)__name__
__module____qualname__r#   r*   r3   r6   r8   r:   r;   r?   rC   rD   rE   r!   r!   r!   r"   r      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 )TestAccessibilityCheckerConfigc                 C   s    |   | _t | _| j| j_d S r(   )loginr   r
   r)   r   r!   r!   r"   r#      s    
z$TestAccessibilityCheckerConfig.setUpc                 C   s4   t d}|td| ji}| |}|jdddS )Nr+   r)   scriptzaccessibility-axe-configurationr   )r   r.   r   r)   get_soupfind)r    r0   r2   soupr!   r!   r"   
get_script   s    
z)TestAccessibilityCheckerConfig.get_scriptc                 C   s   t |  jS r(   )jsonloadsrO   stringr   r!   r!   r"   
get_config   s    z)TestAccessibilityCheckerConfig.get_configc                    s    fdd}|S )Nc                    s    fdd|D |d d < d S )Nc                    s    g | ]}t |tr  n|qS r!   )
isinstancer	   ).0item
item_classr!   r"   
<listcomp>   s   zdTestAccessibilityCheckerConfig.get_hook.<locals>.customise_accessibility_checker.<locals>.<listcomp>r!   r)   itemspagerW   r!   r"   customise_accessibility_checker   s    
zPTestAccessibilityCheckerConfig.get_hook.<locals>.customise_accessibility_checkerr!   )r    rX   r]   r!   rW   r"   get_hook   s    z'TestAccessibilityCheckerConfig.get_hookc                 C   sl   |   }| | | |jd d |j }| t|d t	|}| 
|t | t| d d S )Ntypezapplication/jsonr   )rO   ZassertIsNotNoner4   attrsrR   stripZassertGreaterlenrP   rQ   assertIsInstancedictkeys)r    rK   Zconfig_stringconfigr!   r!   r"   test_config_json   s    


z/TestAccessibilityCheckerConfig.test_config_jsonc                 C   sN   |   }| |dt | |d d d d | |d d d d d S )Nmessagesempty-heading
error_namezEmpty heading found	help_textz+Use meaningful text for screen reader users)rS   rc   r   rd   r4   )r    rf   r!   r!   r"   test_messages   s    z,TestAccessibilityCheckerConfig.test_messagesc                 C   sp   G dd dt }td| |: |  }| |d ddddd	dd
 W d    n1 sb0    Y  d S )Nc                       s*   e Zd ZddddiZ fddZ  ZS )zZTestAccessibilityCheckerConfig.test_custom_message.<locals>.CustomMessageAccessibilityItemri   Headings should not be empty!Use meaningful text!rj   rk   c                    s   i t  |ddddiS )Ncolor-contrast-enhancedInsufficient colour contrast!'Ensure contrast ratio of at least 4.5:1ro   )superget_axe_messagesr7   	__class__r!   r"   rt      s    
zkTestAccessibilityCheckerConfig.test_custom_message.<locals>.CustomMessageAccessibilityItem.get_axe_messages)rF   rG   rH   Zaxe_messagesrt   __classcell__r!   r!   ru   r"   CustomMessageAccessibilityItem   s   rx   construct_wagtail_userbarrh   rm   rn   ro   rq   rr   )ri   rp   r	   r   register_temporarilyr^   rS   r4   )r    rx   rf   r!   r!   r"   test_custom_message   s     z2TestAccessibilityCheckerConfig.test_custom_messagec                 C   sj   G dd dt }td| |4 |  }| |d ddddiii W d    n1 s\0    Y  d S )	Nc                   @   s   e Zd ZdZdddiiZdS )zYTestAccessibilityCheckerConfig.test_unset_run_only.<locals>.UnsetRunOnlyAccessibilityItemNfocus-order-semanticsenabledT)rF   rG   rH   axe_run_only	axe_rulesr!   r!   r!   r"   UnsetRunOnlyAccessibilityItem  s   r   ry   optionsrulesr}   r~   Trz   )r    r   rf   r!   r!   r"   test_unset_run_only  s    z2TestAccessibilityCheckerConfig.test_unset_run_onlyc                 C   st   G dd dt }td| |> |  }| |d ddgddd	gid
gd W d    n1 sf0    Y  d S )Nc                       s*   e Zd ZddgZdgZ fddZ  ZS )zZTestAccessibilityCheckerConfig.test_custom_context.<locals>.CustomContextAccessibilityItemarticlesection.sr-onlyc                    s   g t  |dS )N[data-please-ignore])rs   get_axe_excluder7   ru   r!   r"   r     s    zjTestAccessibilityCheckerConfig.test_custom_context.<locals>.CustomContextAccessibilityItem.get_axe_exclude)rF   rG   rH   Zaxe_includeZaxe_excluder   rw   r!   r!   ru   r"   CustomContextAccessibilityItem  s   r   ry   r1   r   r   r   ZfromShadowDOMzwagtail-userbarr   )includeexcluderz   )r    r   rf   r!   r!   r"   test_custom_context  s    z2TestAccessibilityCheckerConfig.test_custom_contextc                 C   s   G dd dt }td| |~ |  }| |d |ji d d| j_| jj	
tjjddd	 | j  |  }| |d |j|jd W d    n1 s0    Y  d S )
Nc                       s0   e Zd Zg dZdddiiZ fddZ  ZS )zqTestAccessibilityCheckerConfig.test_custom_run_only_and_rules_per_request.<locals>.CustomRunOnlyAccessibilityItem)Zwcag2aZwcag2aaZwcag2aaaZwcag21aZwcag21aaZwcag22aabest-practicerp   r~   Fc                    s   |j jri S t |S r(   )r   is_superuserrs   get_axe_rulesr7   ru   r!   r"   r   E  s    zTestAccessibilityCheckerConfig.test_custom_run_only_and_rules_per_request.<locals>.CustomRunOnlyAccessibilityItem.get_axe_rules)rF   rG   rH   r   r   r   rw   r!   r!   ru   r"   CustomRunOnlyAccessibilityItem5  s   r   ry   r   )ZrunOnlyr   FZwagtailadminZaccess_admin)Zcontent_type__app_labelcodename)r	   r   r{   r^   rS   r4   r   r   r   Zuser_permissionsaddr   r   r   saver   )r    r   rf   r!   r!   r"   *test_custom_run_only_and_rules_per_request4  s4    
zITestAccessibilityCheckerConfig.test_custom_run_only_and_rules_per_requestc                 C   s   G dd dt }td| |t d | _|  }| |d ddddgd	gd
dddddgdgd
dgd	ddiddddidgd W d    n1 s0    Y  d S )Nc                       s8   e Zd ZdddidgZ fddZ fddZ  ZS )	zjTestAccessibilityCheckerConfig.test_custom_rules_and_checks.<locals>.CustomRulesAndChecksAccessibilityItemcheck-image-alt-textpattern\.[a-z]{1,4}$|_r   r   c                    s$   t  |ddddgdgddg S )Nlink-text-qualityseriousar   check-link-textTr   Zimpactselectortagsanyr~   )rs   get_axe_custom_rulesr7   ru   r!   r"   r   t  s    
zTestAccessibilityCheckerConfig.test_custom_rules_and_checks.<locals>.CustomRulesAndChecksAccessibilityItem.get_axe_custom_rulesc                    s   t  |dddidg S )Nr   r   learn more$r   )rs   get_axe_custom_checksr7   ru   r!   r"   r     s
    
zTestAccessibilityCheckerConfig.test_custom_rules_and_checks.<locals>.CustomRulesAndChecksAccessibilityItem.get_axe_custom_checks)rF   rG   rH   Zaxe_custom_checksr   r   rw   r!   r!   ru   r"   %CustomRulesAndChecksAccessibilityItemj  s   r   ry   speczalt-text-qualityr   zimg[alt]r   r   Tr   r   r   r   r   r   r   r   )r   Zchecks)r	   r   r{   r^   ZmaxDiffrS   r4   )r    r   rf   r!   r!   r"   test_custom_rules_and_checksi  sB    	z;TestAccessibilityCheckerConfig.test_custom_rules_and_checksN)rF   rG   rH   r#   rO   rS   r^   rg   rl   r|   r   r   r   r   r!   r!   r!   r"   rI      s   	'5rI   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestUserbarInPageServec                 C   s\   |   | _ttj d| _| j| j_tjjddj	| _
tdddd| _| j
j| jd d S )	Nsiter   r   ZRendangZEnakT)titler2   liveinstance)rJ   r   r
   r   r   firstr)   r   r   specificr   r   r\   	add_childr   r!   r!   r"   r#     s    

zTestUserbarInPageServe.setUpc                 C   s4   | j | j}|  | |jd | |d d S N   z(<template id="wagtail-userbar-template">)r\   server)   r.   r4   status_codeZassertContainsr    responser!   r!   r"   test_userbar_rendered  s    z,TestUserbarInPageServe.test_userbar_renderedc                 C   s>   t  | j_| j| j}|  | |jd | |d d S r   )	r   r)   r   r\   r   r.   r4   r   ZassertNotContainsr   r!   r!   r"   &test_userbar_anonymous_user_cannot_see  s
    
z=TestUserbarInPageServe.test_userbar_anonymous_user_cannot_seec                    sj   i   fdd}t d|: | j| j}|  |  d| j W d    n1 s\0    Y  d S )Nc                    s   | d< |S )Nr\   r!   rZ   kwargsr!   r"   ry     s    ziTestUserbarInPageServe.test_construct_wagtail_userbar_hook_passes_page.<locals>.construct_wagtail_userbarry   r\   )r   r{   r\   r   r)   r.   r4   r   r    ry   r   r!   r   r"   /test_construct_wagtail_userbar_hook_passes_page  s    zFTestUserbarInPageServe.test_construct_wagtail_userbar_hook_passes_pagec              	      s   i   fdd}|  tdb td|6 | j| j}|  |  	d W d    n1 sf0    Y  W d    n1 s0    Y  d S )Nc                    s   d d< |S NTcalledr!   r)   r[   r   r!   r"   ry     s    zuTestUserbarInPageServe.test_deprecated_construct_wagtail_userbar_hook_without_page.<locals>.construct_wagtail_userbar\`construct_wagtail_userbar` hook functions should accept a `page` argument in third positionry   r   )
assertWarnsMessager   r   r{   r\   r   r)   r.   
assertTruer   r   r!   r   r"   ;test_deprecated_construct_wagtail_userbar_hook_without_page  s    zRTestUserbarInPageServe.test_deprecated_construct_wagtail_userbar_hook_without_pageN)rF   rG   rH   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 )TestUserbarHooksForChecksPanelc                 C   s    |   | _tjjddj| _d S )Nr   r   )rJ   r   r   r   r   r   r   r   r!   r!   r"   r#     s    
z$TestUserbarHooksForChecksPanel.setUpc                    sx   i   fdd}t d|* | jtd| jjfd}W d    n1 sL0    Y  | |jd | 	 d d S )Nc                    s   d d< |S r   r!   rZ   r   r!   r"   ry     s    zqTestUserbarHooksForChecksPanel.test_construct_wagtail_userbar_hook_passes_page.<locals>.construct_wagtail_userbarry   r@   rA   r   r   )
r   r{   clientr   r   r   r   r4   r   r   r   r!   r   r"   r     s    "zNTestUserbarHooksForChecksPanel.test_construct_wagtail_userbar_hook_passes_pagec              	      s   i   fdd}|  tdV td|* | jtd| jjfd}W d    n1 sZ0    Y  W d    n1 sx0    Y  | 	|j
d |  d d S )	Nc                    s   d d< |S r   r!   r   r   r!   r"   ry   	  s    z}TestUserbarHooksForChecksPanel.test_deprecated_construct_wagtail_userbar_hook_without_page.<locals>.construct_wagtail_userbarr   ry   r@   rA   r   r   )r   r   r   r{   r   r   r   r   r   r4   r   r   r   r!   r   r"   r     s     @zZTestUserbarHooksForChecksPanel.test_deprecated_construct_wagtail_userbar_hook_without_pageN)rF   rG   rH   r#   r   r   r!   r!   r!   r"   r     s   r   c                   @   s*   e Zd ZdgZdd Zdd Zdd ZdS )	TestUserbarAddLinkz	test.jsonc                 C   s   |   | _ttj d| _| j| j_tjjdd| _	tjjddj
| _tddd| _| j	j| jd td	dd| _| jj| jd d S )
Nr   z/home/)Zurl_pathz/home/events/ZBusinessT)r   r   r   zBusiness Child)rJ   r   r
   r   r   r   r)   r   r   r   r   event_indexr   business_indexr   r   business_childr   r!   r!   r"   r#     s    

zTestUserbarAddLink.setUpc                 C   sX   | j | j}|  | |jd td| j jfd}d| d}| ||j	
  d S )Nr   wagtailadmin_pages:add_subpagerA   z
            <a href="z" target="_parent" role="menuitem">
                <svg class="icon icon-plus w-action-icon" aria-hidden="true">
                    <use href="#icon-plus"></use>
                </svg>
                Add a child page
            </a>
            )r   r   r)   r.   r4   r   r   r   ZassertTagInHTMLr2   decode)r    r   expected_urlneedler!   r!   r"   test_page_allowing_subpages,  s    
z.TestUserbarAddLink.test_page_allowing_subpagesc                 C   sb   | j | j}|  | |jd td| jjfd}| 	|j
}|jdd|id}| | d S )Nr   r   rA   r   href)r`   )r   r   r)   r.   r4   r   r   r   r   rL   r2   rM   ZassertIsNone)r    r   r   rN   linkr!   r!   r"   test_page_disallowing_subpages?  s    
z1TestUserbarAddLink.test_page_disallowing_subpagesN)rF   rG   rH   Zfixturesr#   r   r   r!   r!   r!   r"   r     s   r   )"rP   Zdjango.contrib.auth.modelsr   r   Zdjango.templater   r   Zdjango.testr   Zdjango.urlsr   Zwagtailr   Zwagtail.admin.userbarr	   Zwagtail.coreutilsr
   Zwagtail.modelsr   r   r   Zwagtail.test.testapp.modelsr   r   r   Zwagtail.test.utilsr   Zwagtail.utils.deprecationr   r   rI   r   r   r   r!   r!   r!   r"   <module>   s&      	>-