U
    {®ÞhS  ã                   @   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   úa/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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$Welcome to the Test Site Wagtail CMS©Ú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"   ZassertNotContainsr#   r   r   r   Útest_admin_menu"   s     þþþzTestHome.test_admin_menuc                 C   s>   | 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   s>   | j  tdƒ¡}|  |jd¡ |  |d¡ | j|ddd d S )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Úemailr.   ©r0   r.   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*   r,   ÚunittestZskipIfr   ZAUTH_USER_MODELr5   r   r   r   r   r      s   	þr   c                   @   s4   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   s<   | 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	   r@   r>   r    r!   r"   r#   r   r   r   Útest_editor_css_hooks_on_addr   s     ÿÿ ÿz,TestEditorHooks.test_editor_css_hooks_on_addc                 C   s<   | j  tddd| jjfd¡}|  |jd¡ |  |d¡ d S )NrA   rB   rC   rD   r   ú-<script src="/path/to/my/custom.js"></script>rG   r#   r   r   r   Útest_editor_js_hooks_on_add}   s     ÿÿz+TestEditorHooks.test_editor_js_hooks_on_addc                 C   s8   | j  td| jjfd¡}|  |jd¡ |  |d¡ d S )Núwagtailadmin_pages:editrD   r   rF   rG   r#   r   r   r   Útest_editor_css_hooks_on_edit†   s    ÿ ÿz-TestEditorHooks.test_editor_css_hooks_on_editc                 C   s8   | j  td| jjfd¡}|  |jd¡ |  |d¡ d S )NrK   rD   r   rI   rG   r#   r   r   r   Útest_editor_js_hooks_on_edit   s
    ÿz,TestEditorHooks.test_editor_js_hooks_on_editN)r6   r7   r8   r   rH   rJ   rL   rM   r   r   r   r   r:   m   s
   		r:   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)Z$WAGTAILADMIN_NOTIFICATION_FROM_EMAILc                 C   sv   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 )NrO   rP   rQ   rS   r   r\   rT   r   r   r   r   ÚBtest_send_fallback_to_wagtailadmin_notification_from_email_setting¤   s    zOTestSendMail.test_send_fallback_to_wagtailadmin_notification_from_email_settingúyetanothertest@email.com)ZDEFAULT_FROM_EMAILc                 C   sv   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 )NrO   rP   rQ   rS   r   r^   rT   r   r   r   r   Ú0test_send_fallback_to_default_from_email_setting¯   s    z=TestSendMail.test_send_fallback_to_default_from_email_settingc                 C   sv   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 )NrO   rP   rQ   rS   r   zwebmaster@localhostrT   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>)Zhtml_messagezTest TEXT subjectzmr.plain.text@email.comr<   r   )ra   z	text/htmlrS   N)	r   r    rU   r   rV   rW   ZalternativesrX   rY   )r   Zemail_messager   r   r   Útest_send_html_emailÄ   s0    ü
 ÿ ÿ
z!TestSendMail.test_send_html_emailc                 C   s”   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 )	NrO   rP   rQ   rR   úcc.test@email.com)ÚccrS   r   )
r   r    rU   r   rV   rW   rX   rY   rZ   rd   r   r   r   r   Útest_send_ccä   s    û	zTestSendMail.test_send_ccc                 C   s”   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 )	NrO   rP   rQ   rR   úbcc.test@email.com)ÚbccrS   r   )
r   r    rU   r   rV   rW   rX   rY   rZ   rg   r   r   r   r   Útest_send_bccõ   s    û	zTestSendMail.test_send_bccc                 C   s”   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 )	NrO   rP   rQ   rR   úreply_to.test@email.com)Úreply_torS   r   )
r   r    rU   r   rV   rW   rX   rY   rZ   rj   r   r   r   r   Útest_send_reply_to  s    û	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 )NrO   rP   rQ   rR   rc   rf   ri   )rd   rg   rj   rS   r   )r   r    rU   r   rV   rW   rX   rY   rZ   rd   rg   rj   r   r   r   r   Útest_send_all_extra_fields  s"    ùz'TestSendMail.test_send_all_extra_fieldsN)r6   r7   r8   r[   r   r]   r_   r`   rb   re   rh   rk   rl   r   r   r   r   rN   —   s   




 rN   c                   @   s<   e Z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)ÚnameZslugÚItalianÚitalianZIndianZindian)r   r   r?   Úcreater   r   r   r   r   r   .  s    zTestTagsAutocomplete.setUpc                 C   sX   | j  tdƒddi¡}|  |jd¡ |  |d d¡ t |j d¡¡}|  |dg¡ d S )	NÚwagtailadmin_tag_autocompleteÚtermro   r   úContent-Typeúapplication/jsonúutf-8rn   ©	r   r   r	   r    r!   ÚjsonÚloadsÚcontentÚdecode©r   r$   Údatar   r   r   Útest_tags_autocomplete4  s     ÿz+TestTagsAutocomplete.test_tags_autocompletec                 C   sX   | j  tdƒddi¡}|  |jd¡ |  |d d¡ t |j d¡¡}|  |dg¡ d S )	Nrt   ru   Úter   rv   rw   rx   rn   ry   r~   r   r   r   Ú$test_tags_autocomplete_partial_match?  s     ÿz9TestTagsAutocomplete.test_tags_autocomplete_partial_matchc                 C   sV   | j  tdƒddi¡}|  |jd¡ |  |d d¡ t |j d¡¡}|  |g ¡ d S )Nrt   ru   Zhellor   rv   rw   rx   ry   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 )Nrt   r   rv   rw   rx   ry   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 )NZ#wagtailadmin_tag_model_autocomplete)rB   ZrestauranttagrD   ru   Zitalr   rv   rw   rx   rq   ro   ry   r~   r   r   r   Ú#test_tags_autocomplete_custom_model]  s,     ÿü ÿüz8TestTagsAutocomplete.test_tags_autocomplete_custom_modelN)	r6   r7   r8   r   r€   r‚   rƒ   r„   r…   r   r   r   r   rm   -  s   rm   c                   @   s,   e Zd Zd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	   Zwsgi_requestÚrequestr#   r   r   r   r   {  s    zTestMenuItem.setUpc                 C   s*   t tdƒtdƒƒ}|  | | j¡d¡ d S )Nrn   r   T)r   Ú_r
   ZassertIsÚ	is_activer‡   ©r   Zmenuitemr   r   r   Ú#test_menuitem_reverse_lazy_url_pass€  s    z0TestMenuItem.test_menuitem_reverse_lazy_url_passc                 C   s(   t tdƒtdƒdd}|  |jd¡ d S )Nrn   r   zhighlight-item)Ú	classname)r   rˆ   r
   r    rŒ   rŠ   r   r   r   Útest_menuitem_with_classname„  s    ýz)TestMenuItem.test_menuitem_with_classnamec              	   C   s@   |   td¡ ttdƒtdƒdd}W 5 Q R X |  |jd¡ d S )NzLThe `classnames` kwarg for MenuItem is deprecated - use `classname` instead.rn   r   z	is-dimmed)Z
classnames)ZassertWarnsRegexr   r   rˆ   r
   r    rŒ   rŠ   r   r   r   Ú(test_menuitem_with_deprecated_classnamesŒ  s    þýz5TestMenuItem.test_menuitem_with_deprecated_classnamesN)r6   r7   r8   r   r‹   r   rŽ   r   r   r   r   r†   z  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 )	NZBobZMortimerro   r.   ©Z
first_nameÚ	last_namer0   r.   r2   Útestapp_bob_only_zoner   ©r3   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ÚReevesro   r.   r   r2   r’   r   )r3   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–   ro   r.   r   r2   r’   ZXMLHttpRequest)ZHTTP_X_REQUESTED_WITHi“  r“   r#   r   r   r   Útest_user_fails_test_ajax³  s       ÿ ÿz?TestUserPassesTestPermissionDecorator.test_user_fails_test_ajaxN)r6   r7   r8   Ú__doc__r”   r˜   r™   r   r   r   r   r   ™  s   

r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestUserHasAnyPagePermissionc                 C   s"   | j dddd}|  t|ƒ¡ d S )NÚ	superuserúadmin@example.comÚpr/   )r3   r4   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ž   r/   F)r3   r‰   ÚassertFalser   rŸ   r   r   r   Útest_inactive_superuserÇ  s      ÿz4TestUserHasAnyPagePermission.test_inactive_superuserc                 C   s<   | j dddd}tjjdd}|j |¡ |  t|ƒ¡ d S )NZeditorzed@example.comrž   r/   ZEditors©rp   ©Úcreate_userr   r?   r   ÚgroupsÚaddr4   r   ©r   r    Zeditorsr   r   r   Útest_editorÎ  s    z(TestUserHasAnyPagePermission.test_editorc                 C   s<   | j dddd}tjjdd}|j |¡ |  t|ƒ¡ d S )NZ	moderatorzmod@example.comrž   r/   Z
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 )NZplebzpleb@example.comrž   r/   ÚwagtailadminÚaccess_admin©Zcontent_type__app_labelÚcodename)r¦   Zuser_permissionsr¨   r   r?   r   r¢   r   rŸ   r   r   r   Útest_no_permissionsÜ  s     ÿÿz0TestUserHasAnyPagePermission.test_no_permissionsN)r6   r7   r8   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S )ÚTest404c              	   C   sN   |   ¡  | jdd0 | jjddd}|  |jd¡ |  |d¡ W 5 Q R X d S )NT©ZAPPEND_SLASHz/admin/sdfgdsfgdsfgsdf©Úfollowi”  zwagtailadmin/404.html)r   r   r   r   r    r!   ÚassertTemplateUsedr#   r   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/Z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)r6   r7   r8   r¶   r·   r   r   r   r   r±   æ  s   	r±   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestAdminURLAppendSlashc                 C   s   t jjdd| _d S r;   )r   r?   r   Ú	root_pager   r   r   r   r   ú  s    zTestAdminURLAppendSlash.setUpc              	   C   sŠ   |   ¡  | jddl | jjtdƒd d… dd}|  |jd¡ |  |d¡ |  tj	jdd	|j
d
 ¡ |  | j|j
d ¡ W 5 Q R X d S )NTr²   Zwagtailadmin_explore_rootéÿÿÿÿr³   r   z(wagtailadmin/pages/explorable_index.htmlrS   r=   Zparent_pageZpages)r   r   r   r   r	   r    r!   rµ   r   r?   Ú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)r6   r7   r8   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 )NZremove_stale_contenttypesF)Úinteractiver¬   r­   r®   )r   r4   r   r?   Ú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)r6   r7   r8   rÁ   r   r   r   r   r½     s   r½   ).rz   r9   Zdjango.confr   Zdjango.contrib.auth.modelsr   r   Zdjango.corer   Zdjango.core.managementr   Zdjango.testr   r   Zdjango.urlsr	   r
   Zdjango.utils.translationr   rˆ   Ztaggit.modelsr   Zwagtail.admin.authr   Zwagtail.admin.mailr   Zwagtail.admin.menur   Zwagtail.modelsr   Zwagtail.test.testapp.modelsr   Zwagtail.test.utilsr   Zwagtail.utils.deprecationr   r   r:   rN   rm   r†   r   r›   r±   r¸   r½   r   r   r   r   Ú<module>   s6   U* M'&