o
    hvS                     @   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                   @   st   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)create_superuseruserr   objectsgethomepageself r"   `/var/www/html/ndineBlogger/venv/lib/python3.10/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 s&w   Y  | d| d S )N-{% load wagtailuserbar %}{% wagtailuserbar %}r*      $<!-- Wagtail user bar embed code -->)	r   r   r   r   r+   r   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 %}boomboom)r   r0   r   assertEqualr!   r2   r4   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   r0   r   r   r+   r   r1   r8   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   r0   r   r   r   r+   r7   r8   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   r0   r   r+   r   r1   r8   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   r0   r   r   r   r+   r   r1   r8   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   r0   r   r   r   r+   r   r1   r   r   r8   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@   rC   rD   )r   r0   r   r   r   r+   r   r1   assertNotInr   r   r8   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>rA   r8   r"   r"   r#   $test_userbar_hidden_in_preview_panel   s   z3TestUserbarTag.test_userbar_hidden_in_preview_panelr)   )__name__
__module____qualname__r$   r+   r5   r9   r;   r=   r>   rB   rF   rH   rI   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   r0   r   r*   get_soupfind)r!   r2   r4   soupr"   r"   r#   
get_script   s   
z)TestAccessibilityCheckerConfig.get_scriptc                 C   s   t |  jS r)   )jsonloadsrS   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pager[   r"   r#   customise_accessibility_checker   s   
zPTestAccessibilityCheckerConfig.get_hook.<locals>.customise_accessibility_checkerr"   )r!   r\   ra   r"   r[   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   )rS   assertIsNotNoner7   attrsrV   stripassertGreaterlenrT   rU   assertIsInstancedictkeys)r!   rO   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)rW   ri   r   rj   r7   )r!   rm   r"   r"   r#   test_messages   s   z,TestAccessibilityCheckerConfig.test_messagesc                 C   sr   G dd dt }td| | |  }| |d ddddd	dd
 W d    d S 1 s2w   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>.CustomMessageAccessibilityItemrp   Headings should not be empty!Use meaningful text!rq   rr   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:1rv   )superget_axe_messagesr:   	__class__r"   r#   r{      s   
zkTestAccessibilityCheckerConfig.test_custom_message.<locals>.CustomMessageAccessibilityItem.get_axe_messages)rJ   rK   rL   axe_messagesr{   __classcell__r"   r"   r|   r#   CustomMessageAccessibilityItem   s    r   construct_wagtail_userbarro   rt   ru   rv   rx   ry   )rp   rw   r	   r   register_temporarilyrb   rW   r7   )r!   r   rm   r"   r"   r#   test_custom_message   s"   "z2TestAccessibilityCheckerConfig.test_custom_messagec                 C   sl   G dd dt }td| | |  }| |d ddddiii W d    d S 1 s/w   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)rJ   rK   rL   axe_run_only	axe_rulesr"   r"   r"   r#   UnsetRunOnlyAccessibilityItem  s    r   r   optionsrulesr   r   Tr   )r!   r   rm   r"   r"   r#   test_unset_run_only  s   "z2TestAccessibilityCheckerConfig.test_unset_run_onlyc                 C   sv   G dd dt }td| |  |  }| |d ddgddd	gid
gd W d    d S 1 s4w   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])rz   get_axe_excluder:   r|   r"   r#   r     s   zjTestAccessibilityCheckerConfig.test_custom_context.<locals>.CustomContextAccessibilityItem.get_axe_exclude)rJ   rK   rL   axe_includeaxe_excluder   r   r"   r"   r|   r#   CustomContextAccessibilityItem  s    r   r   r3   r   r   r   fromShadowDOMzwagtail-userbarr   )includeexcluder   )r!   r   rm   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    d S 1 sTw   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)wcag2awcag2aawcag2aaawcag21awcag21aawcag22aabest-practicerw   r   Fc                    s   |j jri S t |S r)   )r   is_superuserrz   get_axe_rulesr:   r|   r"   r#   r   E  s   zTestAccessibilityCheckerConfig.test_custom_run_only_and_rules_per_request.<locals>.CustomRunOnlyAccessibilityItem.get_axe_rules)rJ   rK   rL   r   r   r   r   r"   r"   r|   r#   CustomRunOnlyAccessibilityItem5  s
    r   r   r   )runOnlyr   Fwagtailadminaccess_admin)content_type__app_labelcodename)r	   r   r   rb   rW   r7   r   r   r   user_permissionsaddr   r   r   saver   )r!   r   rm   r"   r"   r#   *test_custom_run_only_and_rules_per_request4  s6   
"zITestAccessibilityCheckerConfig.test_custom_run_only_and_rules_per_requestc                 C   s   G dd dt }td| |; 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    d S 1 sOw   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   impactselectortagsanyr   )rz   get_axe_custom_rulesr:   r|   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   )rz   get_axe_custom_checksr:   r|   r"   r#   r     s
   
zTestAccessibilityCheckerConfig.test_custom_rules_and_checks.<locals>.CustomRulesAndChecksAccessibilityItem.get_axe_custom_checks)rJ   rK   rL   axe_custom_checksr   r   r   r"   r"   r|   r#   %CustomRulesAndChecksAccessibilityItemj  s    r   r   speczalt-text-qualityr   zimg[alt]r   r   Tr   r   r   r   r   r   r   r   )r   checks)r	   r   r   rb   maxDiffrW   r7   )r!   r   rm   r"   r"   r#   test_custom_rules_and_checksi  sD   	"z;TestAccessibilityCheckerConfig.test_custom_rules_and_checksN)rJ   rK   rL   r$   rS   rW   rb   rn   rs   r   r   r   r   r   r"   r"   r"   r#   rM      s    	'5rM   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   RendangEnakT)titler4   liveinstance)rN   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*   r0   r7   status_code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   r0   r7   r   assertNotContainsr   r"   r"   r#   &test_userbar_anonymous_user_cannot_see  s
   
z=TestUserbarInPageServe.test_userbar_anonymous_user_cannot_seec                    sl   i   fdd}t d| | j| j}|  |  d| j W d    d S 1 s/w   Y  d S )Nc                    s   | d< |S )Nr`   r"   r^   kwargsr"   r#   r        ziTestUserbarInPageServe.test_construct_wagtail_userbar_hook_passes_page.<locals>.construct_wagtail_userbarr   r`   )r   r   r`   r   r*   r0   r7   r   r!   r   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: td| | j| j}|  |  	d W d    n1 s3w   Y  W d    d S W d    d S 1 sKw   Y  d S )Nc                       d d< |S NTcalledr"   r*   r_   r   r"   r#   r     r   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 positionr   r   )
assertWarnsMessager   r   r   r`   r   r*   r0   
assertTruer   r   r"   r   r#   ;test_deprecated_construct_wagtail_userbar_hook_without_page  s   PzRTestUserbarInPageServe.test_deprecated_construct_wagtail_userbar_hook_without_pageN)rJ   rK   rL   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   )rN   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 s&w   Y  | |jd | 	 d d S )Nc                    r   r   r"   r^   r   r"   r#   r     r   zqTestUserbarHooksForChecksPanel.test_construct_wagtail_userbar_hook_passes_page.<locals>.construct_wagtail_userbarr   rC   rD   r   r   )
r   r   clientr   r   r   r   r7   r   r   r   r"   r   r#   r     s   zNTestUserbarHooksForChecksPanel.test_construct_wagtail_userbar_hook_passes_pagec              	      s   i   fdd}|  td+ td| | jtd| jjfd}W d    n1 s-w   Y  W d    n1 s<w   Y  | 	|j
d |  d d S )	Nc                    r   r   r"   r   r   r"   r#   r   	  r   z}TestUserbarHooksForChecksPanel.test_deprecated_construct_wagtail_userbar_hook_without_page.<locals>.construct_wagtail_userbarr   r   rC   rD   r   r   )r   r   r   r   r   r   r   r   r   r7   r   r   r   r"   r   r#   r     s&    zZTestUserbarHooksForChecksPanel.test_deprecated_construct_wagtail_userbar_hook_without_pageN)rJ   rK   rL   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/)url_pathz/home/events/BusinessT)r   r   r   zBusiness Child)rN   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_subpagerD   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*   r0   r7   r   r   r   assertTagInHTMLr4   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   rD   r   href)re   )r   r   r*   r0   r7   r   r   r   r   rP   r4   rQ   assertIsNone)r!   r   r   rR   linkr"   r"   r#   test_page_disallowing_subpages?  s   
z1TestUserbarAddLink.test_page_disallowing_subpagesN)rJ   rK   rL   fixturesr$   r   r   r"   r"   r"   r#   r     s
    r   )"rT   django.contrib.auth.modelsr   r   django.templater   r   django.testr   django.urlsr   wagtailr   wagtail.admin.userbarr	   wagtail.coreutilsr
   wagtail.modelsr   r   r   wagtail.test.testapp.modelsr   r   r   wagtail.test.utilsr   wagtail.utils.deprecationr   r   rM   r   r   r   r"   r"   r"   r#   <module>   s(       	>-