a
    DøgIø  ã                   @   sj  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 d d
lmZ d dlmZ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 d dl m!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, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d d lEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM d d!lNmOZO d d"lPmQZQ d d#lRmSZS G d$d%„ d%eƒZTG d&d'„ d'eOeƒZUG d(d)„ d)eUƒZVG d*d+„ d+eƒZWG d,d-„ d-eUƒZXG d.d/„ d/eUƒZYG d0d1„ d1eUƒZZG d2d3„ d3eUƒZ[G d4d5„ d5eOeƒZ\G d6d7„ d7eUƒZ]G d8d9„ d9e]ƒZ^G d:d;„ d;eUƒZ_G d<d=„ d=eUƒZ`G d>d?„ d?eUƒZaG d@dA„ dAeUƒZbG dBdC„ dCeUƒZcG dDdE„ dEeUƒZdG dFdG„ dGeUƒZeG dHdI„ dIeUƒZfG dJdK„ dKeUƒZgG dLdM„ dMeUƒZhG dNdO„ dOeQeUƒZiG dPdQ„ dQeUƒZjG dRdS„ dSeUƒZkdTS )Ué    )Údatetime)ÚBytesIO)Úmock)Úsettings)Úquote)Úget_permission_codename)Ú
Permission)ÚContentType)ÚImproperlyConfigured)Údate)ÚSimpleTestCaseÚTestCaseÚTransactionTestCaseÚoverride_settings)ÚNoReverseMatchÚresolveÚreverse)Únow)Úload_workbook)ÚAdminURLFinder)Ú
SearchForm)Ú
admin_menuÚsettings_menu)Úget_edit_handler)Úversioned_static)ÚExcelDateFormatter)ÚFieldBlockAdapter)Úget_dummy_request)Úget_document_model)Úget_test_document_file)Úget_image_model)Úget_test_image_file)ÚLocaleÚWorkflowÚWorkflowContentType)ÚSnippetChooserBlock)Úregister_snippet)ÚSnippetViewSet)ÚAdminSnippetChooser)ÚAdvertÚDraftStateModelÚFullFeaturedSnippetÚModeratedModelÚRevisableChildModelÚRevisableModelÚSnippetChooserModelÚVariousOnDeleteModel)ÚWagtailTestUtils)ÚAdminTemplateTestUtils)Úrender_timestampc                   @   s   e Zd Zdd„ ZdS )ÚTestIncorrectRegistrationc                 C   sX   |   t¡}ttƒ W d   ƒ n1 s(0    Y  t|jƒ}|  d|¡ |  d|¡ d S )NZModelViewSetz:must define a `model` attribute or pass a `model` argument)ÚassertRaisesr
   r&   r'   ÚstrÚ	exceptionÚassertIn)ÚselfÚcmÚmessage© r<   úb/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/snippets/tests/test_viewset.pyÚtest_no_model_set_or_passed2   s    &
þz5TestIncorrectRegistration.test_no_model_set_or_passedN)Ú__name__Ú
__module__Ú__qualname__r>   r<   r<   r<   r=   r4   1   s   r4   c                   @   s"   e Zd ZdZdd„ Zddd„ZdS )ÚBaseSnippetViewSetTestsNc                 C   s   |   ¡ | _d S ©N)ÚloginÚuser©r9   r<   r<   r=   ÚsetUpB   s    zBaseSnippetViewSetTests.setUpr<   c                 C   s   t | jj |¡|dS ©N©Úargs)r   ÚmodelÚsnippet_viewsetÚget_url_name©r9   Úurl_namerJ   r<   r<   r=   Úget_urlE   s    zBaseSnippetViewSetTests.get_url)r<   )r?   r@   rA   rK   rG   rP   r<   r<   r<   r=   rB   ?   s   rB   c                       s8   e Zd ZeZ‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  Z	S )	ÚTestCustomIconc                    sJ   t ƒ  ¡  | jjjdd| _| j ¡ | _| j ¡  d| j_	| j ¡ | _
d S )Nztest snippet with custom icon©Útextz'test snippet with custom icon (updated))ÚsuperrG   rK   ÚobjectsÚcreateÚobjectÚsave_revisionÚ
revision_1ÚpublishrS   Ú
revision_2rF   ©Ú	__class__r<   r=   rG   L   s    

zTestCustomIcon.setUpc                 C   s   t | jjƒ}dg dfdg dfd|gdfd|gdfd|gdfd|gdfd	|gdfd
|| jjgdfd|| jj| jjgdfd|| jjgdfg
}|D ]Ž\}}}| j|df | j |  	||¡¡}|  
|jd¡ |  
|jd d¡ | j|ddd |  |d|› ¡ W d   ƒ qŒ1 s0    Y  qŒd S )NÚlistzheaders/slim_header.htmlÚaddÚeditÚdeletezheader.htmlÚusageÚ	unpublishÚworkflow_historyZrevisions_revertZrevisions_compareZrevisions_unschedule)Ú	view_nameéÈ   Úheader_iconÚcogúicon icon-cogé   ©Úcountzwagtailadmin/shared/)r   rW   ÚpkrY   Úidr[   ÚsubTestÚclientÚgetrP   ÚassertEqualÚstatus_codeÚcontextÚassertContainsÚassertTemplateUsed)r9   rm   Zviewsre   rJ   ÚheaderÚresponser<   r<   r=   Útest_get_viewsT   s,    




ýòzTestCustomIcon.test_get_viewsc                 C   sr   | j  |  dt| jjƒg¡¡}|  |jd¡ |  |d¡ |  |j	d d¡ |  
|d¡ |  |d¡ |  |d¡ d S )NÚhistoryrf   z,wagtailadmin/shared/headers/slim_header.htmlrg   zicon icon-historyri   úwagtailadmin/shared/header.html)rp   rq   rP   r   rW   rm   rr   rs   rv   rt   ru   ÚassertNotContainsÚassertTemplateNotUsed©r9   rx   r<   r<   r=   Útest_get_historyn   s    þzTestCustomIcon.test_get_historyc                 C   sÂ   t j t| jƒ¡| _tj ¡ | _t	jj
| j| jd d| j_| j ¡  | j | j| j¡}| j |  dt| jjƒ|jg¡¡}|  |jd¡ |  |d¡ |  |jd d¡ |  |d¡ |  |d	¡ d S )
N)Úcontent_typeÚworkflowzEdited!Zworkflow_history_detailrf   r{   rg   rh   zicon icon-clipboard-listri   )r	   rU   Zget_for_modelÚtyperW   r€   r#   Úfirstr   r$   rV   rS   rX   ÚstartrE   rp   rq   rP   r   rm   rn   rr   rs   r}   rt   ru   )r9   Zworkflow_staterx   r<   r<   r=   Ú test_get_workflow_history_detail{   s&    þ
ÿÿz/TestCustomIcon.test_get_workflow_history_detail)
r?   r@   rA   r+   rK   rG   ry   r   r…   Ú__classcell__r<   r<   r\   r=   rQ   I   s
   rQ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSnippetChooserBlockWithIconc                 C   sh   t tƒ}| d¡ tƒ  |¡}|  |d d¡ |  |d t¡ |  |d jt¡ |  |d d d¡ d S )NZtest_snippetchooserblockr   rj   é   Úiconrh   )	r%   r+   Úset_namer   Újs_argsrr   ÚassertIsInstancer(   rK   )r9   Úblockr‹   r<   r<   r=   Ú
test_adapt“   s    
z*TestSnippetChooserBlockWithIcon.test_adaptc                 C   sH   t tdd}| ¡ \}}}|  |d¡ |  |tf¡ |  |ddi¡ d S )NF)Úrequiredz+wagtail.snippets.blocks.SnippetChooserBlockr   )r%   r+   Zdeconstructrr   )r9   r   ÚpathrJ   Úkwargsr<   r<   r=   Útest_deconstructŸ   s
    z0TestSnippetChooserBlockWithIcon.test_deconstructN)r?   r@   rA   rŽ   r’   r<   r<   r<   r=   r‡   ’   s   r‡   c                       sD   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z‡  Z	S )ÚTestSnippetChooserPanelWithIconc                    s    t ƒ  ¡  tƒ | _| j| j_d| _tjj| jd| _	t
jjtjjdd| j	d}tt
ƒ| _| j ¡ | _| j|d}| jj||| jd}dd„ |jD ƒd	 | _d S )
Nz)Test full-featured snippet with icon textrR   Úfoo©ÚadvertÚfull_featured©Úinstance©r™   ÚformÚrequestc                 S   s    g | ]}t |d dƒdkr|‘qS ©Ú
field_nameNr—   ©Úgetattr©Ú.0Zpanelr<   r<   r=   Ú
<listcomp>»   s   þz9TestSnippetChooserPanelWithIcon.setUp.<locals>.<listcomp>r   )rT   rG   r   rœ   rE   rS   r+   rU   rV   Úfull_featured_snippetr/   r)   r   Úedit_handlerZget_form_classÚ
form_classÚget_bound_panelÚchildrenÚobject_chooser_panel)r9   Útest_snippetr›   r¥   r\   r<   r=   rG   ©   s(    

þ
ÿþüz%TestSnippetChooserPanelWithIcon.setUpc                 C   sL   | j  ¡ }|  | j|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )NúChoose full-featured snippetú$Choose another full-featured snippetúicon icon-cog iconúicon-snippet)r©   Úrender_htmlr8   rS   ÚassertNotIn)r9   Ú
field_htmlr<   r<   r=   Útest_render_htmlÁ   s    
z0TestSnippetChooserPanelWithIcon.test_render_htmlc                 C   sv   t ƒ }| j|d}| jj||| jd}dd„ |jD ƒd }| ¡ }|  d|¡ |  d|¡ |  d|¡ |  d	|¡ d S )
Nr˜   rš   c                 S   s    g | ]}t |d dƒdkr|‘qS r   rŸ   r¡   r<   r<   r=   r£   Ò   s   þzNTestSnippetChooserPanelWithIcon.test_render_as_empty_field.<locals>.<listcomp>r   r«   r¬   r­   r®   )	r/   r¦   r¥   r§   rœ   r¨   r¯   r8   r°   )r9   rª   r›   r¥   Zsnippet_chooser_panelr±   r<   r<   r=   Útest_render_as_empty_fieldË   s    ÿþüz:TestSnippetChooserPanelWithIcon.test_render_as_empty_fieldc                 C   s´   t jj}| j t| d¡ƒ¡}|  |jd¡ |  |j	d d¡ | j
|ddd |  |j	d d¡ |j	 ¡ D ]}d|v rj|  d	|j	| ¡ qj| ¡ }|  |d
 ¡}|  | d¡¡ d S )NÚchooserf   rg   rh   ri   rj   rk   r‰   ÚsnippetÚhtmlz&form[data-chooser-modal-creation-form])r+   rL   Úchooser_viewsetrp   rq   r   rM   rr   rs   rt   ru   Úkeysr°   ÚjsonÚget_soupÚ
assertTrueÚ
select_one)r9   r·   rx   ÚkeyÚresponse_jsonÚsoupr<   r<   r=   Útest_chooser_popupà   s    z2TestSnippetChooserPanelWithIcon.test_chooser_popupc                 C   sv   t jj}| j t| d¡| jjgd¡}| 	¡ }|  
|d d¡ |  
|d d t| jjƒ¡ |  
|d d | j¡ d S )NÚchosenrI   ÚstepÚresultrn   Ústring)r+   rL   r·   rp   rq   r   rM   r¤   rm   r¹   rr   r6   rS   ©r9   r·   rx   r¾   r<   r<   r=   Útest_chosenò   s    þÿÿz+TestSnippetChooserPanelWithIcon.test_chosenc                 C   sT   t jj}| j t| d¡ƒddi¡}| ¡ }|  |d d¡ |  |d d d¡ d S )NrV   rS   zNew snippetrÂ   rÁ   rÃ   rÄ   )	r+   rL   r·   rp   Úpostr   rM   r¹   rr   rÅ   r<   r<   r=   Útest_create_from_chooser  s    ÿþz8TestSnippetChooserPanelWithIcon.test_create_from_chooser)
r?   r@   rA   rG   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d„ Zd	S )
ÚTestAdminURLsc                 C   s^   t jjdd}|j}|  | ¡ d¡ |  | d¡d¡ |  | ¡ d¡ |  |j d¡d¡ d S )	Nr”   rR   Zwagtailsnippets_tests_advertr`   z!wagtailsnippets_tests_advert:editZ#wagtailsnippetchoosers_tests_advertr´   z*wagtailsnippetchoosers_tests_advert:choose)	r)   rU   rV   rL   rr   Úget_admin_url_namespacerM   Úget_chooser_admin_url_namespacer·   ©r9   rµ   Úviewsetr<   r<   r=   Útest_default_url_namespace  s$    þþþ
þz(TestAdminURLs.test_default_url_namespacec                 C   s¢   t jjdd}|j}t|jƒ}d|› d}d}|  | ¡ d¡ |  t| 	d¡|gd|¡ t
| jƒ}|  | |¡|¡ |  | ¡ d	¡ |  t|j 	d
¡ƒ|¡ d S )Nr”   rR   z"/admin/snippets/tests/advert/edit/ú/z$/admin/snippets/choose/tests/advert/zsnippets/tests/advertr`   rI   zsnippets/choose/tests/advertr´   )r)   rU   rV   rL   r   rm   rr   Úget_admin_base_pathr   rM   r   rE   Úget_edit_urlÚget_chooser_admin_base_pathr·   ©r9   rµ   rÍ   rm   Zexpected_urlZexpected_choose_urlZ
url_finderr<   r<   r=   Útest_default_admin_base_path'  s"    

þþz*TestAdminURLs.test_default_admin_base_pathc                 C   s^   t jjdd}|j}|  | ¡ d¡ |  | d¡d¡ |  | ¡ d¡ |  |j d¡d¡ d S )	NÚ
customisedrR   Zsome_namespacer`   zsome_namespace:editZmy_chooser_namespacer´   zmy_chooser_namespace:choose)	r+   rU   rV   rL   rr   rÊ   rM   rË   r·   rÌ   r<   r<   r=   Útest_custom_url_namespace@  s    þ
þz'TestAdminURLs.test_custom_url_namespacec                 C   s¢   t jjdd}|j}t|jƒ}d|› d}d}|  | ¡ d¡ |  t| 	d¡|gd|¡ t
| jƒ}|  | |¡|¡ |  | ¡ d	¡ |  t|j 	d
¡ƒ|¡ d S )NrÕ   rR   z"/admin/deep/within/the/admin/edit/rÏ   z/admin/choose/wisely/zdeep/within/the/adminr`   rI   zchoose/wiselyr´   )r+   rU   rV   rL   r   rm   rr   rÐ   r   rM   r   rE   rÑ   rÒ   r·   rÓ   r<   r<   r=   Útest_custom_admin_base_pathR  s"    

þþz)TestAdminURLs.test_custom_admin_base_pathN)r?   r@   rA   rÎ   rÔ   rÖ   r×   r<   r<   r<   r=   rÉ     s   rÉ   c                   @   s8   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestPaginationc                    sL   t  ¡ ‰ ‡ fdd„tdƒD ƒ}tj |¡ dd„ tdƒD ƒ}tj |¡ d S )Nc                    s   g | ]}t d |› ˆ d‘qS )úSnippet ©rS   Úlocale)r+   ©r¢   Úi©Údefault_localer<   r=   r£   o  s   ÿz0TestPagination.setUpTestData.<locals>.<listcomp>é    c                 S   s   g | ]}t d |› d‘qS )rÙ   rR   )r)   rÜ   r<   r<   r=   r£   t  ó    )r"   Úget_defaultÚranger+   rU   Úbulk_creater)   )ÚclsrU   r<   rÞ   r=   ÚsetUpTestDatal  s    
þzTestPagination.setUpTestDatac                 C   s^   t tj d¡ƒ}| j |¡}|  tj ¡  	¡ d¡ |  
|d¡ |  
|d¡ |  
||d ¡ d S )Nr^   rà   zPage 1 of 2ÚNextú?p=2)r   r)   rL   rM   rp   rq   rr   rU   Úallrl   ru   ©r9   Úlist_urlrx   r<   r<   r=   Útest_default_list_paginationw  s    z+TestPagination.test_default_list_paginationc                 C   s^   t tj d¡ƒ}| j |¡}|  tj ¡  	¡ d¡ |  
|d¡ |  
|d¡ |  
||d ¡ d S )Nr^   rà   zPage 1 of 7rç   rè   )r   r+   rL   rM   rp   rq   rr   rU   ré   rl   ru   rê   r<   r<   r=   Útest_custom_list_pagination  s    z*TestPagination.test_custom_list_paginationc                 C   sr   t jj}t| d¡ƒ}t| d¡ƒ}| j |¡}|  t j 	¡  
¡ d¡ |  |d¡ |  |d¡ |  ||d ¡ d S )Nr´   Úchoose_resultsrà   zPage 1 of 4rç   rè   )r)   rL   r·   r   rM   rp   rq   rr   rU   ré   rl   ru   ©r9   r·   Z
choose_urlZchoose_results_urlrx   r<   r<   r=   Útest_default_chooser_pagination‹  s    z.TestPagination.test_default_chooser_paginationc                 C   sr   t jj}t| d¡ƒ}t| d¡ƒ}| j |¡}|  t j 	¡  
¡ d¡ |  |d¡ |  |d¡ |  ||d ¡ d S )Nr´   rî   rà   zPage 1 of 3rç   rè   )r+   rL   r·   r   rM   rp   rq   rr   rU   ré   rl   ru   rï   r<   r<   r=   Útest_custom_chooser_pagination—  s    z-TestPagination.test_custom_chooser_paginationN)	r?   r@   rA   Úclassmethodræ   rì   rí   rð   rñ   r<   r<   r<   r=   rØ   k  s   



rØ   c                   @   sT   e Zd ZeZi f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 )ÚTestFilterSetClassc                 C   s   | j  |  d¡|¡S ©Nr^   ©rp   rq   rP   ©r9   Úparamsr<   r<   r=   rq   §  s    zTestFilterSetClass.getc                 C   s$   t jjddd t jjddd d S ©NúNasi goreng from IndonesiaÚID©rS   Úcountry_codeúFish and chips from the UKÚUK©r+   rU   rV   rF   r<   r<   r=   Úcreate_test_snippetsª  s    ÿÿz'TestFilterSetClass.create_test_snippetsc                 C   s2   |   ¡ }|j ¡ }tdƒ}|  d|› d|¡ d S ©Nz$wagtailadmin/js/date-time-chooser.jsz<script src="z"></script>©rq   ÚcontentÚdecoder   ZassertTagInHTML©r9   rx   r¶   Zdatetime_jsr<   r<   r=   Ú#test_get_include_filters_form_media²  s    
z6TestFilterSetClass.test_get_include_filters_form_mediac                 C   s(   |   ¡ }|  |d¡ | j|ddd d S )Nz/There are no full-featured snippets to display.úz<label for="id_country_code_0"><input type="radio" name="country_code" value="" id="id_country_code_0" checked>All</label>T©r¶   ©rq   ru   r~   r<   r<   r=   Útest_unfiltered_no_resultsº  s    ýz-TestFilterSetClass.test_unfiltered_no_resultsc                 C   sH   |   ¡  |  ¡ }|  |d¡ |  |d¡ |  |d¡ | j|ddd d S )Nrù   rý   úThere are 2 matchesr  Tr  ©r   rq   ru   r|   r~   r<   r<   r=   Útest_unfiltered_with_resultsÃ  s    ýz/TestFilterSetClass.test_unfiltered_with_resultsc                 C   sN   |   ¡  |  ddi¡}|  |d¡ |  |d¡ |  |d¡ | j|ddd d S )	Nrü   Ú rù   rý   r  r  Tr  r  r~   r<   r<   r=   Útest_empty_filter_with_resultsÏ  s    ýz1TestFilterSetClass.test_empty_filter_with_resultsc                 C   s    |   ¡  |  ddi¡}|  |d¡ | j|ddd |  |j¡}| d¡}|  |¡ | d¡}|  |¡ |j d	¡ d
d¡\}}|  	||  
d¡¡ |  d|¡ d S )Nrü   ZPHú*No full-featured snippets match your queryz„<label for="id_country_code_2"><input type="radio" name="country_code" value="PH" id="id_country_code_2" checked>Philippines</label>Tr  ú.w-active-filtersú.w-pill__removeúdata-w-swap-src-valueú?rj   Úlist_resultszcountry_code=PH©r   rq   ru   rº   r  r¼   ÚassertIsNotNoneÚattrsÚsplitrr   rP   r°   ©r9   rx   r¿   Zactive_filtersÚclearÚurlr÷   r<   r<   r=   Útest_filtered_no_resultsÛ  s     ý



z+TestFilterSetClass.test_filtered_no_resultsc                 C   s¬   |   ¡  |  ddi¡}|  |d¡ |  |d¡ | j|ddd |  |j¡}| d¡}|  |¡ | d	¡}|  |¡ |j d
¡ dd¡\}}|  	||  
d¡¡ |  d|¡ d S )Nrü   rú   rù   úThere is 1 matchú‚<label for="id_country_code_1"><input type="radio" name="country_code" value="ID" id="id_country_code_1" checked>Indonesia</label>Tr  r  r  r  r  rj   r  zcountry_code=IDr  r  r<   r<   r=   Útest_filtered_with_resultsî  s"    ý



z-TestFilterSetClass.test_filtered_with_resultsN)r?   r@   rA   r+   rK   rq   r   r  r
  r  r  r  r   r<   r<   r<   r=   ró   ¤  s   	ró   c                   @   sH   e Zd ZdgZdd„ Zddd„Zi fdd„Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestFilterSetClassSearchztest_empty.jsonc                 C   s   |   ¡  d S rC   )rD   rF   r<   r<   r=   rG     s    zTestFilterSetClassSearch.setUpr<   c                 C   s   t tj |¡|dS rH   )r   r+   rL   rM   rN   r<   r<   r=   rP   	  s    ÿz TestFilterSetClassSearch.get_urlc                 C   s   | j  |  d¡|¡S rô   rõ   rö   r<   r<   r=   rq     s    zTestFilterSetClassSearch.getc                 C   s$   t jjddd t jjddd d S rø   rÿ   rF   r<   r<   r=   r     s    ÿÿz-TestFilterSetClassSearch.create_test_snippetsc                 C   s8   |   ¡  |  dddœ¡}|  |d¡ | j|ddd d S )Nrú   Úchips©rü   Úqr  r  Tr  ©r   rq   ru   r~   r<   r<   r=   Ú!test_filtered_searched_no_results  s    ýz:TestFilterSetClassSearch.test_filtered_searched_no_resultsc                 C   sD   |   ¡  |  dddœ¡}|  |d¡ |  |d¡ | j|ddd d S )	Nrþ   r"  r#  rý   r  z‡<label for="id_country_code_3"><input type="radio" name="country_code" value="UK" id="id_country_code_3" checked>United Kingdom</label>Tr  r%  r~   r<   r<   r=   Ú#test_filtered_searched_with_results#  s    ýz<TestFilterSetClassSearch.test_filtered_searched_with_resultsN)r<   )
r?   r@   rA   ZfixturesrG   rP   rq   r   r&  r'  r<   r<   r<   r=   r!    s   

r!  c                       sd   e Zd ZeZ‡ fdd„Zi fdd„Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Z‡  ZS )ÚTestListFilterWithListc                    s"   t ƒ  ¡  tƒ | _| j ¡ | _d S rC   )rT   rG   r   r   Ú	isoformatÚdate_strrF   r\   r<   r=   rG   2  s    
zTestListFilterWithList.setUpc                 C   s   | j  |  d¡|¡S rô   rõ   rö   r<   r<   r=   rq   7  s    zTestListFilterWithList.getc                 C   s(   | j jjdd | j jjd| jd d S )NúThe first created objectrR   úA second one after that)rS   Úfirst_published_at)rK   rU   rV   r   rF   r<   r<   r=   r   :  s
    þz+TestListFilterWithList.create_test_snippetsc                 C   s2   |   ¡ }|j ¡ }tdƒ}|  d|› d|¡ d S r  r  r  r<   r<   r=   r  A  s    
z:TestListFilterWithList.test_get_include_filters_form_mediac                 C   sZ   |   ¡ }|  d¡}| j|d| jjj› d|› ddd | j|ddd | j|ddd d S )	Nr_   z<p>There are no z* to display.
            Why not <a href="z">add one</a>?</p>Tr  úu<label class="w-field__label" for="id_first_published_at" id="id_first_published_at-label">First published at</label>ú[<input type="text" name="first_published_at" autocomplete="off" id="id_first_published_at">)rq   rP   ru   rK   Ú_metaÚverbose_name_plural)r9   rx   Úadd_urlr<   r<   r=   r
  I  s&    
ÿüýýz1TestListFilterWithList.test_unfiltered_no_resultsc                 C   sX   |   ¡  |  ¡ }|  |d¡ |  |d¡ |  |d¡ | j|ddd | j|ddd d S )Nr+  r,  r  r.  Tr  r/  r  r~   r<   r<   r=   r  ]  s    ýýz3TestListFilterWithList.test_unfiltered_with_resultsc                 C   s^   |   ¡  |  ddi¡}|  |d¡ |  |d¡ |  |d¡ | j|ddd | j|d	dd d S )
Nr-  r  r+  r,  r  r.  Tr  zd<input type="text" name="first_published_at" value="" autocomplete="off" id="id_first_published_at">r  r~   r<   r<   r=   r  n  s    ýýz5TestListFilterWithList.test_empty_filter_with_resultsc                 C   sT   |   ¡  |  ddi¡}|  |d| jjj› d¡ | j|ddd | j|ddd d S )	Nr-  z
1970-01-01zNo z match your queryr.  Tr  zn<input type="text" name="first_published_at" value="1970-01-01" autocomplete="off" id="id_first_published_at">)r   rq   ru   rK   r0  r1  r~   r<   r<   r=   r    s     þýýz/TestListFilterWithList.test_filtered_no_resultsc                 C   s^   |   ¡  |  d| ji¡}|  |d¡ |  |d¡ | j|ddd | j|d| j› ddd d S )	Nr-  r,  r  r.  Tr  z4<input type="text" name="first_published_at" value="z0" autocomplete="off" id="id_first_published_at">)r   rq   r*  ru   r~   r<   r<   r=   r   ‘  s    ýýz1TestListFilterWithList.test_filtered_with_results)r?   r@   rA   r*   rK   rG   rq   r   r  r
  r  r  r  r   r†   r<   r<   r\   r=   r(  /  s   r(  c                   @   s   e Zd ZeZdd„ ZdS )ÚTestListFilterWithDictc                 C   sR   |   ¡  |  ddi¡}|  |d¡ |  |d¡ | j|ddd | j|ddd d S )	NZtext__containsz
second oner,  r  zh<label class="w-field__label" for="id_text__contains" id="id_text__contains-label">Text contains</label>Tr  zS<input type="text" name="text__contains" value="second one" id="id_text__contains">r%  r~   r<   r<   r=   Ú#test_filtered_contains_with_results¥  s    ýýz:TestListFilterWithDict.test_filtered_contains_with_resultsN)r?   r@   rA   r,   rK   r4  r<   r<   r<   r=   r3  ¢  s   r3  c                   @   s@   e Zd ZeZedd„ ƒZi fdd„Zdd„ Zdd„ Z	d	d
„ Z
dS )ÚTestListViewWithCustomColumnsc                 C   s(   | j jjddd | j jjddd d S )NzFrom Indonesiarú   rû   zFrom the UKrþ   )rK   rU   rV   ©rå   r<   r<   r=   ræ   ¹  s    z+TestListViewWithCustomColumns.setUpTestDatac                 C   s   | j  |  d¡|¡S rô   rõ   rö   r<   r<   r=   rq   ¾  s    z!TestListViewWithCustomColumns.getc                 C   s¨   |   ¡ }|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  d¡}|d	 }| j||d
d |  |j¡}| d¡}|  t|ƒd¡ d S )NÚTextúCountry codeúCustom FOO columnZUpdatedz
Modulo twoZTristateúFoo UKr^   z?ordering=country_coderˆ   rk   ú#listing-results table thé   )rq   ru   rP   rº   r  Úselectrr   Úlen)r9   rx   rë   Zsort_country_code_urlr¿   Zheadingsr<   r<   r=   Útest_custom_columnsÁ  s    

z1TestListViewWithCustomColumns.test_custom_columnsc                 C   s   |   ¡ }| j|dddd d S )Nz
<td>0</td>Trj   ©r¶   rl   r	  r~   r<   r<   r=   Útest_falsy_valueÙ  s    z.TestListViewWithCustomColumns.test_falsy_valuec                 C   sR   | j jjdd |  ¡ }| j|dddd | j|dddd | j|dddd d S )	NzAnother onerR   a  
            <td>
                <svg class="icon icon-success default w-text-positive-100" aria-hidden="true">
                    <use href="#icon-success"></use>
                </svg>
                <span class="w-sr-only">True</span>
            </td>
            Trj   r@  a  
            <td>
                <svg class="icon icon-error default w-text-critical-100" aria-hidden="true">
                    <use href="#icon-error"></use>
                </svg>
                <span class="w-sr-only">False</span>
            </td>
            zõ
            <td>
                <svg class="icon icon-help default" aria-hidden="true">
                    <use href="#icon-help"></use>
                </svg>
                <span class="w-sr-only">None</span>
            </td>
            )rK   rU   rV   rq   ru   r~   r<   r<   r=   Útest_boolean_columnÞ  s(    õõõz1TestListViewWithCustomColumns.test_boolean_columnN)r?   r@   rA   r+   rK   rò   ræ   rq   r?  rA  rB  r<   r<   r<   r=   r5  ¶  s   
r5  c                       s8   e Zd ZeZ‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  Z	S )	ÚTestRelatedFieldListDisplayc                    s4   t ƒ  ¡  d}tjj|dd| _tjjdd| _d S )Nz!https://example.com/free_exampleszFree Examples)r  rS   zroyale with cheeserR   )rT   rG   r)   rU   rV   r–   r+   Úffs)r9   r  r\   r<   r=   rG     s    
z!TestRelatedFieldListDisplay.setUpc                 C   sT   | j jj| jd| _| j |  d¡¡}|  |j	d¡ |  
|d¡ | j
|ddd d S )N)r–   r^   rf   úChosen snippet textz	<td></td>Tr  )rK   rU   rV   r–   Zno_ffs_chooserrp   rq   rP   rr   rs   ru   r~   r<   r<   r=   Útest_empty_foreignkey  s
    z1TestRelatedFieldListDisplay.test_empty_foreignkeyc                 C   sx   | j jj| j| jd| _| j |  d¡¡}|  	|j
d¡ |  |j¡}dd„ | d¡D ƒ}|  d|¡ | j|dd	d
 d S )Nr•   r^   rf   c                 S   s   g | ]}|j d d‘qS )T)Ústrip)Zget_text)r¢   rw   r<   r<   r=   r£     s   ÿzJTestRelatedFieldListDisplay.test_single_level_relation.<locals>.<listcomp>r;  rE  z<td>royale with cheese</td>Tr  )rK   rU   rV   r–   rD  Úscmrp   rq   rP   rr   rs   rº   r  r=  r8   ru   )r9   rx   r¿   Úheadersr<   r<   r=   Útest_single_level_relation  s    þz6TestRelatedFieldListDisplay.test_single_level_relationc                 C   st   | j jj| j| jd| _| j ¡ }t|jƒ}| j	 
|  d¡¡}|  |jd¡ |  |d¡ | j|d|› ddd d S )	Nr•   r^   rf   zLatest revision created atz<td>z</td>Tr  )rK   rU   rV   r–   rD  rH  rX   r3   Z
created_atrp   rq   rP   rr   rs   ru   )r9   Zdummy_revisionÚ	timestamprx   r<   r<   r=   Útest_multi_level_relation&  s    

z5TestRelatedFieldListDisplay.test_multi_level_relation)
r?   r@   rA   r/   rK   rG   rF  rJ  rL  r†   r<   r<   r\   r=   rC  
  s
   rC  c                   @   s4   e Zd ZeZedd„ ƒZdd„ Zdd„ Zdd„ Z	d	S )
ÚTestListExportc                 C   sX   | j jjddd d| _tjr$d| _| j jjdd| jdd	}| ¡  |j| _|j| _d S )
Nú
Pot Noodlerþ   rû   z2023-07-01T13:12:11.100z2023-07-01T13:12:11.100ZÚIndomierú   rj   )rS   rü   r-  Zsome_number)rK   rU   rV   r-  r   ZUSE_TZZrefresh_from_dbÚ	some_date)rå   Úobjr<   r<   r=   ræ   3  s    üzTestListExport.setUpTestDatac                 C   sZ   | j  |  d¡¡}|  |d¡ |  ||  d¡d ¡ |  |d¡ |  ||  d¡d ¡ d S )Nr^   zDownload CSVz?export=csvzDownload XLSXz?export=xlsx)rp   rq   rP   ru   r~   r<   r<   r=   Ú(test_get_not_export_shows_export_buttonsF  s
    z7TestListExport.test_get_not_export_shows_export_buttonsc              	   C   sª   | j  |  d¡ddi¡}|  |jd¡ |  | d¡d¡ | ¡  ¡  d¡}|  |d d	¡ |  |d
 d| j 	¡ › d| j
j	dd› d¡ |  |d d| j 	¡ › d¡ d S )Nr^   ÚexportÚcsvrf   úContent-Dispositionz4attachment; filename="all-fullfeatured-snippets.csv"Ú
r   zMText,Country code,Custom FOO column,Some date,Some number,First published atrj   zIndomie,ID,Foo ID,z,1,ú )Úsepúrˆ   zPot Noodle,UK,Foo UK,z,0,)rp   rq   rP   rr   rs   Úgetvaluer  r  rP  r)  r-  )r9   rx   Z
data_linesr<   r<   r=   Útest_csv_exportM  s&    þþ þþzTestListExport.test_csv_exportc                 C   sì   | j  |  d¡ddi¡}|  |jd¡ |  | d¡d¡ | ¡ }tt|ƒdj}dd	„ |j	D ƒ}|  |d
 g d¢¡ |  |d ddd| j
dtdddddddƒg¡ |  |d ddd| j
d
d g¡ |  t|ƒd¡ |  |d jtƒ  ¡ ¡ d S )Nr^   rS  Zxlsxrf   rU  z5attachment; filename="all-fullfeatured-snippets.xlsx")Úfilenamec                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]
}|j ‘qS r<   )Úvalue)r¢   Úcellr<   r<   r=   r£   o  rá   z>TestListExport.test_xlsx_export.<locals>.<listcomp>.<listcomp>r<   )r¢   Úrowr<   r<   r=   r£   o  rá   z3TestListExport.test_xlsx_export.<locals>.<listcomp>r   )r7  r8  r9  z	Some datezSome numberzFirst published atrj   rO  rú   zFoo IDiç  r<  é   é   é   i † rˆ   rN  rþ   r:  é   ZF2)rp   rq   rP   rr   rs   rZ  r   r   ÚactiveÚrowsrP  r   r>  Znumber_formatr   )r9   rx   Zworkbook_dataZ	worksheetZ
cell_arrayr<   r<   r=   Útest_xlsx_exportd  s:    þþúþþzTestListExport.test_xlsx_exportN)
r?   r@   rA   r+   rK   rò   ræ   rR  r[  rf  r<   r<   r<   r=   rM  0  s   
rM  c                   @   s$   e Zd ZeZedd„ ƒZdd„ ZdS )ÚTestCustomTemplatesc                 C   s   | j jjdd| _d S )NzSome snippetrR   ©rK   rU   rV   rW   r6  r<   r<   r=   ræ   ’  s    z!TestCustomTemplates.setUpTestDatac           	   	   C   sæ   t | jjƒ}dg dgfd|gdgfd|gdgfd|gdgfd	g d
dgfdg dgfd|gdgfdœ}| ¡ D ]v\}\}}}| j|dL | j | j||d¡}|D ]}|  ||¡ q | j	|ddd W d   ƒ qj1 sÖ0    Y  qjd S )Nr_   z>wagtailsnippets/snippets/tests/fullfeaturedsnippet/create.htmlr`   z(wagtailsnippets/snippets/tests/edit.htmlra   z$wagtailsnippets/snippets/delete.htmlrc   zAwagtailsnippets/snippets/tests/fullfeaturedsnippet/unpublish.htmlr^   z$tests/fullfeaturedsnippet_index.htmlzEwagtailsnippets/snippets/tests/fullfeaturedsnippet/index_results.htmlr  rz   ztests/snippet_history.html)zwith app label and model namezwith app labelz without app label and model namez,override a view that uses a generic templatezUoverride with index_template_name and index results template with namespaced templatez8override index results template with namespaced templatez"override with get_history_template)ÚcaserI   z<p>An added paragraph</p>Tr  )
r   rW   rm   Úitemsro   rp   rq   rP   rv   ru   )	r9   rm   Zcasesri  re   rJ   Ztemplate_namesrx   Ztemplate_namer<   r<   r=   Útest_template_lookups–  sX    ÿýÿýÿýÿýþýÿû
ÿýÒ6z)TestCustomTemplates.test_template_lookupsN)r?   r@   rA   r+   rK   rò   ræ   rk  r<   r<   r<   r=   rg    s   
rg  c                   @   s$   e Zd ZeZedd„ ƒZdd„ ZdS )ÚTestCustomQuerySetc                 C   sH   t  ¡ }| jdd|d| jdd|d| jdd|dg}| jj |¡ d S )NÚ
FooSnippetrú   )rS   rü   rÛ   Ú
BarSnippetrþ   ú[HIDDEN]Snippet©r"   râ   rK   rU   rä   ©rå   rß   rU   r<   r<   r=   ræ   Ù  s    ýz TestCustomQuerySet.setUpTestDatac                 C   s@   | j  |  d¡ddi¡}|  |d¡ |  |d¡ |  |d¡ d S )Nr^   rü   rú   rm  rn  ro  )rp   rq   rP   ru   r|   r~   r<   r<   r=   Útest_index_viewã  s    z"TestCustomQuerySet.test_index_viewN)r?   r@   rA   r+   rK   rò   ræ   rr  r<   r<   r<   r=   rl  Ö  s   
	rl  c                   @   s$   e Zd ZeZedd„ ƒZdd„ ZdS )ÚTestCustomOrderingc                 C   sN   t  ¡ }| jd|d| jd|d| jd|d| jd|dg}| jj |¡ d S )NÚ
CCCCCCCCCCrÚ   Ú
AAAAAAAAAAÚ
DDDDDDDDDDÚ
BBBBBBBBBBrp  rq  r<   r<   r=   ræ   í  s    üz TestCustomOrdering.setUpTestDatac                 C   sF   | j  |  d¡¡}|  | jjj¡ |  dd„ |jd D ƒg d¢¡ d S )Nr^   c                 S   s   g | ]
}|j ‘qS r<   rR   )r¢   rQ  r<   r<   r=   r£   þ  rá   z<TestCustomOrdering.test_index_view_order.<locals>.<listcomp>Úpage_obj)ru  rw  rt  rv  )	rp   rq   rP   ZassertFalserK   r0  Zorderingrr   rt   r~   r<   r<   r=   Útest_index_view_orderø  s    þz(TestCustomOrdering.test_index_view_orderN)r?   r@   rA   r+   rK   rò   ræ   ry  r<   r<   r<   r=   rs  ê  s   

rs  c                   @   sR   e Zd ZeZedd„ ƒZi dfdd„Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ ZdS )ÚTestDjangoORMSearchBackendc                 C   s:   | j jjdd| _| j jjdd| _| j jjdd| _d S )NzWagtail is a Django-based CMSrR   z&Django is a Python-based web frameworkz)Python is a programming-bas, uh, language)rK   rU   rV   rƒ   ÚsecondÚthirdr6  r<   r<   r=   ræ     s    ÿÿÿz(TestDjangoORMSearchBackend.setUpTestDatar^   c                 C   s   | j  |  |¡|¡S rC   rõ   )r9   r÷   rO   r<   r<   r=   rq     s    zTestDjangoORMSearchBackend.getc                 C   sV   |   ¡ }|  |jd¡ |  |d¡ |  t|jd jƒ| j| j	| j
g¡ |  |d¡ d S )Nrf   ú#wagtailsnippets/snippets/index.htmlrx  úThis field is required.©rq   rr   rs   rv   ÚassertCountEqualr^   rt   Úobject_listrƒ   r{  r|  r|   r~   r<   r<   r=   Útest_simple  s    þz&TestDjangoORMSearchBackend.test_simplec                 C   s\   |   ddi¡}|  |jd¡ |  |d¡ |  t|jd jƒ| j| j	| j
g¡ |  |d¡ d S )Nr$  r  rf   r}  rx  r~  r  r~   r<   r<   r=   Útest_empty_q(  s    þz'TestDjangoORMSearchBackend.test_empty_qc                 C   s   |   |  ¡ jd t¡ d S )NZsearch_form)rŒ   rq   rt   r   rF   r<   r<   r=   Útest_is_searchable6  s    z-TestDjangoORMSearchBackend.test_is_searchablec                 C   s@   |   ddi¡}|  |jd¡ |  t|jd jƒ| j| jg¡ d S )Nr$  ZDjangorf   rx  )	rq   rr   rs   r€  r^   rt   r  rƒ   r{  r~   r<   r<   r=   Útest_search_index_view9  s    
þz1TestDjangoORMSearchBackend.test_search_index_viewc                 C   sB   | j ddidd}|  |jd¡ |  t|jd ƒ| j| jg¡ d S )Nr$  ÚPythonr  )rO   rf   r  )rq   rr   rs   r€  r^   rt   r{  r|  r~   r<   r<   r=   Útest_search_index_results_viewC  s    
þz9TestDjangoORMSearchBackend.test_search_index_results_viewN)r?   r@   rA   r*   rK   rò   ræ   rq   r‚  rƒ  r„  r…  r‡  r<   r<   r<   r=   rz    s   

rz  c                       sL   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )ÚTestMenuItemRegistrationc                    s    t ƒ  ¡  tƒ | _| j| j_d S rC   )rT   rG   r   rœ   rE   rF   r\   r<   r=   rG   O  s    
zTestMenuItemRegistration.setUpc                 C   s\   t | _t | j¡}|d }|  |jd¡ |  |jd¡ |  |jd¡ |  |j	|  
d¡¡ d S )NéÿÿÿÿÚfullfeaturedzFull-Featured MenuItemrh   r^   )r+   rK   r   Úrender_componentrœ   rr   ÚnameÚlabelÚ	icon_namer  rP   ©r9   Ú
menu_itemsÚitemr<   r<   r=   Útest_add_to_admin_menuT  s    z/TestMenuItemRegistration.test_add_to_admin_menuc                 C   s\   t | _t | j¡}|d }|  |jd¡ |  |jd¡ |  |jd¡ |  |j	|  
d¡¡ d S )Nr   ÚpublishablesÚPublishablesrµ   r^   )r*   rK   r   r‹  rœ   rr   rŒ  r  rŽ  r  rP   r  r<   r<   r=   Útest_add_to_settings_menu]  s    z2TestMenuItemRegistration.test_add_to_settings_menuc                 C   s   t  | j¡}dd„ |D ƒ}|  t|ƒd¡ |d }|  |jd¡ |  |jd¡ |  t|jƒd¡ t| _	|jd }|  |j
d¡ |  |jd	¡ |  |jd
¡ |  |j|  d¡¡ t| _	|jd }|  |j
d¡ |  |jd¡ |  |jd
¡ |  |j|  d¡¡ d S )Nc                 S   s   g | ]}|j d kr|‘qS )Ú
revisables©rŒ  ©r¢   r‘  r<   r<   r=   r£   h  rá   zDTestMenuItemRegistration.test_group_registration.<locals>.<listcomp>rj   r   Z
RevisablesZtasksrˆ   zrevisable-modelszRevisable modelsrµ   r^   zrevisable-child-modelszRevisable child models)r   r‹  rœ   rr   r>  r  rŽ  r  r.   rK   rŒ  r  rP   r-   )r9   r  r–  Z
group_itemZrevisable_itemZrevisable_child_itemr<   r<   r=   Útest_group_registrationf  s&    

z0TestMenuItemRegistration.test_group_registrationc                 C   sZ   d| j _| j j tjjddd¡ | j  ¡  t 	| j
¡}dd„ |D ƒ}|  t|ƒd¡ d S )NFÚwagtailadminÚaccess_admin©Zcontent_type__app_labelÚcodenamec                 S   s   g | ]}|j d v r|‘qS )>   rŠ  r–  r“  r—  r˜  r<   r<   r=   r£   Š  s   
þzETestMenuItemRegistration.test_limited_permissions.<locals>.<listcomp>r   )rE   Úis_superuserÚuser_permissionsr_   r   rU   rq   Úsaver   r‹  rœ   rr   r>  r  r<   r<   r=   Útest_limited_permissions~  s    ÿÿ
þz1TestMenuItemRegistration.test_limited_permissionsc              	   C   sú   t | _d| j_| jj tjjddd¡ | j 	¡  dD ]¾}| j
|dž tjj| jjjt|| jjƒd}| jj |¡ t | j¡}|d }|  |jd¡ |  |jd	¡ |  |jd
¡ |  |j|  d¡¡ | jj |¡ W d   ƒ q61 sê0    Y  q6d S )NFrš  r›  rœ  )r_   Zchangera   )Úactionr   r“  r”  rµ   r^   )r*   rK   rE   rž  rŸ  r_   r   rU   rq   r   ro   r0  Ú	app_labelr   r   r‹  rœ   rr   rŒ  r  rŽ  r  rP   Úremove)r9   r¢  Z
permissionr  r‘  r<   r<   r=   Útest_basic_permissions‘  s,    ÿÿ
þz/TestMenuItemRegistration.test_basic_permissionsc                 C   sÐ   t  | j¡}dd„ |D ƒ}|  t|ƒd¡ |d }|  |jd¡ |  |jd¡ |  |jd¡ |  |jt	dƒ¡ |`
t d	¡@}d
|_t  | j¡}dd„ |D ƒ}|  t|ƒd¡ W d   ƒ n1 sÂ0    Y  d S )Nc                 S   s   g | ]}|j d kr|‘qS ©Úsnippetsr—  r˜  r<   r<   r=   r£   ®  rá   zlTestMenuItemRegistration.test_snippets_menu_item_hidden_when_all_snippets_have_menu_item.<locals>.<listcomp>rj   r   r§  ÚSnippetsrµ   zwagtailsnippets:indexzJwagtail.snippets.views.snippets.SnippetViewSet.get_menu_item_is_registeredTc                 S   s   g | ]}|j d kr|‘qS r¦  r—  r˜  r<   r<   r=   r£   ¾  rá   )r   Zmenu_items_for_requestrœ   rr   r>  rŒ  r  rŽ  r  r   Z_all_have_menu_itemsr   ÚpatchZreturn_valuer‹  )r9   r  r§  r‘  Zmock_registeredr<   r<   r=   Ú?test_snippets_menu_item_hidden_when_all_snippets_have_menu_item¬  s"    ÿzXTestMenuItemRegistration.test_snippets_menu_item_hidden_when_all_snippets_have_menu_item)r?   r@   rA   rG   r’  r•  r™  r¡  r¥  rª  r†   r<   r<   r\   r=   rˆ  N  s   		rˆ  c                   @   s   e Zd ZeZdd„ ZdS )ÚTestCustomFormClassc                 C   st   | j  |  d¡¡}|  |d¡ |  |d¡ | jjjdd}| j  | jdt|j	ƒfd¡}|  |d¡ |  |d¡ d S )Nr_   z<input type="text" name="text"z<textarea name="text"úHello WorldrR   r`   rI   )
rp   rq   rP   r|   ru   rK   rU   rV   r   rm   )r9   Zadd_viewrQ  Z	edit_viewr<   r<   r=   Útest_get_form_classÅ  s    z'TestCustomFormClass.test_get_form_classN)r?   r@   rA   r*   rK   r­  r<   r<   r<   r=   r«  Â  s   r«  c                       sX   e Zd ZeZ‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )ÚTestInspectViewConfigurationc                    s,   t ƒ  ¡  | jj| _| jjjddd| _d S )NZPerkedelrú   rû   )rT   rG   rK   rL   rÍ   rU   rV   rW   rF   r\   r<   r=   rG   Ö  s    

z"TestInspectViewConfiguration.setUpc                 C   s¾   t | _| jdt| jjƒfd}| j |¡}| j|ddd | j|ddd | j|dt	| jj
ƒ› ddd | j|d	dd |  || jd
t| jjƒfd¡ |  || jdt| jjƒfd¡ d S )NÚinspectrI   ú<dt>Text</dt> <dd>Perkedel</dd>Tr  ú(<dt>Country code</dt> <dd>Indonesia</dd>ú<dt>Some date</dt> <dd>ú</dd>ú+<dt>Some attribute</dt> <dd>some value</dd>r`   ra   )r+   rK   rP   r   rW   rm   rp   rq   ru   r   rP  r|   ©r9   r  rx   r<   r<   r=   Útest_enabledÛ  s>    ýýýýþþz)TestInspectViewConfiguration.test_enabledc                 C   sZ   t | _| jjjdd}|  t¡& | jdt|jƒfd W d   ƒ n1 sL0    Y  d S )NÚadrR   r¯  rI   )	r)   rK   rU   rV   r5   r   rP   r   rm   )r9   rW   r<   r<   r=   Útest_disabledü  s    z*TestInspectViewConfiguration.test_disabledc                 C   sø   t | _d| j_| jj tjjdddtjj| jj	j
td| jj	ƒd¡ | j ¡  | jdt| jjƒfd}| j |¡}| j|dd	d
 | j|dd	d
 | j|dt| jjƒ› dd	d
 |  || jdt| jjƒfd¡ |  || jdt| jjƒfd¡ d S )NFrš  r›  rœ  r_   r¯  rI   r°  Tr  r±  r²  r³  r`   ra   )r+   rK   rE   rž  rŸ  r_   r   rU   rq   r0  r£  r   r   rP   r   rW   rm   rp   ru   r   rP  r|   rµ  r<   r<   r=   Útest_only_add_permission  sJ    ÿþü	
ýýýþþz5TestInspectViewConfiguration.test_only_add_permissionc           	   
   C   s‚  t | _| jdt| jjƒfd}t|ƒj}dd„ tdƒD ƒ}t	j
j|d jd}tjj| jdt	j
d	d
}tjj| jd|d	d
}tj |jdg d¢i¡}|d |@ | | j |¡}W d   ƒ n1 sÆ0    Y  W d   ƒ n1 sä0    Y  W d   ƒ n1 s0    Y  | j|dd	d | j|dd	d | j|dt| jjƒ› dd	d | j|dd	d | j|dd	d | j|dd	d d S )Nr¯  rI   c                 S   s    g | ]}t jjd |› d‘qS )zadvertisement rR   )r)   rU   rV   rÜ   r<   r<   r=   r£   1  rá   zCTestInspectViewConfiguration.test_custom_fields.<locals>.<listcomp>rc  r   )rm   ÚadvertsT)rV   Úsome_querysetÚfields)rü   rP  Zsome_attributerº  r»  r°  r  r±  r²  r³  r´  zq
            <dt>Adverts</dt>
            <dd>advertisement 0, advertisement 1, advertisement 2</dd>
            z/<dt>Some queryset</dt> <dd>advertisement 0</dd>)r+   rK   rP   r   rW   rm   r   Úfuncrã   r)   rU   Úfilterr   r©  ÚdictÚview_initkwargsrp   rq   r|   ru   r   rP  )	r9   r  Ú	view_funcrº  ZquerysetZmock_managerZmock_querysetZmock_fieldsrx   r<   r<   r=   Útest_custom_fields,  s`    
ÿ
ÿÿþhýýýýúýz/TestInspectViewConfiguration.test_custom_fieldsc                 C   s¾   t | _| jdt| jjƒfd}t|ƒj}tj	 
|jddgi¡ | j |¡}W d   ƒ n1 s`0    Y  | j|ddd | j|ddd | j|d	t| jjƒ› d
dd | j|ddd d S )Nr¯  rI   Zfields_excluderP  r°  Tr  r±  r²  r³  r´  )r+   rK   rP   r   rW   rm   r   r½  r   r©  r¿  rÀ  rp   rq   ru   r|   r   rP  )r9   r  rÁ  rx   r<   r<   r=   Útest_exclude_fieldsq  s8    
þ*ýýýýz0TestInspectViewConfiguration.test_exclude_fieldsc                 C   sæ   t | _tƒ jjdtƒ d}tƒ jjdtƒ d}| jjj||d}| j 	| j
dt|jƒfd¡}|  |jd¡ | j|d| d	¡ ¡ › d
dd | j|ddd |  |d|j› d¡ |  |d¡ |  |d¡ |  ||jj› d¡ d S )Nz
Test image)ÚtitleÚfilezTest document)Zprotected_imageZprotected_documentr¯  rI   rf   z<dt>Protected image</dt> <dd>zmax-400x400r³  Tr  z<dt>Protected document</dt>z	<a href="z">ZTXTu   Â bytes)r0   rK   r    rU   rV   r!   r   r   rp   rq   rP   r   rm   rr   rs   ru   Zget_renditionZimg_tagr  rÅ  Úsize)r9   ÚimageÚdocumentrW   rx   r<   r<   r=   Útest_image_and_document_fields”  s.    þÿÿýz;TestInspectViewConfiguration.test_image_and_document_fieldsc                 C   sb   t | _| jj ¡ }| j | jdt|jƒfd¡}|  	|j
d¡ | j|ddd | j|ddd d S )Nr¯  rI   rf   z&<dt>Protected image</dt> <dd>None</dd>Tr  z)<dt>Protected document</dt> <dd>None</dd>)r0   rK   rU   rV   rp   rq   rP   r   rm   rr   rs   ru   )r9   rW   rx   r<   r<   r=   Ú*test_image_and_document_fields_none_values®  s    ýýzGTestInspectViewConfiguration.test_image_and_document_fields_none_values)r?   r@   rA   r+   rK   rG   r¶  r¸  r¹  rÂ  rÃ  rÉ  rÊ  r†   r<   r<   r\   r=   r®  Ó  s   !*E#r®  c                   @   sn   e Zd ZeZejdddœg Ze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 )ÚTestBreadcrumbsr¨  z/admin/snippets/)r  r  c                 C   s   | j jjdd| _d S ©Nr¬  rR   rh  r6  r<   r<   r=   ræ   Æ  s    zTestBreadcrumbs.setUpTestDatac                 C   s0   | j  |  d¡¡}dddœg}|  ||j¡ d S )Nr^   r  úFull-featured snippets©r  r  ©rp   rq   rP   ÚassertBreadcrumbsItemsRenderedr  ©r9   rx   rj  r<   r<   r=   rr  Ê  s    zTestBreadcrumbs.test_index_viewc                 C   s>   | j  |  d¡¡}|  d¡ddœdddœg}|  ||j¡ d S )Nr_   r^   rÍ  rÎ  r  zNew: Full-featured snippetrÏ  rÑ  r<   r<   r=   Útest_add_viewÏ  s    þûzTestBreadcrumbs.test_add_viewc                 C   sN   | j  | jd| jjfd¡}|  d¡ddœdt| jƒdœg}|  ||j¡ d S )Nr`   rI   r^   rÍ  rÎ  r  ©rp   rq   rP   rW   rm   r6   rÐ  r  rÑ  r<   r<   r=   Útest_edit_viewÚ  s    þûzTestBreadcrumbs.test_edit_viewc                 C   s,   | j  | jd| jjfd¡}|  |j¡ d S )Nra   rI   )rp   rq   rP   rW   rm   ZassertBreadcrumbsNotRenderedr  r~   r<   r<   r=   Útest_delete_viewå  s    z TestBreadcrumbs.test_delete_viewc                 C   sn   | j  | jd| jjfd¡}|  d¡ddœ| jd| jjfdt| jƒdœddt| jƒd	œg}|  ||j¡ d S )
Nrz   rI   r^   rÍ  rÎ  r`   r  ZHistory©r  r  ZsublabelrÓ  rÑ  r<   r<   r=   Útest_history_viewé  s    þþ÷z!TestBreadcrumbs.test_history_viewc                 C   sn   | j  | jd| jjfd¡}|  d¡ddœ| jd| jjfdt| jƒdœddt| jƒd	œg}|  ||j¡ d S )
Nrb   rI   r^   rÍ  rÎ  r`   r  ÚUsagerÖ  rÓ  rÑ  r<   r<   r=   Útest_usage_viewø  s    þþ÷zTestBreadcrumbs.test_usage_viewc                 C   sn   | j  | jd| jjfd¡}|  d¡ddœ| jd| jjfdt| jƒdœddt| jƒd	œg}|  ||j¡ d S )
Nr¯  rI   r^   rÍ  rÎ  r`   r  ZInspectrÖ  rÓ  rÑ  r<   r<   r=   Útest_inspect_view  s    þþ÷z!TestBreadcrumbs.test_inspect_viewc                 C   sn   | j  | jd| jjfd¡}|  d¡ddœ| jd| jjfdt| jƒdœddt| jƒd	œg}|  ||j¡ d S )
Nrd   rI   r^   rÍ  rÎ  r`   r  zWorkflow historyrÖ  rÓ  rÑ  r<   r<   r=   Útest_workflow_history_view  s    ÿþþ÷z*TestBreadcrumbs.test_workflow_history_viewN)r?   r@   rA   r+   rK   r2   Zbase_breadcrumb_itemsrò   ræ   rr  rÒ  rÔ  rÕ  r×  rÙ  rÚ  rÛ  r<   r<   r<   r=   rË  À  s   ÿ
rË  c                   @   sD   e Zd ZeZdd„ Zedddd„ ƒZdd„ Zeddd	d
„ ƒZ	dS )ÚTestCustomMethodsc                 C   sR   | j  |  d¡¡}|  d¡d }|  |j¡}|jdd|id}|  t|ƒd¡ d S )Nr^   r_   ú?customised=paramÚaÚhref©r  rˆ   )rp   rq   rP   rº   r  Úfind_allrr   r>  ©r9   rx   r2  r¿   Úlinksr<   r<   r=   Ú(test_index_view_get_add_url_is_respected+  s
    z:TestCustomMethods.test_index_view_get_add_url_is_respectedT)ZWAGTAIL_I18N_ENABLEDc                 C   sd   t jjdd | j |  d¡d ¡}|  d¡d }|  |j¡}|jdd|id	}|  	t
|ƒd
¡ d S )NÚfr©Zlanguage_coder^   ú
?locale=frr_   ú?locale=fr&customised=paramrÞ  rß  rà  rj   )r"   rU   rV   rp   rq   rP   rº   r  rá  rr   r>  râ  r<   r<   r=   Ú2test_index_view_get_add_url_is_respected_with_i18n2  s    zDTestCustomMethods.test_index_view_get_add_url_is_respected_with_i18nc                 C   sn   | j  |  d¡¡}|  d¡d }|  |j¡}| ddddœ¡}|  |¡ |jdd	|id
}|  t	|ƒd¡ d S )Nr  r_   rÝ  Útemplateú
w-teleportú#w-slim-header-buttons©zdata-controllerzdata-w-teleport-target-valuerÞ  rß  rà  rj   )
rp   rq   rP   rº   r  Úfindr  rá  rr   r>  ©r9   rx   r2  r¿   rê  rã  r<   r<   r=   Ú7test_index_results_view_get_add_url_teleports_to_header;  s    þþ
zITestCustomMethods.test_index_results_view_get_add_url_teleports_to_headerc                 C   s€   t jjdd | j |  d¡d ¡}|  d¡d }|  |j¡}| ddd	d
œ¡}|  	|¡ |j
dd|id}|  t|ƒd¡ d S )Nrå  ræ  r  rç  r_   rè  rê  rë  rì  rí  rÞ  rß  rà  rj   )r"   rU   rV   rp   rq   rP   rº   r  rî  r  rá  rr   r>  rï  r<   r<   r=   ÚAtest_index_results_view_get_add_url_teleports_to_header_with_i18nJ  s    þþ
zSTestCustomMethods.test_index_results_view_get_add_url_teleports_to_header_with_i18nN)
r?   r@   rA   r+   rK   rä  r   ré  rð  rñ  r<   r<   r<   r=   rÜ  (  s   
rÜ  c                   @   s$   e Zd ZeZedd„ ƒZdd„ ZdS )ÚTestCustomPermissionPolicyc                 C   s   | j jjdd| _d S rÌ  rh  r6  r<   r<   r=   ræ   _  s    z(TestCustomPermissionPolicy.setUpTestDatac                 C   sœ   | j  | jdt| jjƒfd¡}|  |jd¡ d| j_	d| j_
| j ¡  |  | jj¡ |  | j ¡ d¡ | j  | jdt| jjƒfd¡}|  |tdƒ¡ d S )Nr`   rI   rf   z[FORBIDDEN]ZJoez[FORBIDDEN] JoeZwagtailadmin_home)rp   rq   rP   r   rW   rm   rr   rs   rE   Z
first_nameÚ	last_namer   r»   rž  Zget_full_nameZassertRedirectsr   r~   r<   r<   r=   Útest_get_edit_view_not_allowedc  s     
 z9TestCustomPermissionPolicy.test_get_edit_view_not_allowedN)r?   r@   rA   r+   rK   rò   ræ   rô  r<   r<   r<   r=   rò  \  s   
rò  N)lr   Úior   Zunittestr   Zdjango.confr   Zdjango.contrib.admin.utilsr   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   Z"django.contrib.contenttypes.modelsr	   Zdjango.core.exceptionsr
   Zdjango.template.defaultfiltersr   Zdjango.testr   r   r   r   Zdjango.urlsr   r   r   Zdjango.utils.timezoner   Zopenpyxlr   Zwagtail.admin.admin_url_finderr   Zwagtail.admin.forms.searchr   Zwagtail.admin.menur   r   Zwagtail.admin.panelsr   Zwagtail.admin.staticfilesr   Zwagtail.admin.views.mixinsr   Zwagtail.blocks.field_blockr   Zwagtail.coreutilsr   Zwagtail.documentsr   Zwagtail.documents.tests.utilsr   Zwagtail.imagesr    Zwagtail.images.tests.utilsr!   Zwagtail.modelsr"   r#   r$   Zwagtail.snippets.blocksr%   Zwagtail.snippets.modelsr&   Zwagtail.snippets.views.snippetsr'   Zwagtail.snippets.widgetsr(   Zwagtail.test.testapp.modelsr)   r*   r+   r,   r-   r.   r/   r0   Zwagtail.test.utilsr1   Z!wagtail.test.utils.template_testsr2   Zwagtail.utils.timestampsr3   r4   rB   rQ   r‡   r“   rÉ   rØ   ró   r!  r(  r3  r5  rC  rM  rg  rl  rs  rz  rˆ  r«  r®  rË  rÜ  rò  r<   r<   r<   r=   Ú<module>   sv   (

If]9_,sT&_GFt nh4