o
    h&V                     @   s  d dl Z d dlZd dlmZ d dlmZm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 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 d dl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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+G d!d" d"e!eZ,G d#d$ d$eZ-dS )%    N)settings)Group
Permission)mail)call_command)TestCaseoverride_settings)reversereverse_lazy)gettext_lazyTag)user_has_any_page_permission)	send_mail)MenuItem)Page)RestaurantTag)WagtailTestUtils)RemovedInWagtail70Warningc                   @   sV   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	
ejdkddd ZdS )TestHomec                 C   s   |    d S N)loginself r   Y/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/admin/tests/tests.pysetUp   s   zTestHome.setUpc                 C   s.   | j td}| |jd | |d d S )Nwagtailadmin_home   z	Test Siteclientgetr	   assertEqualstatus_codeassertContainsr   responser   r   r   test_simple   s   zTestHome.test_simplec                 C   sf   | j td}| |jd | |d | |d | |d | j tdd }| |d d S )Nr   r   z{"name": "kittens", "label": "Kittens!", "icon_name": "kitten", "classname": "kitten--test", "attrs": {"data-is-custom": "true"}, "url": "http://www.tomroyal.com/teaandkittens/"}z[{"name": "explorer", "label": "Pages", "icon_name": "folder-open-inverse", "classname": "", "attrs": {}, "url": "/admin/pages/"}, 1]z&"url": "/admin/deep/within/the/admin/"z?hide-kittens=true)r    r!   r	   r"   r#   r$   assertNotContainsr%   r   r   r   test_admin_menu"   s    zTestHome.test_admin_menuc                 C   >   | j td}| |jd | |d | j|ddd d S )Nr   r   zG<p>It looks like you're making a website. Would you like some help?</p>z4<script src="/static/testapp/js/clippy.js"></script>Thtmlr   r%   r   r   r   test_dashboard_panels;   s   
zTestHome.test_dashboard_panelsc                 C   r*   )Nr   r   z<li>0 broken links</li>zO<link href="/static/testapp/css/broken-links.css" media="all" rel="stylesheet">Tr+   r   r%   r   r   r   test_summary_itemsH   s   
zTestHome.test_summary_itemsc                 C   sT   | j td}| d|d  | d|d  | d|d  | d|d  d S )Nr   zno-cachezCache-Controlzno-storez	max-age=0zmust-revalidate)r    r!   r	   assertInr%   r   r   r   test_never_cache_headerT   s
   z TestHome.test_never_cache_headerzemailuser.EmailUserzOnly applicable to CustomUserc                 C   sH   | j dddd | | jjddd | jtd}| |jd d S )Nsnowmanu   ☃@thenorthpole.compasswordusernameemailr2   r4   r2   r   r   )create_superuser
assertTruer    r   r!   r	   r"   r#   r%   r   r   r   test_nonascii_email]   s   zTestHome.test_nonascii_emailN)__name__
__module____qualname__r   r'   r)   r-   r.   r0   unittestskipIfr   AUTH_USER_MODELr9   r   r   r   r   r      s    	r   c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestEditorHooksc                 C   s   t jjdd| _|   d S N   id)r   objectsr!   homepager   r   r   r   r   r   n   s   zTestEditorHooks.setUpc                 C   <   | j tddd| jjfd}| |jd | |d d S )Nwagtailadmin_pages:addtests
simplepageargsr   5<link rel="stylesheet" href="/path/to/my/custom.css">r    r!   r	   rG   rE   r"   r#   r$   r%   r   r   r   test_editor_css_hooks_on_addr   s   z,TestEditorHooks.test_editor_css_hooks_on_addc                 C   rH   )NrI   rJ   rK   rL   r   -<script src="/path/to/my/custom.js"></script>rO   r%   r   r   r   test_editor_js_hooks_on_add}   s   z+TestEditorHooks.test_editor_js_hooks_on_addc                 C   8   | j td| jjfd}| |jd | |d d S )Nwagtailadmin_pages:editrL   r   rN   rO   r%   r   r   r   test_editor_css_hooks_on_edit   s   z-TestEditorHooks.test_editor_css_hooks_on_editc                 C   rS   )NrT   rL   r   rQ   rO   r%   r   r   r   test_editor_js_hooks_on_edit   s
   z,TestEditorHooks.test_editor_js_hooks_on_editN)r:   r;   r<   r   rP   rR   rU   rV   r   r   r   r   rA   m   s    		rA   c                   @   sh   e Zd Zdd Zedddd Zeddd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd ZdS )TestSendMailc                 C   sx   t dddgd | ttjd | tjd jd | tjd jd | tjd jdg | tjd jd d S )NTest subjectTest contentnobody@email.comtest@email.com   r   	r   r"   lenr   outboxsubjectbodyto
from_emailr   r   r   r   test_send_email   s   
zTestSendMail.test_send_emailanothertest@email.com)$WAGTAILADMIN_NOTIFICATION_FROM_EMAILc                 C   v   t dddg | ttjd | tjd jd | tjd jd | tjd jdg | tjd jd d S )NrX   rY   rZ   r\   r   re   r]   r   r   r   r   Btest_send_fallback_to_wagtailadmin_notification_from_email_setting      zOTestSendMail.test_send_fallback_to_wagtailadmin_notification_from_email_settingyetanothertest@email.com)DEFAULT_FROM_EMAILc                 C   rg   )NrX   rY   rZ   r\   r   rj   r]   r   r   r   r   0test_send_fallback_to_default_from_email_setting   ri   z=TestSendMail.test_send_fallback_to_default_from_email_settingc                 C   rg   )NrX   rY   rZ   r\   r   zwebmaster@localhostr]   r   r   r   r   test_send_default_from_email   s   z)TestSendMail.test_send_default_from_emailc                 C   s   t dddgdd t dddg | ttjd tjd	 }| |jd | |jd
g | |jd | |jdg tjd }| |jd | |jg  | |jd | |jdg dS )zwTest that the kwarg 'html_message' works as expected on send_mail by creating 'alternatives' on the EmailMessage objectzTest HTML subjectzTEXT contentzhas.html@email.com<h2>Test HTML content</h2>)html_messagezTest TEXT subjectzmr.plain.text@email.comrC   r   )rn   z	text/htmlr\   N)	r   r"   r^   r   r_   r`   alternativesra   rb   )r   email_messager   r   r   test_send_html_email   s,   

z!TestSendMail.test_send_html_emailc                 C      t dddgddgd | ttjd | tjd jd | tjd jd | tjd jdg | tjd jd | tjd j	dg d S )	NrX   rY   rZ   r[   cc.test@email.com)ccr\   r   )
r   r"   r^   r   r_   r`   ra   rb   rc   ru   r   r   r   r   test_send_cc      	zTestSendMail.test_send_ccc                 C   rs   )	NrX   rY   rZ   r[   bcc.test@email.com)bccr\   r   )
r   r"   r^   r   r_   r`   ra   rb   rc   ry   r   r   r   r   test_send_bcc   rw   zTestSendMail.test_send_bccc                 C   rs   )	NrX   rY   rZ   r[   reply_to.test@email.com)reply_tor\   r   )
r   r"   r^   r   r_   r`   ra   rb   rc   r|   r   r   r   r   test_send_reply_to  rw   zTestSendMail.test_send_reply_toc              	   C   s   t dddgddgdgdgd | ttjd	 | tjd
 jd | tjd
 jd | tjd
 jdg | tjd
 jd | tjd
 j	dg | tjd
 j
dg | tjd
 jdg d S )NrX   rY   rZ   r[   rt   rx   r{   )ru   ry   r|   r\   r   )r   r"   r^   r   r_   r`   ra   rb   rc   ru   ry   r|   r   r   r   r   test_send_all_extra_fields  s"   z'TestSendMail.test_send_all_extra_fieldsN)r:   r;   r<   rd   r   rh   rl   rm   rr   rv   rz   r}   r~   r   r   r   r   rW      s    




 rW   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S )TestTagsAutocompletec                 C   s<   |    tjjddd tjjddd tjjddd d S )NTesttestnameslugItalianitalianIndianindian)r   r   rF   creater   r   r   r   r   r   .  s   zTestTagsAutocomplete.setUpc                 C   X   | j tdddi}| |jd | |d d t|jd}| |dg d S )	Nwagtailadmin_tag_autocompletetermr   r   Content-Typeapplication/jsonutf-8r   	r    r!   r	   r"   r#   jsonloadscontentdecoder   r&   datar   r   r   test_tags_autocomplete4     z+TestTagsAutocomplete.test_tags_autocompletec                 C   r   )	Nr   r   ter   r   r   r   r   r   r   r   r   r   $test_tags_autocomplete_partial_match?  r   z9TestTagsAutocomplete.test_tags_autocomplete_partial_matchc                 C   sV   | j tdddi}| |jd | |d d t|jd}| |g  d S )Nr   r   hellor   r   r   r   r   r   r   r   r   %test_tags_autocomplete_different_termJ  s   z:TestTagsAutocomplete.test_tags_autocomplete_different_termc                 C   sP   | j td}| |jd | |d d t|jd}| |g  d S )Nr   r   r   r   r   r   r   r   r   r   test_tags_autocomplete_no_termU  s
   z3TestTagsAutocomplete.test_tags_autocomplete_no_termc                 C   s   | j tdddddi}| |jd | |d d t|jd	}| |d
g | j tdddddi}| |jd | |d d t|jd	}| |g  d S )N#wagtailadmin_tag_model_autocomplete)rJ   restauranttagrL   r   italr   r   r   r   r   r   r   r   r   r   r   #test_tags_autocomplete_custom_model]  s(   z8TestTagsAutocomplete.test_tags_autocomplete_custom_modelc                 C   s   dd t dD }tj| | jtdddi}| |jd | |d d	 t	
|jd
}| t|d t|dd d}| |dd |d d D  d S )Nc                 S   s$   g | ]}t d | d| dqS )zTag ztag-r   r   ).0ir   r   r   
<listcomp>z  s   $ zETestTagsAutocomplete.test_tags_autocomplete_limit.<locals>.<listcomp>   r   r   r   r   r   r   r   
   c                 S   s   | j S r   r   )tr   r   r   <lambda>  s    zCTestTagsAutocomplete.test_tags_autocomplete_limit.<locals>.<lambda>)keyc                 S   s   g | ]}|j qS r   r   )r   tagr   r   r   r     s    )ranger   rF   bulk_creater    r!   r	   r"   r#   r   r   r   r   r^   sorted)r   tagsr&   r   sorted_tagsr   r   r   test_tags_autocomplete_limity  s   "z1TestTagsAutocomplete.test_tags_autocomplete_limitN)
r:   r;   r<   r   r   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 )TestMenuItemc                 C   s$   |    | jtd}|j| _d S )Nr   )r   r    r!   r	   wsgi_requestrequestr%   r   r   r   r     s   zTestMenuItem.setUpc                 C   s(   t tdtddd}| |jd d S )Nr   r   zhighlight-item)	classname)r   _r
   r"   r   r   menuitemr   r   r   test_menuitem_with_classname  s   z)TestMenuItem.test_menuitem_with_classnamec                 C   sT   |  td ttdtddd}W d    n1 sw   Y  | |jd d S )NzLThe `classnames` kwarg for MenuItem is deprecated - use `classname` instead.r   r   z	is-dimmed)
classnames)assertWarnsRegexr   r   r   r
   r"   r   r   r   r   r   (test_menuitem_with_deprecated_classnames  s   	z5TestMenuItem.test_menuitem_with_deprecated_classnamesN)r:   r;   r<   r   r   r   r   r   r   r   r     s    r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	%TestUserPassesTestPermissionDecoratorz
    Test for custom user_passes_test permission decorators.
    testapp_bob_only_zone is a view configured to only grant access to users with a first_name of Bob
    c                 C   sB   | j ddddd | jddd | jtd}| |jd d S )	NBobMortimerr   r2   
first_name	last_namer4   r2   r6   testapp_bob_only_zoner   r7   r   r    r!   r	   r"   r#   r%   r   r   r   test_user_passes_test  s   z;TestUserPassesTestPermissionDecorator.test_user_passes_testc                 C   sD   | j ddddd | jddd | jtd}| |td d S )	NVicReevesr   r2   r   r6   r   r   )r7   r   r    r!   r	   assertRedirectsr%   r   r   r   test_user_fails_test  s   z:TestUserPassesTestPermissionDecorator.test_user_fails_testc                 C   sF   | j ddddd | jddd | jjtddd	}| |jd
 d S )Nr   r   r   r2   r   r6   r   XMLHttpRequest)HTTP_X_REQUESTED_WITHi  r   r%   r   r   r   test_user_fails_test_ajax  s   z?TestUserPassesTestPermissionDecorator.test_user_fails_test_ajaxN)r:   r;   r<   __doc__r   r   r   r   r   r   r   r     s
    

r   c                   @   r@   )TestUserHasAnyPagePermissionc                 C   s"   | j dddd}| t| d S )N	superuseradmin@example.compr3   )r7   r8   r   r   userr   r   r   test_superuser  s   z+TestUserHasAnyPagePermission.test_superuserc                 C   s(   | j dddd}d|_| t| d S )Nr   r   r   r3   F)r7   	is_activeassertFalser   r   r   r   r   test_inactive_superuser  s
   z4TestUserHasAnyPagePermission.test_inactive_superuserc                 C   <   | j dddd}tjjdd}|j| | t| d S )Neditorzed@example.comr   r3   Editorsr   create_userr   rF   r!   groupsaddr8   r   r   r   editorsr   r   r   test_editor  s   z(TestUserHasAnyPagePermission.test_editorc                 C   r   )N	moderatorzmod@example.comr   r3   
Moderatorsr   r   r   r   r   r   test_moderator  s   z+TestUserHasAnyPagePermission.test_moderatorc                 C   s:   | j dddd}|jtjjddd | t| d S )Nplebzpleb@example.comr   r3   wagtailadminaccess_admincontent_type__app_labelcodename)r   user_permissionsr   r   rF   r!   r   r   r   r   r   r   test_no_permissions  s   z0TestUserHasAnyPagePermission.test_no_permissionsN)r:   r;   r<   r   r   r   r   r   r   r   r   r   r     s    r   c                   @      e Zd Zdd Zdd ZdS )Test404c                 C   s   |    | jdd4 | jjddd}| |jd | |d | |j}| 	|
d | 	|
d W d    d S 1 sAw   Y  d S )	NTAPPEND_SLASHz/admin/sdfgdsfgdsfgsdffollowi  zwagtailadmin/404.htmlscriptz[data-sprite])r   r   r    r!   r"   r#   assertTemplateUsedget_soupr   r   select)r   r&   soupr   r   r   .test_admin_404_template_used_append_slash_true  s   "z6Test404.test_admin_404_template_used_append_slash_truec                 C   s$   | j d}| |tdd  d S )Nz/admin/sdfgdsfgdsfgsdf/wagtailadmin_loginz?next=/admin/sdfgdsfgdsfgsdf/)r    r!   r   r	   r%   r   r   r   test_not_logged_in_redirect  s   z#Test404.test_not_logged_in_redirectN)r:   r;   r<   r   r   r   r   r   r   r     s    r   c                   @   r   )TestAdminURLAppendSlashc                 C   s   t jjdd| _d S rB   )r   rF   r!   	root_pager   r   r   r   r     s   zTestAdminURLAppendSlash.setUpc                 C   s   |    | jdd< | jjtdd d dd}| |jd | |d | tj	jdd	|j
d
  | | j|j
d  W d    d S 1 sIw   Y  d S )NTr   wagtailadmin_explore_rootr   r   z(wagtailadmin/pages/explorable_index.htmlr\   rD   parent_pagepages)r   r   r    r!   r	   r"   r#   r   r   rF   contextr/   r   r%   r   r   r   =test_return_correct_view_for_correct_url_without_ending_slash  s   "zUTestAdminURLAppendSlash.test_return_correct_view_for_correct_url_without_ending_slashN)r:   r;   r<   r   r  r   r   r   r   r     s    r   c                   @   s   e Zd Zdd ZdS )TestRemoveStaleContentTypesc                 C   s*   t ddd | tjjddd  d S )Nremove_stale_contenttypesF)interactiver   r   r   )r   r8   r   rF   filterexistsr   r   r   r   Atest_remove_stale_content_types_preserves_access_admin_permission#  s   z]TestRemoveStaleContentTypes.test_remove_stale_content_types_preserves_access_admin_permissionN)r:   r;   r<   r  r   r   r   r   r  "  s    r  ).r   r=   django.confr   django.contrib.auth.modelsr   r   django.corer   django.core.managementr   django.testr   r   django.urlsr	   r
   django.utils.translationr   r   taggit.modelsr   wagtail.admin.authr   wagtail.admin.mailr   wagtail.admin.menur   wagtail.modelsr   wagtail.test.testapp.modelsr   wagtail.test.utilsr   wagtail.utils.deprecationr   r   rA   rW   r   r   r   r   r   r   r  r   r   r   r   <module>   s8    U* a'&