U
    {hH                     @   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 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)WagtailTestUtilsc                   @   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    h/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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   sR   t d}tt| jd| | ji}| d ||}W 5 Q R X | 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 %}boomboom)r   r-   r   assertEqualr   r/   r1   r    r    r!   +test_userbar_does_not_break_without_request6   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_userL   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_pageZ   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_linkf   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_previewss   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)   r2   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   r/   r1   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(   itemsrW   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   ra   r   rb   r4   )r   rd   r    r    r!   test_messages   s    z,TestAccessibilityCheckerConfig.test_messagesc              	   C   s\   G dd dt }td| |0 |  }| |d ddddd	dd
 W 5 Q R X 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>.CustomMessageAccessibilityItemrg   Headings should not be empty!Use meaningful text!rh   ri   c                    s   t  |ddddiS )Ncolor-contrast-enhancedInsufficient colour contrast!'Ensure contrast ratio of at least 4.5:1rm   )superget_axe_messagesr7   	__class__r    r!   rr      s    
zkTestAccessibilityCheckerConfig.test_custom_message.<locals>.CustomMessageAccessibilityItem.get_axe_messages)rF   rG   rH   Zaxe_messagesrr   __classcell__r    r    rs   r!   CustomMessageAccessibilityItem   s   rv   construct_wagtail_userbarrf   rk   rl   rm   ro   rp   )rg   rn   r	   r   register_temporarilyr\   rS   r4   )r   rv   rd   r    r    r!   test_custom_message   s     z2TestAccessibilityCheckerConfig.test_custom_messagec              	   C   sV   G dd dt }td| |* |  }| |d ddddiii W 5 Q R X 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   rw   optionsrulesr{   r|   Trx   )r   r   rd   r    r    r!   test_unset_run_only  s    z2TestAccessibilityCheckerConfig.test_unset_run_onlyc              	   C   s`   G dd dt }td| |4 |  }| |d ddgddd	gid
gd W 5 Q R X 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   t  |dS )N[data-please-ignore])r   )rq   get_axe_excluder7   rs   r    r!   r     s    zjTestAccessibilityCheckerConfig.test_custom_context.<locals>.CustomContextAccessibilityItem.get_axe_exclude)rF   rG   rH   Zaxe_includeZaxe_excluder   ru   r    r    rs   r!   CustomContextAccessibilityItem  s   r   rw   r0   r   r   r   ZfromShadowDOMzwagtail-userbarr   )includeexcluderx   )r   r   rd   r    r    r!   test_custom_context  s    z2TestAccessibilityCheckerConfig.test_custom_contextc              	   C   s   G dd dt }td| |t |  }| |d |ji d d| j_| jj	
tjjddd	 | j  |  }| |d |j|jd W 5 Q R X d S )
Nc                       s:   e Zd ZdddddddgZdd	d
iiZ fddZ  ZS )zqTestAccessibilityCheckerConfig.test_custom_run_only_and_rules_per_request.<locals>.CustomRunOnlyAccessibilityItemZwcag2aZwcag2aaZwcag2aaaZwcag21aZwcag21aaZwcag22aabest-practicern   r|   Fc                    s   |j jri S t |S r'   )r   is_superuserrq   get_axe_rulesr7   rs   r    r!   r   D  s    zTestAccessibilityCheckerConfig.test_custom_run_only_and_rules_per_request.<locals>.CustomRunOnlyAccessibilityItem.get_axe_rules)rF   rG   rH   r}   r~   r   ru   r    r    rs   r!   CustomRunOnlyAccessibilityItem4  s    r   rw   r   )ZrunOnlyr   FZwagtailadminZaccess_admin)Zcontent_type__app_labelcodename)r	   r   ry   r\   rS   r4   r}   r   r   Zuser_permissionsaddr   r   r   saver~   )r   r   rd   r    r    r!   *test_custom_run_only_and_rules_per_request3  s6     
zITestAccessibilityCheckerConfig.test_custom_run_only_and_rules_per_requestc                 C   s   G dd dt }td| |j 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 5 Q R X 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|   )rq   get_axe_custom_rulesr7   rs   r    r!   r   s  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   )rq   get_axe_custom_checksr7   rs   r    r!   r     s
    
zTestAccessibilityCheckerConfig.test_custom_rules_and_checks.<locals>.CustomRulesAndChecksAccessibilityItem.get_axe_custom_checks)rF   rG   rH   Zaxe_custom_checksr   r   ru   r    r    rs   r!   %CustomRulesAndChecksAccessibilityItemi  s   r   rw   speczalt-text-qualityr   zimg[alt]r   r   Tr   r   r   r   r   r   r   r   )r   Zchecks)r	   r   ry   r\   ZmaxDiffrS   r4   )r   r   rd   r    r    r!   test_custom_rules_and_checksh  sB    	z;TestAccessibilityCheckerConfig.test_custom_rules_and_checksN)rF   rG   rH   r"   rO   rS   r\   re   rj   rz   r   r   r   r   r    r    r    r!   rI      s   	'5rI   c                   @   s$   e Z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)titler1   liveinstance)rJ   r   r
   r   r   firstr(   r   r   specificr   r   page	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_seeN)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assertTagInHTMLr1   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   r1   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   r   rI   r   r   r    r    r    r!   <module>   s"      	