a
    Døg&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   úX/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/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$   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 )NZsnowmanu   â˜ƒ@thenorthpole.comÚpassword©ÚusernameÚemailr/   ©r1   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_MODELr6   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	   rA   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 )NrB   rC   rD   rE   r   ú-<script src="/path/to/my/custom.js"></script>rH   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:editrE   r   rG   rH   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 )NrL   rE   r   rJ   rH   r%   r   r   r   Útest_editor_js_hooks_on_edit   s
    ÿz,TestEditorHooks.test_editor_js_hooks_on_editN)r7   r8   r9   r   rI   rK   rM   rN   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 )NrP   rQ   rR   rT   r   r]   rU   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 )NrP   rQ   rR   rT   r   r_   rU   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 )NrP   rQ   rR   rT   r   zwebmaster@localhostrU   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   )rb   z	text/htmlrT   N)	r   r"   rV   r   rW   rX   ZalternativesrY   rZ   )r   Zemail_messager   r   r   Útest_send_html_emailÄ   s,    ü
ÿÿ
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 )	NrP   rQ   rR   rS   úcc.test@email.com)ÚccrT   r   )
r   r"   rV   r   rW   rX   rY   rZ   r[   re   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 )	NrP   rQ   rR   rS   úbcc.test@email.com)ÚbccrT   r   )
r   r"   rV   r   rW   rX   rY   rZ   r[   rh   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 )	NrP   rQ   rR   rS   úreply_to.test@email.com)Úreply_torT   r   )
r   r"   rV   r   rW   rX   rY   rZ   r[   rk   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 )NrP   rQ   rR   rS   rd   rg   rj   )re   rh   rk   rT   r   )r   r"   rV   r   rW   rX   rY   rZ   r[   re   rh   rk   r   r   r   r   Útest_send_all_extra_fields  s"    ùz'TestSendMail.test_send_all_extra_fieldsN)r7   r8   r9   r\   r   r^   r`   ra   rc   rf   ri   rl   rm   r   r   r   r   rO   —   s   




 rO   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©Ú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Útermrp   r   úContent-Typeúapplication/jsonúutf-8ro   ©	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 )	Nrv   rw   Úter   rx   ry   rz   ro   r{   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 )Nrv   rw   Zhellor   rx   ry   rz   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 )Nrv   r   rx   ry   rz   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 )NZ#wagtailadmin_tag_model_autocomplete)rC   ZrestauranttagrE   rw   Zitalr   rx   ry   rz   rs   rp   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-rq   r   )Ú.0Úir   r   r   Ú
<listcomp>z  ó    zETestTagsAutocomplete.test_tags_autocomplete_limit.<locals>.<listcomp>é   rv   rw   r   r   rx   ry   rz   é
   c                 S   s   | j S r   ©rr   )Útr   r   r   Ú<lambda>Š  r‹   zCTestTagsAutocomplete.test_tags_autocomplete_limit.<locals>.<lambda>)Úkeyc                 S   s   g | ]
}|j ‘qS r   rŽ   )rˆ   Útagr   r   r   rŠ   ‹  r‹   )Úranger   r@   Zbulk_creater    r!   r	   r"   r#   r|   r}   r~   r   rV   Úsorted)r   Útagsr&   r   Zsorted_tagsr   r   r   Útest_tags_autocomplete_limity  s    ÿz1TestTagsAutocomplete.test_tags_autocomplete_limitN)
r7   r8   r9   r   r‚   r„   r…   r†   r‡   r–   r   r   r   r   rn   -  s   rn   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	   Zwsgi_requestÚrequestr%   r   r   r   r     s    zTestMenuItem.setUpc                 C   s(   t tdƒtdƒdd}|  |jd¡ d S )Nro   r   zhighlight-item)Ú	classname)r   Ú_r
   r"   r™   ©r   Z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 s80    Y  |  |jd¡ d S )NzLThe `classnames` kwarg for MenuItem is deprecated - use `classname` instead.ro   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)r7   r8   r9   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 )	NZBobZMortimerrp   r/   ©Z
first_nameÚ	last_namer1   r/   r3   Útestapp_bob_only_zoner   ©r4   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ÚReevesrp   r/   rŸ   r3   r¡   r   )r4   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¥   rp   r/   rŸ   r3   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)r7   r8   r9   Ú__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Úpr0   )r4   r5   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­   r0   F)r4   Z	is_activeÚ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­   r0   ZEditorsrŽ   ©Úcreate_userr   r@   r!   ÚgroupsÚaddr5   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­   r0   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­   r0   Ú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)r7   r8   r9   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   sŽ   |   ¡  | jddf | jjddd}|  |jd¡ |  |d¡ |  |j¡}|  	| 
d¡¡ |  	| 
d¡¡ W d   ƒ n1 s€0    Y  d S )	NT©ZAPPEND_SLASHz/admin/sdfgdsfgdsfgsdf©Úfollowi”  zwagtailadmin/404.htmlÚscriptz[data-sprite])r   r   r    r!   r"   r#   ÚassertTemplateUsedZget_soupr~   r±   Úselect)r   r&   Z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/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)r7   r8   r9   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v | jjtdƒd d… dd}|  |jd¡ |  |d¡ |  tj	jdd	|j
d
 ¡ |  | j|j
d ¡ W d   ƒ n1 s0    Y  d S )NTrÀ   Zwagtailadmin_explore_rootéÿÿÿÿrÁ   r   z(wagtailadmin/pages/explorable_index.htmlrT   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)r7   r8   r9   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   r5   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)r7   r8   r9   rÑ   r   r   r   r   rÍ   "  s   rÍ   ).r|   r:   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;   rO   rn   r—   rž   rª   r¿   rÈ   rÍ   r   r   r   r   Ú<module>   s6   U* a'&