o
    hI                     @   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w   Y  t|j}| d| | d| d S )NModelViewSetz:must define a `model` attribute or pass a `model` argument)assertRaisesr
   r&   r'   str	exceptionassertIn)selfcmmessage r=   c/var/www/html/ndineBlogger/venv/lib/python3.10/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r:   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r:   url_namerK   r=   r=   r>   get_urlE   s   zBaseSnippetViewSetTests.get_urlr=   )r@   rA   rB   rL   rH   rQ   r=   r=   r=   r>   rC   ?   s    rC   c                       8   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))superrH   rL   objectscreateobjectsave_revision
revision_1publishrV   
revision_2rG   	__class__r=   r>   rH   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 ]F\}}}| j|d3 | j| 	||}| 
|jd | 
|jd d | j|ddd | |d|  W d    n1 sw   Y  qFd S )Nlistzheaders/slim_header.htmladdeditdeletezheader.htmlusage	unpublishworkflow_historyrevisions_revertrevisions_comparerevisions_unschedule)	view_name   header_iconcogicon icon-cog   countzwagtailadmin/shared/)r   rZ   pkr\   idr^   subTestclientgetrQ   assertEqualstatus_codecontextassertContainsassertTemplateUsed)r:   rs   viewsrk   rK   headerresponser=   r=   r>   test_get_viewsT   s2   




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historyrl   z,wagtailadmin/shared/headers/slim_header.htmlrm   zicon icon-historyro   wagtailadmin/shared/header.html)rv   rw   rQ   r   rZ   rs   rx   ry   r|   rz   r{   assertNotContainsassertTemplateNotUsedr:   r   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!workflow_history_detailrl   r   rm   rn   zicon icon-clipboard-listro   )r	   rX   get_for_modeltyperZ   r   r#   firstr   r$   rY   rV   r[   startrF   rv   rw   rQ   r   rs   rt   rx   ry   r   rz   r{   )r:   workflow_stater   r=   r=   r>    test_get_workflow_history_detail{   s&   
z/TestCustomIcon.test_get_workflow_history_detail)
r@   rA   rB   r+   rL   rH   r   r   r   __classcell__r=   r=   r_   r>   rT   I   s    rT   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 )Ntest_snippetchooserblockr   rp      iconrn   )	r%   r+   set_namer   js_argsrx   assertIsInstancer(   rL   )r:   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+   deconstructrx   )r:   r   pathrK   kwargsr=   r=   r>   test_deconstruct   s
   z0TestSnippetChooserBlockWithIcon.test_deconstructN)r@   rA   rB   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 textrU   fooadvertfull_featuredinstancer   formrequestc                 S       g | ]}t |d ddkr|qS 
field_nameNr   getattr.0panelr=   r=   r>   
<listcomp>   
    z9TestSnippetChooserPanelWithIcon.setUp.<locals>.<listcomp>r   )rW   rH   r   r   rF   rV   r+   rX   rY   full_featured_snippetr/   r)   r   edit_handlerget_form_class
form_classget_bound_panelchildrenobject_chooser_panel)r:   test_snippetr   r   r_   r=   r>   rH      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_htmlr9   rV   assertNotIn)r:   
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   r   r   r   r   r=   r=   r>   r      r   zNTestSnippetChooserPanelWithIcon.test_render_as_empty_field.<locals>.<listcomp>r   r   r   r   r   )	r/   r   r   r   r   r   r   r9   r   )r:   r   r   r   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 rD| d	|j	|  q5| }| |d
 }| |d d S )Nchooserl   rm   rn   ro   rp   rq   r   snippethtmlz&form[data-chooser-modal-creation-form])r+   rM   chooser_viewsetrv   rw   r   rN   rx   ry   rz   r{   keysr   jsonget_soup
assertTrue
select_one)r:   r   r   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chosenrJ   stepresultrt   string)r+   rM   r   rv   rw   r   rN   r   rs   r   rx   r7   rV   r:   r   r   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 )NrY   rV   zNew snippetr   r   r   r   )	r+   rM   r   rv   postr   rN   r   rx   r   r=   r=   r>   test_create_from_chooser  s   z8TestSnippetChooserPanelWithIcon.test_create_from_chooser)
r@   rA   rB   rH   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   ^   t jjdd}|j}| | d | |dd | | d | |jdd d S )	Nr   rU   wagtailsnippets_tests_advertrc   z!wagtailsnippets_tests_advert:edit#wagtailsnippetchoosers_tests_advertr   z*wagtailsnippetchoosers_tests_advert:choose)	r)   rX   rY   rM   rx   get_admin_url_namespacerN   get_chooser_admin_url_namespacer   r:   r   viewsetr=   r=   r>   test_default_url_namespace  s$   
z(TestAdminURLs.test_default_url_namespacec                 C      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   rU   z"/admin/snippets/tests/advert/edit//z$/admin/snippets/choose/tests/advert/zsnippets/tests/advertrc   rJ   zsnippets/choose/tests/advertr   )r)   rX   rY   rM   r   rs   rx   get_admin_base_pathr   rN   r   rF   get_edit_urlget_chooser_admin_base_pathr   r:   r   r   rs   expected_urlexpected_choose_url
url_finderr=   r=   r>   test_default_admin_base_path'  s"   

z*TestAdminURLs.test_default_admin_base_pathc                 C   r   )	N
customisedrU   some_namespacerc   zsome_namespace:editmy_chooser_namespacer   zmy_chooser_namespace:choose)	r+   rX   rY   rM   rx   r   rN   r   r   r   r=   r=   r>   test_custom_url_namespace@  s   
z'TestAdminURLs.test_custom_url_namespacec                 C   r   )Nr   rU   z"/admin/deep/within/the/admin/edit/r   z/admin/choose/wisely/zdeep/within/the/adminrc   rJ   zchoose/wiselyr   )r+   rX   rY   rM   r   rs   rx   r   r   rN   r   rF   r   r   r   r   r=   r=   r>   test_custom_admin_base_pathR  s"   

z)TestAdminURLs.test_custom_admin_base_pathN)r@   rA   rB   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 rV   locale)r+   r   idefault_localer=   r>   r   o  s    z0TestPagination.setUpTestData.<locals>.<listcomp>    c                 S   s   g | ]
}t d | dqS )r   rU   )r)   r   r=   r=   r>   r   t  s    )r"   get_defaultranger+   rX   bulk_creater)   )clsrX   r=   r   r>   setUpTestDatal  s   
zTestPagination.setUpTestDatac                 C   ^   t tjd}| j|}| tj 	 d | 
|d | 
|d | 
||d  d S )Nra   r   zPage 1 of 2Next?p=2)r   r)   rM   rN   rv   rw   rx   rX   allrr   r{   r:   list_urlr   r=   r=   r>   test_default_list_paginationw     z+TestPagination.test_default_list_paginationc                 C   r   )Nra   r   zPage 1 of 7r  r  )r   r+   rM   rN   rv   rw   rx   rX   r  rr   r{   r  r=   r=   r>   test_custom_list_pagination  r  z*TestPagination.test_custom_list_paginationc                 C   r   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)   rM   r   r   rN   rv   rw   rx   rX   r  rr   r{   r:   r   
choose_urlchoose_results_urlr   r=   r=   r>   test_default_chooser_pagination     z.TestPagination.test_default_chooser_paginationc                 C   r	  )Nr   r
  r   zPage 1 of 3r  r  )r+   rM   r   r   rN   rv   rw   rx   rX   r  rr   r{   r  r=   r=   r>   test_custom_chooser_pagination  r  z-TestPagination.test_custom_chooser_paginationN)	r@   rA   rB   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      | j | d|S Nra   rv   rw   rQ   r:   paramsr=   r=   r>   rw        zTestFilterSetClass.getc                 C   $   t jjddd t jjddd d S NNasi goreng from IndonesiaIDrV   country_codeFish and chips from the UKUKr+   rX   rY   rG   r=   r=   r>   create_test_snippets     
z'TestFilterSetClass.create_test_snippetsc                 C   2   |   }|j }td}| d| d| d S Nz$wagtailadmin/js/date-time-chooser.jsz<script src="z"></script>rw   contentdecoder   assertTagInHTMLr:   r   r   datetime_jsr=   r=   r>   #test_get_include_filters_form_media     
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   rw   r{   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"  rw   r{   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  r2  r.  Tr/  r3  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  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?rp   list_resultszcountry_code=PHr"  rw   r{   r   r'  r   assertIsNotNoneattrssplitrx   rQ   r   r:   r   r   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/  r9  r:  r;  r<  rp   r=  zcountry_code=IDr>  rB  r=   r=   r>   test_filtered_with_results  s"   



z-TestFilterSetClass.test_filtered_with_resultsN)r@   rA   rB   r+   rL   rw   r"  r,  r1  r4  r6  rF  rI  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 rD   )rE   rG   r=   r=   r>   rH     s   zTestFilterSetClassSearch.setUpr=   c                 C   s   t tj||dS rI   )r   r+   rM   rN   rO   r=   r=   r>   rQ   	  s   z TestFilterSetClassSearch.get_urlc                 C   r  r  r  r  r=   r=   r>   rw     r  zTestFilterSetClassSearch.getc                 C   r  r  r!  rG   r=   r=   r>   r"    r#  z-TestFilterSetClassSearch.create_test_snippetsc                 C   s8   |    | ddd}| |d | j|ddd d S )Nr  chipsr  qr8  rH  Tr/  r"  rw   r{   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   rK  rL  r  rG  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/  rN  r   r=   r=   r>   #test_filtered_searched_with_results#  s   
z<TestFilterSetClassSearch.test_filtered_searched_with_resultsNrR   )
r@   rA   rB   fixturesrH   rQ   rw   r"  rO  rP  r=   r=   r=   r>   rJ    s    

rJ  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 rD   )rW   rH   r   r   	isoformatdate_strrG   r_   r=   r>   rH   2  s   
zTestListFilterWithList.setUpc                 C   r  r  r  r  r=   r=   r>   rw   7  r  zTestListFilterWithList.getc                 C   s(   | j jjdd | j jjd| jd d S )NThe first created objectrU   A second one after that)rV   first_published_at)rL   rX   rY   r   rG   r=   r=   r>   r"  :  s
   
z+TestListFilterWithList.create_test_snippetsc                 C   r$  r%  r&  r*  r=   r=   r>   r,  A  r-  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 )	Nrb   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">)rw   rQ   r{   rL   _metaverbose_name_plural)r:   r   add_urlr=   r=   r>   r1  I  s&   

z1TestListFilterWithList.test_unfiltered_no_resultsc                 C   sX   |    |  }| |d | |d | |d | j|ddd | j|ddd d S )NrU  rV  r2  rX  Tr/  rY  r3  r   r=   r=   r>   r4  ]  s   
z3TestListFilterWithList.test_unfiltered_with_resultsc                 C   s^   |    | ddi}| |d | |d | |d | j|ddd | j|d	dd d S )
NrW  r5  rU  rV  r2  rX  Tr/  zd<input type="text" name="first_published_at" value="" autocomplete="off" id="id_first_published_at">r3  r   r=   r=   r>   r6  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 )	NrW  z
1970-01-01zNo z match your queryrX  Tr/  zn<input type="text" name="first_published_at" value="1970-01-01" autocomplete="off" id="id_first_published_at">)r"  rw   r{   rL   rZ  r[  r   r=   r=   r>   rF    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 )	NrW  rV  rG  rX  Tr/  z4<input type="text" name="first_published_at" value="z0" autocomplete="off" id="id_first_published_at">)r"  rw   rT  r{   r   r=   r=   r>   rI    s   
z1TestListFilterWithList.test_filtered_with_results)r@   rA   rB   r*   rL   rH   rw   r"  r,  r1  r4  r6  rF  rI  r   r=   r=   r_   r>   rR  /  s    rR  c                   @      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 )	Ntext__containsz
second onerV  rG  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">rN  r   r=   r=   r>   #test_filtered_contains_with_results  s   
z:TestListFilterWithDict.test_filtered_contains_with_resultsN)r@   rA   rB   r,   rL   r`  r=   r=   r=   r>   r^        r^  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   )rL   rX   rY   r   r=   r=   r>   r     s   z+TestListViewWithCustomColumns.setUpTestDatac                 C   r  r  r  r  r=   r=   r>   rw     r  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 columnUpdatedz
Modulo twoTristateFoo UKra   z?ordering=country_coder   rq   #listing-results table th   )rw   r{   rQ   r   r'  selectrx   len)r:   r   r  sort_country_code_urlr   headingsr=   r=   r>   test_custom_columns  s   

z1TestListViewWithCustomColumns.test_custom_columnsc                 C   s   |   }| j|dddd d S )Nz
<td>0</td>Trp   r   rr   r0  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 onerU   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>
            Trp   rq  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>
            )rL   rX   rY   rw   r{   r   r=   r=   r>   test_boolean_column  s(   
z1TestListViewWithCustomColumns.test_boolean_columnN)r@   rA   rB   r+   rL   r  r   rw   rp  rr  rs  r=   r=   r=   r>   rb    s    
rb  c                       rS   )	TestRelatedFieldListDisplayc                    s4   t    d}tjj|dd| _tjjdd| _d S )Nz!https://example.com/free_exampleszFree Examples)rE  rV   zroyale with cheeserU   )rW   rH   r)   rX   rY   r   r+   ffs)r:   rE  r_   r=   r>   rH     s   
z!TestRelatedFieldListDisplay.setUpc                 C   sT   | j jj| jd| _| j| d}| |j	d | 
|d | j
|ddd d S )N)r   ra   rl   Chosen snippet textz	<td></td>Tr/  )rL   rX   rY   r   no_ffs_chooserrv   rw   rQ   rx   ry   r{   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   ra   rl   c                 S   s   g | ]}|j d dqS )T)strip)get_text)r   r~   r=   r=   r>   r     s    
zJTestRelatedFieldListDisplay.test_single_level_relation.<locals>.<listcomp>rj  rv  z<td>royale with cheese</td>Tr/  )rL   rX   rY   r   ru  scmrv   rw   rQ   rx   ry   r   r'  rl  r9   r{   )r:   r   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   ra   rl   zLatest revision created atz<td>z</td>Tr/  )rL   rX   rY   r   ru  r{  r[   r3   
created_atrv   rw   rQ   rx   ry   r{   )r:   dummy_revision	timestampr   r=   r=   r>   test_multi_level_relation&  s   

z5TestRelatedFieldListDisplay.test_multi_level_relation)
r@   rA   rB   r/   rL   rH   rx  r}  r  r   r=   r=   r_   r>   rt  
  s    rt  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  rp   )rV   r  rW  some_number)rL   rX   rY   rW  r   USE_TZ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 )Nra   zDownload CSVz?export=csvzDownload XLSXz?export=xlsx)rv   rw   rQ   r{   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 )Nra   exportcsvrl   Content-Dispositionz4attachment; filename="all-fullfeatured-snippets.csv"
r   zMText,Country code,Custom FOO column,Some date,Some number,First published atrp   zIndomie,ID,Foo ID,z,1, )sepr   zPot Noodle,UK,Foo UK,z,0,)rv   rw   rQ   rx   ry   getvaluer(  rA  r  rS  rW  )r:   r   
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 )Nra   r  xlsxrl   r  z5attachment; filename="all-fullfeatured-snippets.xlsx")filenamec                 S   s   g | ]	}d d |D qS )c                 S      g | ]}|j qS r=   )value)r   cellr=   r=   r>   r   o      z>TestListExport.test_xlsx_export.<locals>.<listcomp>.<listcomp>r=   )r   rowr=   r=   r>   r   o      z3TestListExport.test_xlsx_export.<locals>.<listcomp>r   )rd  re  rf  z	Some datezSome numberzFirst published atrp   r  r  zFoo IDi  rk           i r   r  r   ri     F2)rv   rw   rQ   rx   ry   r  r   r   activerowsr  r   rm  number_formatr   )r:   r   workbook_data	worksheet
cell_arrayr=   r=   r>   test_xlsx_exportd  s:   zTestListExport.test_xlsx_exportN)
r@   rA   rB   r+   rL   r  r   r  r  r  r=   r=   r=   r>   r  0  s    
r  c                   @   $   e Zd ZeZedd Zdd ZdS )TestCustomTemplatesc                 C      | j jjdd| _d S )NzSome snippetrU   rL   rX   rY   rZ   rc  r=   r=   r>   r        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 ];\}\}}}| j|d& | j| j||d}|D ]}| || qP| j	|ddd W d    n1 skw   Y  q5d S )Nrb   z>wagtailsnippets/snippets/tests/fullfeaturedsnippet/create.htmlrc   z(wagtailsnippets/snippets/tests/edit.htmlrd   z$wagtailsnippets/snippets/delete.htmlrf   zAwagtailsnippets/snippets/tests/fullfeaturedsnippet/unpublish.htmlra   z$tests/fullfeaturedsnippet_index.htmlzEwagtailsnippets/snippets/tests/fullfeaturedsnippet/index_results.htmlr=  r   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)caserJ   z<p>An added paragraph</p>Tr/  )
r   rZ   rs   itemsru   rv   rw   rQ   r|   r{   )	r:   rs   casesr  rk   rK   template_namesr   template_namer=   r=   r>   test_template_lookups  s^   
6z)TestCustomTemplates.test_template_lookupsN)r@   rA   rB   r+   rL   r  r   r  r=   r=   r=   r>   r    
    
r  c                   @   r  )TestCustomQuerySetc                 C   sH   t  }| jdd|d| jdd|d| jdd|dg}| jj| d S )N
FooSnippetr  )rV   r  r   
BarSnippetr   [HIDDEN]Snippetr"   r   rL   rX   r   r   r   rX   r=   r=   r>   r     s   z TestCustomQuerySet.setUpTestDatac                 C   s@   | j | dddi}| |d | |d | |d d S )Nra   r  r  r  r  r  )rv   rw   rQ   r{   r   r   r=   r=   r>   test_index_view  s   z"TestCustomQuerySet.test_index_viewN)r@   rA   rB   r+   rL   r  r   r  r=   r=   r=   r>   r    s
    
	r  c                   @   r  )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
BBBBBBBBBBr  r  r=   r=   r>   r     s   z TestCustomOrdering.setUpTestDatac                 C   sF   | j | d}| | jjj | dd |jd D g d d S )Nra   c                 S   r  r=   rU   )r   r  r=   r=   r>   r     r  z<TestCustomOrdering.test_index_view_order.<locals>.<listcomp>page_obj)r  r  r  r  )	rv   rw   rQ   assertFalserL   rZ  orderingrx   rz   r   r=   r=   r>   test_index_view_order  s   z(TestCustomOrdering.test_index_view_orderN)r@   rA   rB   r+   rL   r  r   r  r=   r=   r=   r>   r    s
    

r  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 CMSrU   z&Django is a Python-based web frameworkz)Python is a programming-bas, uh, language)rL   rX   rY   r   secondthirdrc  r=   r=   r>   r     s   z(TestDjangoORMSearchBackend.setUpTestDatara   c                 C   s   | j | ||S rD   r  )r:   r  rP   r=   r=   r>   rw     r  zTestDjangoORMSearchBackend.getc                 C   sV   |   }| |jd | |d | t|jd j| j| j	| j
g | |d d S )Nrl   #wagtailsnippets/snippets/index.htmlr  This field is required.rw   rx   ry   r|   assertCountEqualra   rz   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 )NrM  r5  rl   r  r  r  r  r   r=   r=   r>   test_empty_q(  s   z'TestDjangoORMSearchBackend.test_empty_qc                 C   s   |  |  jd t d S )Nsearch_form)r   rw   rz   r   rG   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 )NrM  Djangorl   r  )	rw   rx   ry   r  ra   rz   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 )NrM  Pythonr=  )rP   rl   r  )rw   rx   ry   r  ra   rz   r  r  r   r=   r=   r>   test_search_index_results_viewC  s   
z9TestDjangoORMSearchBackend.test_search_index_results_viewN)r@   rA   rB   r*   rL   r  r   rw   r  r  r  r  r  r=   r=   r=   r>   r    s    

r  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 rD   )rW   rH   r   r   rF   rG   r_   r=   r>   rH   O  s   
zTestMenuItemRegistration.setUpc                 C   \   t | _t| j}|d }| |jd | |jd | |jd | |j	| 
d d S )NfullfeaturedzFull-Featured MenuItemrn   ra   )r+   rL   r   render_componentr   rx   namelabel	icon_namerE  rQ   r:   
menu_itemsitemr=   r=   r>   test_add_to_admin_menuT     z/TestMenuItemRegistration.test_add_to_admin_menuc                 C   r  )Nr   publishablesPublishablesr   ra   )r*   rL   r   r  r   rx   r  r  r  rE  rQ   r  r=   r=   r>   test_add_to_settings_menu]  r  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      g | ]	}|j d kr|qS )
revisablesr  r   r  r=   r=   r>   r   h  r  zDTestMenuItemRegistration.test_group_registration.<locals>.<listcomp>rp   r   
Revisablestasksr   zrevisable-modelszRevisable modelsr   ra   zrevisable-child-modelszRevisable child models)r   r  r   rx   rm  r  r  r  r.   rL   r  rE  rQ   r-   )r:   r  r  
group_itemrevisable_item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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   )rF   is_superuseruser_permissionsrb   r   rX   rw   saver   r  r   rx   rm  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O 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    n1 suw   Y  qd S )NFr  r  r  )rb   changerd   )actionr   r  r  r   ra   )r*   rL   rF   r  r  rb   r   rX   rw   r  ru   rZ  	app_labelr   r   r  r   rx   r  r  r  rE  rQ   remove)r:   r  
permissionr  r  r=   r=   r>   test_basic_permissions  s2   
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    d S 1 sbw   Y  d S )Nc                 S   r  snippetsr  r  r=   r=   r>   r     r  zlTestMenuItemRegistration.test_snippets_menu_item_hidden_when_all_snippets_have_menu_item.<locals>.<listcomp>rp   r   r  Snippetsr   zwagtailsnippets:indexzJwagtail.snippets.views.snippets.SnippetViewSet.get_menu_item_is_registeredTc                 S   r  r  r  r  r=   r=   r>   r     r  )r   menu_items_for_requestr   rx   rm  r  r  r  rE  r   _all_have_menu_itemsr   patchreturn_valuer  )r:   r  r  r  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@   rA   rB   rH   r  r  r  r  r  r  r   r=   r=   r_   r>   r  N  s    		r  c                   @   r]  )TestCustomFormClassc                 C   st   | j | d}| |d | |d | jjjdd}| j | jdt|j	fd}| |d | |d d S )Nrb   z<input type="text" name="text"z<textarea name="text"Hello WorldrU   rc   rJ   )
rv   rw   rQ   r   r{   rL   rX   rY   r   rs   )r:   add_viewr  	edit_viewr=   r=   r>   test_get_form_class  s   z'TestCustomFormClass.test_get_form_classN)r@   rA   rB   r*   rL   r  r=   r=   r=   r>   r    ra  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 )NPerkedelr  r  )rW   rH   rL   rM   r   rX   rY   rZ   rG   r_   r=   r>   rH     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inspectrJ   <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>rc   rd   )r+   rL   rQ   r   rZ   rs   rv   rw   r{   r   r  r   r:   rE  r   r=   r=   r>   test_enabled  s>   z)TestInspectViewConfiguration.test_enabledc                 C   s\   t | _| jjjdd}| t | jdt|jfd W d    d S 1 s'w   Y  d S )NadrU   r  rJ   )	r)   rL   rX   rY   r6   r   rQ   r   rs   )r:   rZ   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  rb   r  rJ   r  Tr/  r  r  r  rc   rd   )r+   rL   rF   r  r  rb   r   rX   rw   rZ  r  r   r  rQ   r   rZ   rs   rv   r{   r   r  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}|2 |  | | j|}W d    n1 scw   Y  W d    n1 srw   Y  W d    n1 sw   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  rJ   c                 S   s    g | ]}t jjd | dqS )zadvertisement rU   )r)   rX   rY   r   r=   r=   r>   r   1  s     zCTestInspectViewConfiguration.test_custom_fields.<locals>.<listcomp>r  r   )rs   advertsT)rY   some_querysetfields)r  r  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+   rL   rQ   r   rZ   rs   r   funcr   r)   rX   filterr   r  dictview_initkwargsrv   rw   r   r{   r   r  )	r:   rE  	view_funcr  querysetmock_managermock_querysetmock_fieldsr   r=   r=   r>   test_custom_fields,  sj   

  
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 s0w   Y  | j|ddd | j|ddd | j|d	t| jj d
dd | j|ddd d S )Nr  rJ   fields_excluder  r  Tr/  r  r  r  r  )r+   rL   rQ   r   rZ   rs   r   r  r   r  r  r   rv   rw   r{   r   r   r  )r:   rE  r!  r   r=   r=   r>   test_exclude_fieldsq  s:   

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)protected_imageprotected_documentr  rJ   rl   z<dt>Protected image</dt> <dd>zmax-400x400r  Tr/  z<dt>Protected document</dt>z	<a href="z">TXTu    bytes)r0   rL   r    rX   rY   r!   r   r   rv   rw   rQ   r   rs   rx   ry   r{   get_renditionimg_tagrE  r*  size)r:   imagedocumentrZ   r   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  rJ   rl   z&<dt>Protected image</dt> <dd>None</dd>Tr/  z)<dt>Protected document</dt> <dd>None</dd>)r0   rL   rX   rY   rv   rw   rQ   r   rs   rx   ry   r{   )r:   rZ   r   r=   r=   r>   *test_image_and_document_fields_none_values  s   
zGTestInspectViewConfiguration.test_image_and_document_fields_none_values)r@   rA   rB   r+   rL   rH   r  r  r  r&  r(  r3  r4  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  rE  c                 C   r  Nr  rU   r  rc  r=   r=   r>   r     r  zTestBreadcrumbs.setUpTestDatac                 C   s0   | j | d}dddg}| ||j d S )Nra   r5  Full-featured snippetsrE  r  rv   rw   rQ   assertBreadcrumbsItemsRenderedr'  r:   r   r  r=   r=   r>   r    s   zTestBreadcrumbs.test_index_viewc                 C   s>   | j | d}| ddddddg}| ||j d S )Nrb   ra   r7  r8  r5  zNew: Full-featured snippetr9  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 )Nrc   rJ   ra   r7  r8  r5  rv   rw   rQ   rZ   rs   r7   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 )Nrd   rJ   )rv   rw   rQ   rZ   rs   assertBreadcrumbsNotRenderedr'  r   r=   r=   r>   test_delete_view  s   z TestBreadcrumbs.test_delete_viewc                 C   n   | 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   rJ   ra   r7  r8  rc   r5  HistoryrE  r  sublabelr=  r;  r=   r=   r>   test_history_view     z!TestBreadcrumbs.test_history_viewc                 C   rA  )
Nre   rJ   ra   r7  r8  rc   r5  UsagerC  r=  r;  r=   r=   r>   test_usage_view  rF  zTestBreadcrumbs.test_usage_viewc                 C   rA  )
Nr  rJ   ra   r7  r8  rc   r5  InspectrC  r=  r;  r=   r=   r>   test_inspect_view  rF  z!TestBreadcrumbs.test_inspect_viewc                 C   rA  )
Nrg   rJ   ra   r7  r8  rc   r5  zWorkflow historyrC  r=  r;  r=   r=   r>   test_workflow_history_view  s   z*TestBreadcrumbs.test_workflow_history_viewN)r@   rA   rB   r+   rL   r2   base_breadcrumb_itemsr  r   r  r<  r>  r@  rE  rH  rJ  rK  r=   r=   r=   r>   r5    s    
r5  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 )Nra   rb   ?customised=paramahrefr@  r   )rv   rw   rQ   r   r'  find_allrx   rm  r:   r   r\  r   linksr=   r=   r>   (test_index_view_get_add_url_is_respected+  s
   z:TestCustomMethods.test_index_view_get_add_url_is_respectedT)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language_codera   
?locale=frrb   ?locale=fr&customised=paramrO  rP  rQ  rp   )r"   rX   rY   rv   rw   rQ   r   r'  rR  rx   rm  rS  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=  rb   rN  template
w-teleport#w-slim-header-buttonszdata-controllerzdata-w-teleport-target-valuerO  rP  rQ  rp   )
rv   rw   rQ   r   r'  findr?  rR  rx   rm  r:   r   r\  r   r]  rT  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 )NrW  rX  r=  rZ  rb   r[  r]  r^  r_  r`  rO  rP  rQ  rp   )r"   rX   rY   rv   rw   rQ   r   r'  ra  r?  rR  rx   rm  rb  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@   rA   rB   r+   rL   rU  r   r\  rc  rd  r=   r=   r=   r>   rM  (  s    
rM  c                   @   r  )TestCustomPermissionPolicyc                 C   r  r6  r  rc  r=   r=   r>   r   _  r  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 )Nrc   rJ   rl   z[FORBIDDEN]Joez[FORBIDDEN] Joewagtailadmin_home)rv   rw   rQ   r   rZ   rs   rx   ry   rF   
first_name	last_namer  r   r  get_full_nameassertRedirectsr   r   r=   r=   r>   test_get_edit_view_not_allowedc  s    
 z9TestCustomPermissionPolicy.test_get_edit_view_not_allowedN)r@   rA   rB   r+   rL   r  r   rl  r=   r=   r=   r>   re  \  r  re  N)lr   ior   unittestr   django.confr   django.contrib.admin.utilsr   django.contrib.authr   django.contrib.auth.modelsr   "django.contrib.contenttypes.modelsr	   django.core.exceptionsr
   django.template.defaultfiltersr   django.testr   r   r   r   django.urlsr   r   r   django.utils.timezoner   openpyxlr   wagtail.admin.admin_url_finderr   wagtail.admin.forms.searchr   wagtail.admin.menur   r   wagtail.admin.panelsr   wagtail.admin.staticfilesr   wagtail.admin.views.mixinsr   wagtail.blocks.field_blockr   wagtail.coreutilsr   wagtail.documentsr   wagtail.documents.tests.utilsr   wagtail.imagesr    wagtail.images.tests.utilsr!   wagtail.modelsr"   r#   r$   wagtail.snippets.blocksr%   wagtail.snippets.modelsr&   wagtail.snippets.views.snippetsr'   wagtail.snippets.widgetsr(   wagtail.test.testapp.modelsr)   r*   r+   r,   r-   r.   r/   r0   wagtail.test.utilsr1   !wagtail.test.utils.template_testsr2   wagtail.utils.timestampsr3   r4   rC   rT   r   r   r   r   r  rJ  rR  r^  rb  rt  r  r  r  r  r  r  r  r  r5  rM  re  r=   r=   r=   r>   <module>   sx    (

If]9_,sT&_GFt nh4