o
    ËÉh‹g ã                   @   s˜  d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ 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 d dlmZ d dlmZm Z m!Z!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ G dd„ de+eƒZ0G dd„ de+eƒZ1G dd„ de+eƒZ2G dd„ de-e+eƒZ3G dd„ de+eƒZ4G dd„ de-e+eƒZ5ed d!G d"d#„ d#e+eƒƒZ6G d$d%„ d%e+eƒZ7G d&d'„ d'e-e+eƒZ8ed d!G d(d)„ d)e8ƒƒZ9G d*d+„ d+e9ƒZ:ed,d!G d-d.„ d.e8ƒƒZ;G d/d0„ d0e+eƒZ<G d1d2„ d2e+eƒZ=G d3d4„ d4e+eƒZ>G d5d6„ d6e+eƒZ?G d7d8„ d8e+eƒZ@G d9d:„ d:e+eƒZAG d;d<„ d<e-e+eƒZBG d=d>„ d>e+eƒZCdS )?é    N)Úmock)ÚGroupÚ
Permission)ÚContentType)ÚSimpleUploadedFile)ÚTestCaseÚTransactionTestCase)Úoverride_settings)Úreverse)Úescape)Ú	urlencode)Úcapfirst)ÚAdminURLFinder)Úget_document_modelÚmodels)Úget_test_document_file)Ú
CollectionÚGroupCollectionPermissionÚPageÚReferenceIndexÚUploadedFile)ÚCustomDocumentÚCustomDocumentWithAuthorÚ	EventPageÚEventPageRelatedLinkÚVariousOnDeleteModel)ÚWagtailTestUtils)ÚAdminTemplateTestUtils)Úlocal_datetimec                   @   s˜   e Zd Z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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 )$ÚTestDocumentIndexViewc                 C   ó   |   ¡  d S ©N©Úlogin©Úself© r&   úh/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/documents/tests/test_admin_views.pyÚsetUp%   ó   zTestDocumentIndexView.setUpc                 C   ó   | j  tdƒ|¡S ©Núwagtaildocs:index©ÚclientÚgetr
   ©r%   Úparamsr&   r&   r'   r/   (   ó   zTestDocumentIndexView.getc                 C   sj   t jjjdd t jjjdd |  ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )NúHello document©ÚtitleúBonjour documentéÈ   ú wagtaildocs/documents/index.htmlúAdd a document)	r   ÚDocumentÚobjectsÚcreater/   ÚassertEqualÚstatus_codeÚassertTemplateUsedÚassertContains©r%   Úresponser&   r&   r'   Útest_simple+   s   z!TestDocumentIndexView.test_simplec                 C   ó.   t dƒD ]}tjdt|ƒ d}| ¡  qd S ©Né2   zTest r4   ©Úranger   r:   ÚstrÚsave©r%   ÚiÚdocumentr&   r&   r'   Ú	make_docs6   ó   
þzTestDocumentIndexView.make_docsc                 C   óP   |   ¡  | j tdƒddi¡}|  |jd¡ |  |d¡ |  |jd jd¡ d S )Nr,   Úpé   r7   r8   Úpage_obj©	rN   r.   r/   r
   r=   r>   r?   ÚcontextÚnumberrA   r&   r&   r'   Útest_pagination;   s
   z%TestDocumentIndexView.test_paginationc                 C   sH   |   ¡  |  ddi¡}|  |jd¡ |  |d¡ |  |jd jd¡ d S )NrQ   úHello World!r7   r8   rS   é   )rN   r/   r=   r>   r?   rU   rV   rA   r&   r&   r'   Útest_pagination_invalidG   s
   z-TestDocumentIndexView.test_pagination_invalidc                 C   sP   |   ¡  |  ddi¡}|  |jd¡ |  |d¡ |  |jd j|jd j¡ d S )NrQ   éŸ† r7   r8   rS   Ú	paginator)rN   r/   r=   r>   r?   rU   rV   Ú	num_pagesrA   r&   r&   r'   Útest_pagination_out_of_rangeS   s   

þz2TestDocumentIndexView.test_pagination_out_of_rangec                 C   s2   g d¢}|D ]}|   d|i¡}|  |jd¡ qd S )N)r5   Ú
created_atú-created_atÚorderingr7   )r/   r=   r>   )r%   Ú	orderingsra   rB   r&   r&   r'   Útest_orderingb   s
   þz#TestDocumentIndexView.test_orderingc                 C   sT   |   ¡  |  ¡ }| j|ddd | j|ddd |  |j¡}| d¡}|  |¡ d S )Nú<th>Collection</th>T©Úhtmlú<td>Root</td>zselect[name="collection_id"])rN   r/   ÚassertNotContainsÚget_soupÚcontentÚ
select_oneÚassertIsNone)r%   rB   ÚsoupÚcollection_selectr&   r&   r'   Útest_index_without_collectionsh   s   
z4TestDocumentIndexView.test_index_without_collectionsc                 C   sŒ   t  ¡ }|jdd |jdd |  ¡  |  ¡ }| j|ddd | j|ddd |  ¡ }|  |j¡}| d¡}|  	d	d
„ |D ƒg d¢¡ d S )Nú
Evil plans©Únameú
Good plansrd   Tre   rg   z@select[name="collection_id"] option[value]:not(option[value=""])c                 S   s   g | ]}|j d d d¡‘qS )T©Ústripu   â†³ )Úget_textÚlstrip)Ú.0Ú
collectionr&   r&   r'   Ú
<listcomp>„   s    ÿÿzDTestDocumentIndexView.test_index_with_collection.<locals>.<listcomp>)ÚRootrp   rs   )
r   Úget_first_root_nodeÚ	add_childrN   r/   r@   ri   rj   Úselectr=   )r%   Úroot_collectionrB   rm   Úcollection_optionsr&   r&   r'   Útest_index_with_collectionr   s$   ÿþûz0TestDocumentIndexView.test_index_with_collectionc                 C   s°   t  ¡ }|jdd}tjjjd|d |  ¡  |  d|j	i¡}t
dƒ}|  |d|› d|j	› d	¡ |  t|jd
 ƒd¡ |  |d¡ |  |d¡ | j|d|j	› dddd d S )NzTravel plansrq   Ú	Itinerary©r5   ry   Úcollection_idúwagtaildocs:add_multiplez	<a href="ú?collection_id=ú"rS   rY   zTest 42z0
            <input data-bulk-action-parent-id="z–"
                   data-bulk-action-select-all-checkbox
                   type="checkbox"
                   aria-label="Select all"
            />TrR   )rf   Úcount)r   r|   r}   r   r:   r;   r<   rN   r/   Úpkr
   r@   r=   ÚlenrU   rh   )r%   r   Útravel_plansrB   Úurlr&   r&   r'   Ú#test_index_with_collection_filtered‹   s(   ÿÿ
÷z9TestDocumentIndexView.test_index_with_collection_filteredc                 C   s8   t  ¡ }|jdd}|jdd |  ¡ }|  |d¡ d S )Nrp   rq   úEviler plansú,&nbsp;&nbsp;&nbsp;&nbsp;&#x21b3 Eviler plans)r   r|   r}   r/   r@   ©r%   r   Ú
evil_plansrB   r&   r&   r'   Útest_collection_nesting¬   s
   z-TestDocumentIndexView.test_collection_nestingc                 C   s€   t  ¡ }|jdd}tjjjd|d}|  d|ji¡}|  	|j
d¡ td|jfd}td	|j ¡ iƒ}|  ||› d
|› ¡ d S )Nrp   rq   úTest docrƒ   r„   r7   úwagtaildocs:edit©ÚargsÚnextú?)r   r|   r}   r   r:   r;   r<   r/   Úidr=   r>   r
   r   Ú_requestÚget_full_pathr@   )r%   r   Úevil_plans_collectionÚdocrB   Úedit_urlr1   r&   r&   r'   Ú)test_edit_document_link_contains_next_urlµ   s   ÿz?TestDocumentIndexView.test_edit_document_link_contains_next_urlc                 C   s8   |   ¡ }|j ¡ }tdƒ}| jd|› d|ddd d S )Núwagtaildocs:index_resultsú<form action="z" method="get" role="search">rY   T)rˆ   Úallow_extra_attrs)r/   rj   Údecoder
   ÚassertTagInHTML)r%   rB   rf   Ú
search_urlr&   r&   r'   Útest_search_form_renderedÄ   s   


üz/TestDocumentIndexView.test_search_form_renderedc                 C   s|   t jjjdd}|j dd¡ |  ¡ }|  |jd¡ |  	|j
¡}| d¡}|  |¡ | d¡}|  dd	„ |D ƒddg¡ d S )
NúTest document with two tagsr4   ÚoneÚtwor7   zinput[name=tag][checked]ú#id_tag labelc                 S   s   g | ]}|j d d‘qS )Trt   ©rv   )rx   Útagsr&   r&   r'   rz   à   s    z3TestDocumentIndexView.test_tags.<locals>.<listcomp>)r   r:   r;   r<   r¬   Úaddr/   r=   r>   ri   rj   r~   ÚassertFalseÚassertCountEqual)r%   Údocument_two_tagsrB   rm   Úcurrent_tagsr¬   r&   r&   r'   Ú	test_tagsÑ   s   ÿ


þzTestDocumentIndexView.test_tagsc                 C   sL  t jjjdd t jjjdd}|j d¡ t jjjdd}|j dd¡ t jjjdd}|j d¡ |  ¡ }|  |jd	 j	j
d
¡ |  ddi¡}|  |jd	 j	j
d¡ |  ddi¡}|  |jd	 j	j
d¡ |  dddgi¡}|  |jd	 j	j
d¡ |  |j¡}| d¡}|  dd„ |D ƒddg¡ | d¡}|  dd„ |D ƒddg¡ d S )NúTest document with no tagsr4   úTest document with one tagr¨   r§   r©   z"Test document with a different tagÚ	unrelatedrS   é   ÚtagrR   rY   é   rª   c                 S   s&   g | ]}|  d ¡dur|jdd‘qS )zinput[checked]NTrt   )rk   rv   )rx   r·   r&   r&   r'   rz     s
    
þz<TestDocumentIndexView.test_tag_filtering.<locals>.<listcomp>z"[data-w-active-filter-id="id_tag"]c                 S   s   g | ]	}|j d dd‘qS )ú T)Ú	separatorru   r«   )rx   Úfilterr&   r&   r'   rz     s    zTag: onezTag: unrelated)r   r:   r;   r<   r¬   r­   r/   r=   rU   r\   rˆ   ri   rj   r~   r¯   )r%   Údocument_one_tagr°   Údocument_unrelated_tagrB   rm   r¬   Úactive_filtersr&   r&   r'   Útest_tag_filteringä   sD   ÿÿÿ
þú

þz(TestDocumentIndexView.test_tag_filteringc                 C   sž   t ddƒD ]}tjjjd| d}|d dkr!|j d¡ | ¡  q|  dddœ¡}|  	|j
d	¡ |j d
¡}|  d|v p@d|v ¡ |  d|v pKd|v ¡ d S )NrY   é‚   zTest document %ir4   rR   r   Úeven)r·   rQ   r7   Úutf8z?p=1&amp;tag=evenz?tag=even&amp;p=1z?p=3&amp;tag=evenz?tag=even&amp;p=3)rH   r   r:   r;   r<   r¬   r­   rJ   r/   r=   r>   rj   r£   Ú
assertTrue)r%   rL   rM   rB   Úresponse_bodyr&   r&   r'   Ú)test_tag_filtering_preserves_other_params  s   €ÿÿz?TestDocumentIndexView.test_tag_filtering_preserves_other_paramsN)Ú__name__Ú
__module__Ú__qualname__r(   r/   rC   rN   rW   rZ   r^   rc   ro   r   r   r’   rŸ   r¦   r²   r¿   rÅ   r&   r&   r&   r'   r   $   s$    
!	7r   c                   @   sX   e Zd Z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dS )ÚTestDocumentIndexViewSearchc                 C   ó   t jdd |  ¡  d S ©Nr{   rq   ©r   Úadd_rootr#   r$   r&   r&   r'   r(   2  ó   z!TestDocumentIndexViewSearch.setUpc                 C   r*   r+   r-   r0   r&   r&   r'   r/   6  r2   zTestDocumentIndexViewSearch.getc                 C   rD   rE   rG   rK   r&   r&   r'   rN   9  rO   z%TestDocumentIndexViewSearch.make_docsc                 C   ój   t jjjdd t jjjdd |  ddi¡}|  |jd¡ |  |jd d¡ |  |d¡ |  	|d¡ d S )Nr3   r4   r6   ÚqÚHellor7   Úquery_string)
r   r:   r;   r<   r/   r=   r>   rU   r@   rh   rA   r&   r&   r'   Útest_search>  ó   z'TestDocumentIndexViewSearch.test_searchc                 C   rÏ   )Nr3   r4   r6   rÐ   Úbonjr7   rÒ   )
r   r:   r;   r<   r/   r=   r>   rU   rh   r@   rA   r&   r&   r'   Útest_search_partialH  rÔ   z/TestDocumentIndexViewSearch.test_search_partialc                 C   sd   t jjjdd t jjjdd |  ddi¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr3   r4   r6   rÐ   Ú r7   úThis field is required.)	r   r:   r;   r<   r/   r=   r>   rh   r@   rA   r&   r&   r'   Útest_empty_qR  s   z(TestDocumentIndexViewSearch.test_empty_qc                 C   s@   |   ¡  |  ddi¡}|  |jd¡ |  |d¡ |  |d¡ d S )NrÐ   ÚTestr7   r8   zThere are 50 matches)rN   r/   r=   r>   r?   r@   rA   r&   r&   r'   Útest_pagination_q\  s
   z-TestDocumentIndexViewSearch.test_pagination_qc                 C   st   t jjjdd t jjjdd}|j d¡ t jjjdd}|j dd¡ |  dddœ¡}|  |jd	 j	j
d
¡ d S )Nr³   r4   r´   r¨   r§   r©   Útest)r·   rÐ   rS   rR   )r   r:   r;   r<   r¬   r­   r/   r=   rU   r\   rˆ   )r%   r¼   r°   rB   r&   r&   r'   Ú#test_tag_filtering_with_search_terme  s   ÿÿz?TestDocumentIndexViewSearch.test_tag_filtering_with_search_termc           	   	   C   s4  t jjjdd}tdddƒ|_| ¡  t jjjdd}tdddƒ|_| ¡  t jjjdd}tdddƒ|_| ¡  d	||gfd
||gfg}|D ]P\}}| j|d> |  d|dœ¡}|  	|j
d¡ |  	|jd d¡ t|jd jƒ}|  	||¡ |  d|j¡ |  	|jd |¡ W d   ƒ n1 s’w   Y  qGd S )Nzrecent good Documentr4   iè  rY   zlatest ok Documentié  zoldest good documentiç  r_   r`   )ra   Úgood)rÐ   ra   r7   rÒ   rS   ra   )r   r:   r;   r<   r   r_   rJ   ÚsubTestr/   r=   r>   rU   ÚlistÚobject_listÚassertIn)	r%   Údoc1Údoc2Údoc3Úcasesra   Úexpected_docsrB   Ú	documentsr&   r&   r'   Ú#test_search_and_order_by_created_atw  s0   

þö€ÿz?TestDocumentIndexViewSearch.test_search_and_order_by_created_atN)rÆ   rÇ   rÈ   r(   r/   rN   rÓ   rÖ   rÙ   rÛ   rÝ   ré   r&   r&   r&   r'   rÉ   1  s    


	rÉ   c                   @   ó0   e Zd Zdd„ Zi fdd„Zdd„ Zdd„ Zd	S )
ÚTestDocumentIndexResultsViewc                 C   rÊ   rË   rÌ   r$   r&   r&   r'   r(   š  rÎ   z"TestDocumentIndexResultsView.setUpc                 C   r*   )Nr    r-   r0   r&   r&   r'   r/   ž  r2   z TestDocumentIndexResultsView.getc                 C   sv   t jjjdd}|  ddi¡}tddiƒ}|  |jd¡ |  |d|j	› d	|› ¡ | j
|d
dd | j
|ddd d S )NúA boring reportr4   rÐ   Úboringr—   ú/admin/documents/?q=boringr7   ú/admin/documents/edit/ú/?rd   Tre   rg   )r   r:   r;   r<   r/   r   r=   r>   r@   r‰   rh   )r%   r   rB   r1   r&   r&   r'   rÓ   ¡  s   z(TestDocumentIndexResultsView.test_searchc                 C   sŠ   t  ¡ }|jdd tjjjdd}|  ddi¡}tddiƒ}|  	|j
d	¡ |  |d
|j› d|› ¡ | j|ddd | j|ddd d S )Nrp   rq   rì   r4   rÐ   rí   r—   rî   r7   rï   rð   rd   Tre   rg   )r   r|   r}   r   r:   r;   r<   r/   r   r=   r>   r@   r‰   )r%   r   r   rB   r1   r&   r&   r'   Útest_search_with_collection¬  s   z8TestDocumentIndexResultsView.test_search_with_collectionN)rÆ   rÇ   rÈ   r(   r/   rÓ   rñ   r&   r&   r&   r'   rë   ™  s
    rë   c                   @   s`   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
dd„ ƒZdd„ Z	dd„ Z
ed	d
dd„ ƒZdS )ÚTestDocumentAddViewc                 C   r    r!   r"   r$   r&   r&   r'   r(   »  r)   zTestDocumentAddView.setUpc                 C   st   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  tdƒdd	œd
dd	œg|j	¡ d S )Núwagtaildocs:addr7   úwagtaildocs/documents/add.htmlúK<label class="w-field__label" for="id_collection" id="id_collection-label">úenctype="multipart/form-data"úwagtailadmin/js/draftail.jsr,   Ú	Documents©rŒ   Úlabelr×   zNew: Document)
r.   r/   r
   r=   r>   r?   rh   r@   ÚassertBreadcrumbsItemsRenderedrj   rA   r&   r&   r'   Útest_get¾  s   þþûzTestDocumentAddView.test_getc                 C   óZ   t  ¡ }|jdd | j tdƒ¡}|  |jd¡ |  |d¡ |  	|d¡ |  	|d¡ d S )Nrp   rq   ró   r7   rô   rõ   ©
r   r|   r}   r.   r/   r
   r=   r>   r?   r@   ©r%   r   rB   r&   r&   r'   Útest_get_with_collectionsØ  s   þz-TestDocumentAddView.test_get_with_collectionsc                 C   ó@   t  ¡ }|jdd}|jdd | j tdƒ¡}|  |d¡ d S )Nrp   rq   rŽ   ró   r   ©r   r|   r}   r.   r/   r
   r@   r   r&   r&   r'   Ú test_get_with_collection_nestingæ  ó
   z4TestDocumentAddView.test_get_with_collection_nestingútests.CustomDocument©ÚWAGTAILDOCS_DOCUMENT_MODELc                 C   sR   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nró   r7   rô   rö   zname="fancy_description"r÷   )r.   r/   r
   r=   r>   r?   r@   rA   r&   r&   r'   Ú#test_get_with_custom_document_modelï  s   z7TestDocumentAddView.test_get_with_custom_document_modelc                 C   st   t ƒ }d|dœ}| j tdƒ|¡}|  |tdƒ¡ tjjjdd}t	 
¡ }|  |j|¡ |  |j¡ |  |j¡ d S ©NúTest document©r5   Úfileró   r,   r4   )r   r.   Úpostr
   ÚassertRedirectsr   r:   r;   r/   r   r|   r=   ry   rÃ   Ú	file_sizeÚ	file_hash)r%   Ú	fake_fileÚ	post_datarB   rM   r   r&   r&   r'   Ú	test_postþ  s   þzTestDocumentAddView.test_postc                 C   sŠ   t  ¡ }|jdd}tƒ }d||jdœ}| j tdƒ|¡}|  |tdƒ¡ |  	t
jjjdd ¡ ¡ t  ¡ }|  t
jjjddj|¡ d S )Nrp   rq   r
  ©r5   r  ry   ró   r,   r4   )r   r|   r}   r   r™   r.   r  r
   r  rÃ   r   r:   r;   r»   Úexistsr=   r/   ry   )r%   r   rœ   r  r  rB   r&   r&   r'   Útest_post_with_collections  s   ýþz.TestDocumentAddView.test_post_with_collectionsc                 C   st   t  ¡ }|jdd}tjjdtƒ |d dtƒ |jdœ}| j 	t
dƒ|¡}|  |jd¡ |  |d¡ |  |d¡ d S )	Nrp   rq   r
  r  ró   r7   rô   ú>Custom document with this Title and Collection already exists.)r   r|   r}   r   r;   r<   r   r™   r.   r  r
   r=   r>   r?   r@   ©r%   r   rœ   r  rB   r&   r&   r'   Ú%test_unique_together_validation_error/  s"   ýýÿz9TestDocumentAddView.test_unique_together_validation_errorN)rÆ   rÇ   rÈ   r(   rü   r   r  r	   r  r  r  r  r&   r&   r&   r'   rò   º  s    	
rò   c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú3TestDocumentAddViewWithLimitedCollectionPermissionsc                 C   ó’   t jjddd}t jjddd}t ¡ }|jdd| _tjjdd}|j	 
|¡ tjj|| j|d	 | jd
ddd}|j 
|¡ | jd
dd d S ©NÚwagtaildocsÚadd_document©Úcontent_type__app_labelÚcodenameÚwagtailadminÚaccess_adminrp   rq   zEvil conspirators©Úgroupry   Ú
permissionÚmoriartyzmoriarty@example.comÚpassword©ÚusernameÚemailr)  ©r+  r)  ©r   r;   r/   r   r|   r}   rœ   r   r<   Úpermissionsr­   r   Úcreate_userÚgroupsr#   ©r%   Úadd_doc_permissionÚadmin_permissionr   Úconspirators_groupÚuserr&   r&   r'   r(   M  ó(   ÿÿýÿz9TestDocumentAddViewWithLimitedCollectionPermissions.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S )Nró   r7   rô   rõ   )r.   r/   r
   r=   r>   r?   rh   rA   r&   r&   r'   rü   g  s   þz<TestDocumentAddViewWithLimitedCollectionPermissions.test_getc                 C   sH   | j jdd | j tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S )NrŽ   rq   ró   r7   rõ   r   )rœ   r}   r.   r/   r
   r=   r>   r@   rA   r&   r&   r'   r  s  s   þzTTestDocumentAddViewWithLimitedCollectionPermissions.test_get_with_collection_nestingc                 C   sl   t ƒ }d|dœ}| j tdƒ|¡}|  |tdƒ¡ |  tjjj	dd 
¡ ¡ |  tjjjddj| j¡ d S r	  )r   r.   r  r
   r  rÃ   r   r:   r;   r»   r  r=   r/   ry   rœ   ©r%   r  r  rB   r&   r&   r'   r  €  s   þþz=TestDocumentAddViewWithLimitedCollectionPermissions.test_postN)rÆ   rÇ   rÈ   r(   rü   r  r  r&   r&   r&   r'   r  L  s
    r  c                   @   st   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestDocumentEditViewc                 C   s(   |   ¡ | _tƒ }tjjjd|d| _d S ©Nr
  r  )r#   r6  r   r   r:   r;   r<   rM   )r%   r  r&   r&   r'   r(   ™  s
   
ÿzTestDocumentEditView.setUpc                 C   st   d| j _| j j tjjddd¡ | j  ¡  | j t	d| j
jfd¡}|  |jd¡ t| j ƒ}|  | | j
¡¡ d S )NFr#  r$  r   r”   r•   é.  )r6  Úis_superuserÚuser_permissionsr­   r   r;   r/   rJ   r.   r
   rM   r™   r=   r>   r   rl   Úget_edit_url)r%   rB   Ú
url_finderr&   r&   r'   Ú!test_get_with_limited_permissions¤  s   ÿÿ
ÿ
z6TestDocumentEditView.test_get_with_limited_permissionsc                 C   sb   d| j _| j j tjjddd¡ | j  ¡  | j 	t
d| jjfddtƒ dœ¡}|  |jd	¡ d S )
NFr#  r$  r   r”   r•   ÚTestDocr  r;  )r6  r<  r=  r­   r   r;   r/   rJ   r.   r  r
   rM   r™   r   r=   r>   rA   r&   r&   r'   Ú"test_post_with_limited_permissionsµ  s   ÿÿ

þz7TestDocumentEditView.test_post_with_limited_permissionsc                 C   sœ   | j  td| jjfd¡}|  |jd¡ |  |d¡ |  |d¡ |  	|d¡ |  
tdƒdd	œd
dd	œg|j¡ t| jƒ}d| jj }|  | | j¡|¡ d S )Nr”   r•   r7   úwagtaildocs/documents/edit.htmlrö   r÷   r,   rø   rù   r×   r
  z/admin/documents/edit/%d/)r.   r/   r
   rM   r™   r=   r>   r?   r@   rh   rû   rj   r   r6  r>  )r%   rB   r?  Úexpected_urlr&   r&   r'   rC   Ä  s    ÿþû
z TestDocumentEditView.test_simplec                 C   sJ   t  ¡ }|jdd}|jdd | j td| jjfd¡}|  |d¡ d S )Nrp   rq   rŽ   r”   r•   r   )	r   r|   r}   r.   r/   r
   rM   r™   r@   r   r&   r&   r'   Ú#test_simple_with_collection_nestingß  s   ÿz8TestDocumentEditView.test_simple_with_collection_nestingc                 C   sˆ   t  ¡ }|jdd}tjjjdtƒ |d}tdƒd t	d|j
iƒ }| j td|j
fd	d
|i¡}|  |jd¡ |  |d|› d¡ d S )Nrp   rq   r“   r  r,   r˜   r„   r”   r•   r—   r7   z<input type="hidden" value="z" name="next">)r   r|   r}   r   r:   r;   r<   r   r
   r   r™   r.   r/   r=   r>   r@   ©r%   r   rœ   r   Úexpected_next_urlrB   r&   r&   r'   Ú%test_next_url_is_present_in_edit_formê  s(   ýÿþÿÿÿz:TestDocumentEditView.test_next_url_is_present_in_edit_formc                 C   s^   t ƒ }d|dœ}| j td| jjfd|¡}|  |tdƒ¡ |  tj	j
j| jjdjd¡ d S )NúTest document changed!r  r”   r•   r,   ©r™   )r   r.   r  r
   rM   r™   r  r=   r   r:   r;   r/   r5   r8  r&   r&   r'   r     s   þÿþzTestDocumentEditView.test_postc                 C   sŽ   t  ¡ }|jdd}tjjjdtƒ |d}tdƒd t	d|j
iƒ }| j td|j
fd	d
|j
|dœ¡}|  ||¡ | ¡  |  |jd
¡ d S )Nrp   rq   r“   r  r,   r˜   r„   r”   r•   ÚEdited)r5   ry   r—   )r   r|   r}   r   r:   r;   r<   r   r
   r   r™   r.   r  r  Úrefresh_from_dbr=   r5   rF  r&   r&   r'   Útest_edit_with_next_url  s.   ýÿþÿýþz,TestDocumentEditView.test_edit_with_next_urlc                 C   sh   t ƒ }tjjjd|d}|j d¡ | j t	d|j
fdi ¡}|  |jd¡ |  |d¡ |  |d¡ d S )	NzTest missing source documentr  Fr”   r•   r7   rC  zFile not found)r   r   r:   r;   r<   r  Údeleter.   r/   r
   r™   r=   r>   r?   r@   )r%   r  rM   rB   r&   r&   r'   Útest_with_missing_source_file1  s   ÿz2TestDocumentEditView.test_with_missing_source_filec                 C   óT   | j  td| jjfd¡}|  |jd¡ |  |d¡ |  || jj	¡ |  |d¡ d S )Nr”   r•   r7   rC  úUsed 0 times©
r.   r/   r
   rM   r™   r=   r>   r?   r@   Ú	usage_urlrA   r&   r&   r'   Útest_usage_linkA  ó   ÿz$TestDocumentEditView.test_usage_linkc                 C   sš   t ddƒ}d|dœ}| j tdƒ|¡ tjjjdd}|j|j	}}t |j
dƒ}| j td|jfd	|j|dœ¡ | ¡  |  |j|¡ |  |j	|¡ d
S )zŠ
        Checks that reuploading the document file with a different file
        changes the file size and file hash (see #5704).
        zsome_file.txts   this is the contentzMy docr  ró   r4   s   less contentr”   r•   N)r   r.   r  r
   r   r:   r;   r/   r  r  Úfilenamer‰   r5   rL  ÚassertNotEqual)r%   r  r  rM   Úold_file_sizeÚold_file_hashÚnew_filer&   r&   r'   Ú/test_reupload_different_file_size_and_file_hashJ  s"   
þþþzDTestDocumentEditView.test_reupload_different_file_size_and_file_hashc                 C   sœ   | j jj}| j j}t|dƒ}| j td| j jfd| j j	|dœ¡}|  
|tdƒ¡ | j  ¡  |  || j jj¡ |  | j jjd| ¡ |  | j j ¡ d¡ dS )z
        Checks that reuploading the document file with the same file name
        changes the file name, to avoid browser cache issues (see #3816).
        ó   An updated test content.r”   r•   r  r,   ú
documents/N)rM   r  rr   rV  r   r.   r  r
   r‰   r5   r  rL  r=   Úread©r%   Úold_filenameÚnew_namerZ  rB   r&   r&   r'   Útest_reupload_same_namej  s   

þþ
z,TestDocumentEditView.test_reupload_same_namec                 C   s¸   | j jj}d}t|dƒ}| j td| j jfd| j j|dœ¡}|  	|tdƒ¡ | j  
¡  |  | j jj |¡¡ |  | j jj | j jj¡¡ |  | j jjd| ¡ |  | j j ¡ d¡ dS )	z€
        Checks that reuploading the document file with a different file name
        correctly uses the new file name.
        z test_reupload_different_name.txtr\  r”   r•   r  r,   r]  N)rM   r  rr   r   r.   r  r
   r‰   r5   r  rL  r®   Ústorager  rÃ   r=   r^  r_  r&   r&   r'   Útest_reupload_different_name€  s   

þþ
z1TestDocumentEditView.test_reupload_different_nameN)rÆ   rÇ   rÈ   r(   r@  rB  rC   rE  rH  r  rM  rO  rT  r[  rb  rd  r&   r&   r&   r'   r9  ˜  s    	 r9  r  r  c                   @   rê   )
Ú+TestDocumentEditViewWithCustomDocumentModelc                 C   s,   |   ¡  tjjdtƒ d| _| jjj| _d S r:  )r#   r   r;   r<   r   rM   r  rc  r$   r&   r&   r'   r(   š  s   þz1TestDocumentEditViewWithCustomDocumentModel.setUpc                 C   s   | j  td| jjfd|¡S )Nr”   r•   )r.   r/   r
   rM   r™   r0   r&   r&   r'   r/   ¥  s   ÿz/TestDocumentEditViewWithCustomDocumentModel.getc                 C   s>   |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr7   rC  rö   r÷   )r/   r=   r>   r?   r@   rA   r&   r&   r'   r  ª  s
   zOTestDocumentEditViewWithCustomDocumentModel.test_get_with_custom_document_modelc                 C   sz   t  ¡ }|jdd}tjjdtƒ |d d|jdœ}| j 	t
d| jjfd|¡}|  |jd¡ |  |d	¡ |  |d
¡ d S )Nrp   rq   ÚUpdatedr  rƒ   r”   r•   r7   rC  r  )r   r|   r}   r   r;   r<   r   r™   r.   r  r
   rM   r=   r>   r?   r@   r  r&   r&   r'   r  µ  s$   ýþÿÿzQTestDocumentEditViewWithCustomDocumentModel.test_unique_together_validation_errorN)rÆ   rÇ   rÈ   r(   r/   r  r  r&   r&   r&   r'   re  ˜  s
    re  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestDocumentDeleteViewc                 C   s4   |   ¡ | _tjjjdd| _td| jjfd| _	d S )Nr
  r4   úwagtaildocs:deleter•   )
r#   r6  r   r:   r;   r<   rM   r
   r™   Ú
delete_urlr$   r&   r&   r'   r(   Ó  s   
zTestDocumentDeleteView.setUpc                 C   s†   d| j _| j j tjjddd¡ | j  ¡  | j | j	¡}| j 
| j	¡}|  |jd¡ |  |jd¡ |  tƒ jj| jjd ¡ ¡ d S )NFr#  r$  r   r;  rJ  )r6  r<  r=  r­   r   r;   r/   rJ   r.   ri  r  r=   r>   rÃ   r   r»   rM   r™   r  )r%   Úresponse_getÚresponse_postr&   r&   r'   Ú$test_delete_with_limited_permissionsÛ  s   ÿÿ
ÿz;TestDocumentDeleteView.test_delete_with_limited_permissionsc                 C   sÌ   | j dd tjj| jd W d   ƒ n1 sw   Y  | j | j¡}|  |j	d¡ |  
|d¡ |  
|d¡ |  |td| jjfdd	 ¡ |  |d
¡ |  |d¡ |  |d¡ |  |d| j› d¡ d S )NT©Úexecute©Úprotected_documentr7   ú(wagtailadmin/generic/confirm_delete.htmlú&wagtailadmin/shared/usage_summary.htmlúwagtaildocs:document_usager•   z?describe_on_delete=1úFOne or more references to this document prevent it from being deleted.úYes, deleteúNo, don't deleter¡   ú" method="POST">)ÚcaptureOnCommitCallbacksr   r;   r<   rM   r.   r/   ri  r=   r>   r?   r@   r
   r™   rh   rA   r&   r&   r'   Ú(test_delete_get_with_protected_referenceí  s.   ÿÿþþþz?TestDocumentDeleteView.test_delete_get_with_protected_referencec                 C   s|   | j dd tjj| jd W d   ƒ n1 sw   Y  | j | j¡}|  |t	dƒ¡ |  
tƒ jj| jjd ¡ ¡ d S )NTrm  ro  Úwagtailadmin_homerJ  )rx  r   r;   r<   rM   r.   r  ri  r  r
   rÃ   r   r»   r™   r  rA   r&   r&   r'   Ú)test_delete_post_with_protected_reference  s   ÿÿz@TestDocumentDeleteView.test_delete_post_with_protected_referencec                 C   sr   | j  | j¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d| j› d¡ d S )	Nr7   rq  rr  rt  ru  rv  r¡   rw  )r.   r/   ri  r=   r>   r?   rh   r@   rA   r&   r&   r'   rC     s   þþz"TestDocumentDeleteView.test_simplec                 C   sr   | j jtd| jjfddd}|  |tdƒ¡ |  tjj	j
| jjd ¡ ¡ |  dd„ |jd	 D ƒtd
ƒg¡ d S )Nrh  r•   T)Úfollowr,   rJ  c                 S   s   g | ]}|j  ¡ ‘qS r&   )Úmessageru   )rx   Úmr&   r&   r'   rz   +  s    z6TestDocumentDeleteView.test_delete.<locals>.<listcomp>Úmessagesz!Document 'Test document' deleted.)r.   r  r
   rM   r™   r  r®   r   r:   r;   r»   r  r=   rU   r   rA   r&   r&   r'   Útest_delete  s   ÿþz"TestDocumentDeleteView.test_deletec                 C   rP  )Nrh  r•   r7   rq  z#This document is referenced 0 timesrR  rA   r&   r&   r'   rT  /  rU  z&TestDocumentDeleteView.test_usage_linkN)
rÆ   rÇ   rÈ   r(   rl  ry  r{  rC   r€  rT  r&   r&   r&   r'   rg  Ò  s    	rg  c                   @   s’   e Zd ZdZd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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚTestMultipleDocumentUploaderz`
    This tests the multiple document upload views located in wagtaildocs/views/multiple.py
    ú
New title!zcromarty, finisterre)r5   r¬   c                 C   s$   |   ¡ | _tƒ jjdtƒ d| _d S r:  )r#   r6  r   r;   r<   r   r   r$   r&   r&   r'   r(   C  s
   
þz"TestMultipleDocumentUploader.setUpc                 C   s2   | j  ¡  |  | j jd¡ |  d| j j ¡ ¡ d S )Nr‚  Úcromarty)r   rL  r=   r5   râ   r¬   Únamesr$   r&   r&   r'   Úcheck_doc_after_editL  s   
z1TestMultipleDocumentUploader.check_doc_after_editc                 C   ó   |   |d¡ d S ©Nr÷   )rh   rA   r&   r&   r'   Úcheck_form_media_in_responseQ  ó   z9TestMultipleDocumentUploader.check_form_media_in_responsec                 C   sp   | j  tdƒ¡}|  |jd¡ |  |d¡ |  tdƒt| jj	j
ƒdœdddœg|j¡ |  |d¡ |  |¡ d	S )
zR
        This tests that the add view responds correctly on a GET request
        r…   r7   úwagtaildocs/multiple/add.htmlr,   rù   r×   zAdd documentsÚid_adddocument_collectionN)r.   r/   r
   r=   r>   r?   rû   r   r   Ú_metaÚverbose_name_pluralrj   rh   rˆ  rA   r&   r&   r'   Útest_addU  s   þûøz%TestMultipleDocumentUploader.test_addc                 C   rý   )Nrp   rq   r…   r7   rŠ  r‹  rþ   rÿ   r&   r&   r'   Útest_add_with_collectionsp  s   z6TestMultipleDocumentUploader.test_add_with_collectionsc                 C   sX   t  ¡ }|jdd}| j tdƒd|j›  ¡}|  |jd¡ |  	|d|j› d¡ d S )Nrp   rq   r…   r†   r7   z<option value="z" selected>)
r   r|   r}   r.   r/   r
   r‰   r=   r>   r@   )r%   r   ry   rB   r&   r&   r'   Ú!test_add_with_selected_collection  s   ÿz>TestMultipleDocumentUploader.test_add_with_selected_collectionc                 C   sª  | j  tdƒdtddƒi¡}|  |jd¡ |  |d d¡ |  |d¡ |  d	|j¡ |  |jd	 j	d¡ |  
|jd	 j¡ |  
|jd	 j¡ |  |jd
 d|jd	 j ¡ |  |jd d|jd	 j ¡ tƒ jjdd}t ¡ }|  |j|¡ |  d|j¡ |  t|jd jƒttƒ jƒddh ¡ |  |jd jd d¡ t |j ¡ ¡}|  d|¡ |  d|¡ |  d|¡ |  |d |jd	 j¡ |  
|d ¡ |  d|d ¡ dS )zl
        This tests that a POST request to the add view saves the document and returns an edit form
        r…   úfiles[]útest.pngó   Simple text documentr7   úContent-Typeúapplication/jsonú3wagtailadmin/generic/multiple_upload/edit_form.htmlr   Úedit_actionú/admin/documents/multiple/%d/Údelete_actionú$/admin/documents/multiple/%d/delete/r4   Úformr  ry   r5   Údoc_idÚsuccessr   N)r.   r  r
   r   r=   r>   r?   râ   rU   r5   rÃ   r  r  r™   r   r;   r/   r   r|   ry   ÚsetÚfieldsÚadmin_form_fieldsÚinitialÚjsonÚloadsrj   r£   ÚassertNotIn©r%   rB   r   r   Úresponse_jsonr&   r&   r'   Útest_add_postŠ  sL   
ÿþÿþþþz*TestMultipleDocumentUploader.test_add_postc                 C   sÀ  | j  tdƒdtddƒdœ¡}|  |jd¡ |  |d d¡ |  |d	¡ |  d
|j¡ |  |jd
 j	d¡ |  d|jd
 j
¡ |  |jd
 j¡ |  |jd
 j¡ |  |jd d|jd
 j ¡ |  |jd d|jd
 j ¡ tƒ jjdd}t ¡ }|  |j|¡ |  d|j¡ |  t|jd jƒttƒ jƒddh ¡ |  |jd jd d¡ t |j ¡ ¡}|  d|¡ |  d|¡ |  d|¡ |  |d |jd
 j¡ |  |d ¡ |  d|d ¡ dS )ú‚
        This tests that a POST request to the add view saves the document with a supplied title and returns an edit form
        r…   ú(TXT) test titleútest.txtr“  ©r5   r‘  r7   r”  r•  r–  r   ú.txtr—  r˜  r™  rš  r4   r›  r  ry   r5   rœ  r  r   N)r.   r  r
   r   r=   r>   r?   râ   rU   r5   rV  rÃ   r  r  r™   r   r;   r/   r   r|   ry   rž  rŸ  r   r¡  r¢  r£  rj   r£   r¤  r¥  r&   r&   r'   Útest_add_post_with_titleÂ  sP   þþ	ÿþþþz5TestMultipleDocumentUploader.test_add_post_with_titlec                 C   sŠ  t  ¡ }|jdd}| j tdƒtddƒ|jdœ¡}|  |j	d¡ |  |d d	¡ |  
|d
¡ |  d|j¡ |  |jd jd¡ |  |jd j¡ |  |jd j¡ tƒ jjdd}t  ¡ }|  |j|¡ |  d|j¡ |  t|jd jƒttƒ jƒdh dhB ¡ |  |jd jd d¡ t |j ¡ ¡}|  d|¡ |  d|¡ |  d|¡ |  |d |jd j¡ |  |d ¡ |  d|d ¡ dS )ú‘
        This tests that a POST request to the add view saves the document
        and returns an edit form, when collections are active
        rp   rq   r…   r’  r“  ©r‘  ry   r7   r”  r•  r–  r   r4   r›  r  ry   r5   rœ  r  r   N)r   r|   r}   r.   r  r
   r   r™   r=   r>   r?   râ   rU   r5   rÃ   r  r  r   r;   r/   ry   rž  rŸ  r   r¡  r¢  r£  rj   r£   )r%   r   rœ   rB   r   r¦  r&   r&   r'   Útest_add_post_with_collectionsü  sB   þþ	ÿþz;TestMultipleDocumentUploader.test_add_post_with_collectionsc                 C   s"   | j  tdƒ¡}|  |jd¡ dS )zX
        This tests that the add view checks for a file when a user POSTs to it
        r…   i  N)r.   r  r
   r=   r>   rA   r&   r&   r'   Útest_add_post_nofile2  s   z1TestMultipleDocumentUploader.test_add_post_nofilec                 C   ó,   | j  td| jjfd¡}|  |jd¡ dS )zl
        This tests that a GET request to the edit view returns a 405 "METHOD NOT ALLOWED" response
        úwagtaildocs:edit_multipler•   é•  N©r.   r/   r
   r   r™   r=   r>   rA   r&   r&   r'   Útest_edit_get;  ó   ÿz*TestMultipleDocumentUploader.test_edit_getc                    s°   ˆ j  tdˆ jjfd‡ fdd„ˆ j ¡ D ƒ¡}ˆ  |jd¡ ˆ  |d d¡ t	 
|j ¡ ¡}ˆ  d|¡ ˆ  d	|¡ ˆ  d
|¡ ˆ  |d ˆ jj¡ ˆ  |d
 ¡ ˆ  ¡  dS )zT
        This tests that a POST request to the edit view edits the document
        r³  r•   c                    s"   i | ]\}}d ˆ j j|f |“qS )z	doc-%d-%s)r   r™   )rx   ÚfieldÚdatar$   r&   r'   Ú
<dictcomp>N  s    ÿÿz?TestMultipleDocumentUploader.test_edit_post.<locals>.<dictcomp>r7   r”  r•  rœ  r›  r  N)r.   r  r
   r   r™   Úedit_post_dataÚitemsr=   r>   r¢  r£  rj   r£   râ   r¤  rÃ   r…  ©r%   rB   r¦  r&   r$   r'   Útest_edit_postG  s   
þþ	z+TestMultipleDocumentUploader.test_edit_postc                 C   sÌ   | j  td| jjfdd| jj dd| jj di¡}|  |jd¡ |  |d d¡ |  |d	¡ |  |j	d
 dd¡ t
 |j ¡ ¡}|  d|¡ |  d
|¡ |  d|¡ |  |d | jj¡ |  |d ¡ dS )z¥
        This tests that a POST request to the edit page returns a json document with "success=False"
        and a form with the validation error indicated
        r³  r•   zdoc-%d-titler×   zdoc-%d-tagsr7   r”  r•  r–  r›  r5   rØ   rœ  r  N)r.   r  r
   r   r™   r=   r>   r?   ÚassertFormErrorrU   r¢  r£  rj   r£   râ   r®   r½  r&   r&   r'   Útest_edit_post_validation_errorb  s(   þþ	ÿÿz<TestMultipleDocumentUploader.test_edit_post_validation_errorc                 C   r²  )zn
        This tests that a GET request to the delete view returns a 405 "METHOD NOT ALLOWED" response
        úwagtaildocs:delete_multipler•   r´  Nrµ  rA   r&   r&   r'   Útest_delete_get„  r·  z,TestMultipleDocumentUploader.test_delete_getc                 C   s¤   | j  td| jjfd¡}|  |jd¡ |  |d d¡ |  tƒ j	j
| jjd ¡ ¡ t |j ¡ ¡}|  d|¡ |  d|¡ |  |d | jj¡ |  |d ¡ d	S )
zX
        This tests that a POST request to the delete view deletes the document
        rÁ  r•   r7   r”  r•  rJ  rœ  r  N)r.   r  r
   r   r™   r=   r>   r®   r   r;   r»   r  r¢  r£  rj   r£   râ   rÃ   r½  r&   r&   r'   Útest_delete_post  s   ÿz-TestMultipleDocumentUploader.test_delete_postN)rÆ   rÇ   rÈ   Ú__doc__r»  r(   r…  rˆ  rŽ  r  r  r§  r­  r°  r±  r¶  r¾  rÀ  rÂ  rÃ  r&   r&   r&   r'   r  9  s(    þ	8:6	"r  c                       s2   e Zd ZeejddZ‡ fdd„Zdd„ Z‡  ZS )Ú"TestMultipleCustomDocumentUploaderúNew description.)Údescriptionc                    ó   t ƒ  ¡  |  | jjd¡ d S )NrÆ  )Úsuperr…  r=   r   rÇ  r$   ©Ú	__class__r&   r'   r…  ®  ó   
z7TestMultipleCustomDocumentUploader.check_doc_after_editc                 C   r†  r‡  )r@   rA   r&   r&   r'   rˆ  ²  r‰  z?TestMultipleCustomDocumentUploader.check_form_media_in_response)	rÆ   rÇ   rÈ   Údictr  r»  r…  rˆ  Ú__classcell__r&   r&   rÊ  r'   rÅ  ¨  s    ÿrÅ  c                       s0   e Zd Ze‡ fdd„ƒZe‡ fdd„ƒZ‡  ZS )Ú.TestMultipleCustomDocumentUploaderNoCollectionc                    sD   t ƒ  ¡  tƒ }tdd„ |jD ƒƒ}tj |d|¡| _| j 	¡  d S )Nc                 s   s    | ]	}|d kr|V  qdS )ry   Nr&   )rx   Úfr&   r&   r'   Ú	<genexpr>¾  s   € zLTestMultipleCustomDocumentUploaderNoCollection.setUpClass.<locals>.<genexpr>r   )
rÉ  Ú
setUpClassr   Útupler   r   ÚpatchÚobjectÚ8_TestMultipleCustomDocumentUploaderNoCollection__patcherÚstart)Úclsr:   rŸ  rÊ  r&   r'   rÒ  º  s
   
z9TestMultipleCustomDocumentUploaderNoCollection.setUpClassc                    s   | j  ¡  tƒ  ¡  d S r!   )rÖ  ÚstoprÉ  ÚtearDownClass)rØ  rÊ  r&   r'   rÚ  Â  s   
z<TestMultipleCustomDocumentUploaderNoCollection.tearDownClass)rÆ   rÇ   rÈ   ÚclassmethodrÒ  rÚ  rÎ  r&   r&   rÊ  r'   rÏ  ·  s
    rÏ  ztests.CustomDocumentWithAuthorc                       sf   e Zd ZeejddZ‡ fdd„Zdd„ Zdd„ Zd	d
„ Z	‡ fdd„Z
dd„ Zdd„ Zdd„ Z‡  ZS )Ú3TestMultipleCustomDocumentUploaderWithRequiredFieldúWilliam Shakespeare)Úauthorc                    s0   t ƒ  ¡  tjjtj tƒ ¡tƒ | j	d| _
d S )N)Úfor_content_typer  Úuploaded_by_user)rÉ  r(   r   r;   r<   r   Úget_for_modelr   r   r6  Úuploaded_documentr$   rÊ  r&   r'   r(   Î  s   
ýz9TestMultipleCustomDocumentUploaderWithRequiredField.setUpc                 C   s`  | j  tdƒdtddƒi¡}|  |jd¡ |  |d d¡ |  |d¡ |  d	|j¡ |  	|jd	 j
j¡ |  |jd
 d|jd	 j ¡ |  |jd d|jd	 j ¡ |  d|j¡ |  t|jd jƒttƒ jƒddh ¡ |  |jd jd d¡ t |j ¡ ¡}|  d|¡ |  d|¡ |  d|¡ |  |d |jd	 j¡ |  	|d ¡ |  d|d ¡ dS )z‡
        This tests that a POST request to the add view saves the document as an UploadedFile
        and returns an edit form
        r…   r‘  r’  r“  r7   r”  r•  r–  râ  r—  ú;/admin/documents/multiple/create_from_uploaded_document/%d/r™  ú+/admin/documents/multiple/delete_upload/%d/r›  r  ry   r5   Úuploaded_file_idr  r   N)r.   r  r
   r   r=   r>   r?   râ   rU   rÃ   r  Úsizer™   rž  rŸ  r   r   r¡  r¢  r£  rj   r£   r¤  r½  r&   r&   r'   r§  Ø  sP   
ÿþÿ
ÿþ
ÿþþ
þzATestMultipleCustomDocumentUploaderWithRequiredField.test_add_postc                 C   s¾   | j  tdƒdtddƒdœ¡}|  |jd¡ |  |d d¡ |  |d	¡ |  d
|j¡ |  d|jd
 j	j
¡ t |j ¡ ¡}|  d|¡ |  d|¡ |  |d |jd
 j¡ |  |d ¡ dS )r¨  r…   r©  rª  r“  r«  r7   r”  r•  r–  râ  r¬  rå  r›  r  N)r.   r  r
   r   r=   r>   r?   râ   rU   r  rr   r¢  r£  rj   r£   r™   rÃ   r½  r&   r&   r'   r­    s*   þþ	ÿ
þzLTestMultipleCustomDocumentUploaderWithRequiredField.test_add_post_with_titlec                 C   s|  t  ¡ }|jdd}| j tdƒtddƒ|jdœ¡}|  |j	d¡ |  |d d	¡ |  
|d
¡ |  d|j¡ |  |jd jj¡ |  |jd d|jd j ¡ |  |jd d|jd j ¡ |  d|j¡ |  t|jd jƒttƒ jƒdh dhB ¡ |  |jd jd d¡ t |j ¡ ¡}|  d|¡ |  d|¡ |  d|¡ |  |d |jd j¡ |  |d ¡ |  d|d ¡ dS )r®  rp   rq   r…   r’  r“  r¯  r7   r”  r•  r–  râ  r—  rã  r™  rä  r›  r  ry   r5   rå  r  r   N)r   r|   r}   r.   r  r
   r   r™   r=   r>   r?   râ   rU   rÃ   r  ræ  rž  rŸ  r   r   r¡  r¢  r£  rj   r£   )r%   r   rœ   rB   r¦  r&   r&   r'   r°  0  sV   þþ	ÿ
ÿþ
ÿþþ
þzRTestMultipleCustomDocumentUploaderWithRequiredField.test_add_post_with_collectionsc                    rÈ  )NrÝ  )rÉ  r…  r=   r   rÞ  r$   rÊ  r&   r'   r…  l  rÌ  zHTestMultipleCustomDocumentUploaderWithRequiredField.check_doc_after_editc              	   C   sN  t j ¡ }tj ¡ }| j td| jjfdd| jj dd| jj dd| jj di¡}t j ¡ }tj ¡ }|  	||¡ |  	||¡ |  	|j
d¡ |  	|d	 d
¡ |  d|j¡ |  d|jd j¡ |  	|jd d|jd j ¡ |  	|jd d|jd j ¡ |  |jd dd¡ t |j ¡ ¡}|  d|¡ |  d|d ¡ |  |d ¡ dS )z˜
        Posting an invalid form to the create_from_uploaded_document view throws a validation error
        and leaves the UploadedFile intact
        ú2wagtaildocs:create_multiple_from_uploaded_documentr•   úuploaded-document-%d-titler‚  úuploaded-document-%d-tagsr×   úuploaded-document-%d-authorr7   r”  r•  r›  rÞ  r—  rã  râ  r™  rä  rØ   r  N)r   r;   rˆ   r   r.   r  r
   râ  r™   r=   r>   râ   rU   rŸ  r¿  r¢  r£  rj   r£   r®   )r%   Údoc_count_beforeÚuploaded_doc_count_beforerB   Údoc_count_afterÚuploaded_doc_count_afterr¦  r&   r&   r'   Ú$test_create_from_upload_invalid_postp  sP   

þ
ûû


ÿþ
ÿþÿzXTestMultipleCustomDocumentUploaderWithRequiredField.test_create_from_upload_invalid_postc              	   C   s:  t j ¡ }tj ¡ }| j td| jjfdd| jj dd| jj dd| jj di¡}t j ¡ }tj ¡ }|  	|j
d	¡ |  	|d
 d¡ t |j ¡ ¡}|  d|¡ |  |d ¡ |  	||d ¡ |  	||d ¡ t jj|d d}|  	|jd¡ |  	|jd¡ |  |jj¡ |  |j¡ |  |j¡ |  d|j ¡ ¡ dS )zi
        Posting a valid form to the create_from_uploaded_document view will create the document
        rç  r•   rè  r‚  ré  zfairies, donkeyrê  rÝ  r7   r”  r•  rœ  r  rY   rJ  ÚdonkeyN)r   r;   rˆ   r   r.   r  r
   râ  r™   r=   r>   r¢  r£  rj   r£   râ   rÃ   r/   r5   rÞ  r  rr   r  r  r¬   r„  )r%   rë  rì  rB   rí  rî  r¦  r   r&   r&   r'   Útest_create_from_upload©  s>   

þ


÷û

zKTestMultipleCustomDocumentUploaderWithRequiredField.test_create_from_uploadc                 C   sv   | j  td| jjfd¡}|  |jd¡ |  |d d¡ |  tj	j
| jjd ¡ ¡ t |j ¡ ¡}|  |d ¡ dS )	z\
        This tests that a POST request to the delete view deletes the UploadedFile
        z"wagtaildocs:delete_upload_multipler•   r7   r”  r•  rJ  r  N)r.   r  r
   râ  r™   r=   r>   r®   r   r;   r»   r  r¢  r£  rj   r£   rÃ   r½  r&   r&   r'   Útest_delete_uploaded_documentÛ  s   
ÿÿÿzQTestMultipleCustomDocumentUploaderWithRequiredField.test_delete_uploaded_document)rÆ   rÇ   rÈ   rÍ  r  r»  r(   r§  r­  r°  r…  rï  rñ  rò  rÎ  r&   r&   rÊ  r'   rÜ  È  s    ÿ
7!<92rÜ  c                   @   sv   e Zd Zdd„ Zdd„ Zdd„ Zeddd	d
„ ƒZdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestDocumentChooserViewc                 C   ó   |   ¡ | _d S r!   ©r#   r6  r$   r&   r&   r'   r(   õ  ó   zTestDocumentChooserView.setUpc                 C   ó^   | j  tdƒ¡}|  |jd¡ |  |d¡ t |j 	¡ ¡}|  |d d¡ |  
d|d ¡ d S )Núwagtaildocs_chooser:chooser7   ú)wagtailadmin/generic/chooser/chooser.htmlÚstepÚchooser÷   rf   ©r.   r/   r
   r=   r>   r?   r¢  r£  rj   r£   r¤  r½  r&   r&   r'   rC   ø  s   z#TestDocumentChooserView.test_simplec                 C   r  )Nrp   rq   rŽ   rø  r   r  r   r&   r&   r'   rE    r  z;TestDocumentChooserView.test_simple_with_collection_nestingr  r  c                 C   sn   | j  tdƒ¡}|  |jd¡ t |j ¡ ¡}|  |d d¡ |  	|d¡ |  
d|d ¡ |  
d|d ¡ d S )	Nrø  r7   rú  rû  rù  z0name="document-chooser-upload-fancy_description"rf   r÷   )r.   r/   r
   r=   r>   r¢  r£  rj   r£   r?   râ   r½  r&   r&   r'   Útest_with_custom_document_model  s   ÿz7TestDocumentChooserView.test_with_custom_document_modelc                 C   ó:   | j  tdƒddi¡}|  |jd¡ |  |jd d¡ d S )Nú"wagtaildocs_chooser:choose_resultsrÐ   rÑ   r7   Úsearch_query©r.   r/   r
   r=   r>   rU   rA   r&   r&   r'   rÓ     s
   ÿz#TestDocumentChooserView.test_searchc                 C   rD   rE   rG   rK   r&   r&   r'   rN   "  rO   z!TestDocumentChooserView.make_docsc                 C   rP   )Nrÿ  rQ   rR   r7   z wagtaildocs/chooser/results.htmlÚresultsrT   rA   r&   r&   r'   rW   '  s   ÿz'TestDocumentChooserView.test_paginationc                 C   ó0   |   ¡  | j tdƒddi¡}|  |jd¡ d S )Nrÿ  rQ   rX   é”  ©rN   r.   r/   r
   r=   r>   rA   r&   r&   r'   rZ   5  ó
   ÿz/TestDocumentChooserView.test_pagination_invalidc                 C   r  )Nrÿ  rQ   r[   r  r  rA   r&   r&   r'   r^   ?  r  z4TestDocumentChooserView.test_pagination_out_of_rangec                    sœ   t jjjdˆ jd}t jjjdd ‡ fdd„}ˆ  d|¡ ˆ j tdƒ¡}W d   ƒ n1 s1w   Y  ˆ  	t
|jd	 ƒd
¡ ˆ  	|jd	 d |¡ d S )NúTest document shown©r5   rà  úTest document not shownr4   c                    ó   | j ˆ jdS ©N)rà  ©r»   r6  ©rè   Úrequestr$   r&   r'   Úfilter_documentsR  ó   zUTestDocumentChooserView.test_construct_queryset_hook_browse.<locals>.filter_documentsÚ#construct_document_chooser_querysetrø  r  rY   r   ©r   r:   r;   r<   r6  Úregister_hookr.   r/   r
   r=   rŠ   rU   ©r%   rM   r  rB   r&   r$   r'   Ú#test_construct_queryset_hook_browseI  s   þÿÿýz;TestDocumentChooserView.test_construct_queryset_hook_browsec                 C   s<   |   ¡  | j tdƒ¡}| j|ddd | j|ddd d S )Nr,   rd   Tre   rg   )rN   r.   r/   r
   rh   rA   r&   r&   r'   ro   ^  s   z6TestDocumentChooserView.test_index_without_collectionsc                 C   sP   t  ¡ }|jdd |  ¡  | j tdƒ¡}| j|ddd | j|ddd d S )Nrp   rq   r,   rd   Tre   rg   )r   r|   r}   rN   r.   r/   r
   r@   rÿ   r&   r&   r'   r   e  s   z2TestDocumentChooserView.test_index_with_collectionN)rÆ   rÇ   rÈ   r(   rC   rE  r	   rý  rÓ   rN   rW   rZ   r^   r  ro   r   r&   r&   r&   r'   ró  ô  s    
	


ró  c                   @   s"   e Zd ZdgZdd„ Zdd„ ZdS )ÚTestDocumentChooserViewSearchztest_empty.jsonc                 C   rô  r!   rõ  r$   r&   r&   r'   r(   s  rö  z#TestDocumentChooserViewSearch.setUpc                    s¢   t jjjdˆ jd}t jjjdd ‡ fdd„}ˆ  d|¡ ˆ j tdƒd	d
i¡}W d   ƒ n1 s4w   Y  ˆ  	t
|jd ƒd¡ ˆ  	|jd d |¡ d S )Nr  r  r	  r4   c                    r
  r  r  r  r$   r&   r'   r    r  z[TestDocumentChooserViewSearch.test_construct_queryset_hook_search.<locals>.filter_documentsr  rÿ  rÐ   rÚ   r  rY   r   r  r  r&   r$   r'   Ú#test_construct_queryset_hook_searchv  s"   þÿÿÿýzATestDocumentChooserViewSearch.test_construct_queryset_hook_searchN)rÆ   rÇ   rÈ   Úfixturesr(   r  r&   r&   r&   r'   r  p  s    r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestDocumentChooserChosenViewc                 C   s   |   ¡  tjjjdd| _d S )Nr
  r4   )r#   r   r:   r;   r<   rM   r$   r&   r&   r'   r(     s   z#TestDocumentChooserChosenView.setUpc                 C   sL   | j  td| jjfd¡}|  |jd¡ t |j	 
¡ ¡}|  |d d¡ d S )Nzwagtaildocs_chooser:chosenr•   r7   rú  Úchosen)r.   r/   r
   rM   r™   r=   r>   r¢  r£  rj   r£   r½  r&   r&   r'   rC   •  s   ÿz)TestDocumentChooserChosenView.test_simpleN)rÆ   rÇ   rÈ   r(   rC   r&   r&   r&   r'   r  Ž  s    r  c                   @   s6   e Zd Zdd„ Zdd„ Zdd„ Zeddd	d
„ ƒZdS )ÚTestDocumentChooserUploadViewc                 C   r    r!   r"   r$   r&   r&   r'   r(   Ÿ  r)   z#TestDocumentChooserUploadView.setUpc                 C   sN   | j  tdƒ¡}|  |jd¡ |  |d¡ t |j 	¡ ¡}|  |d d¡ d S )Núwagtaildocs_chooser:creater7   ú/wagtailadmin/generic/chooser/creation_form.htmlrú  Úreshow_creation_form)
r.   r/   r
   r=   r>   r?   r¢  r£  rj   r£   r½  r&   r&   r'   rC   ¢  s   ÿz)TestDocumentChooserUploadView.test_simplec                 C   s`   t ƒ }d|dœ}| j tdƒ|¡}t |j ¡ ¡}|  |d d¡ |  	t
jjjdd ¡ ¡ d S ©Nr
  )údocument-chooser-upload-titleúdocument-chooser-upload-filer  rú  r  r4   )r   r.   r  r
   r¢  r£  rj   r£   r=   rÃ   r   r:   r;   r»   r  )r%   r  r  rB   r¦  r&   r&   r'   r  «  s   þz'TestDocumentChooserUploadView.test_postr  r  c                 C   sp   t  ¡ }|jdd}tjjdtƒ |d | j t	dƒdtƒ |j
dœ¡}|  |jd¡ |  |d¡ |  |d	¡ d S )
Nrp   rq   r
  r  r  )r   r!  z"document-chooser-upload-collectionr7   r  r  )r   r|   r}   r   r;   r<   r   r.   r  r
   r™   r=   r>   r?   r@   )r%   r   rœ   rB   r&   r&   r'   Útest_unique_together_validation½  s*   ýýþ
ÿÿz=TestDocumentChooserUploadView.test_unique_together_validationN)rÆ   rÇ   rÈ   r(   rC   r  r	   r"  r&   r&   r&   r'   r  ž  s    	r  c                   @   r  )
Ú3TestDocumentChooserUploadViewWithLimitedPermissionsc                 C   r  r  r.  r2  r&   r&   r'   r(   Þ  r7  z9TestDocumentChooserUploadViewWithLimitedPermissions.setUpc                 C   r÷  )Nr  r7   r  rú  r  Úid_collectionÚhtmlFragmentrü  r½  r&   r&   r'   rC   ø  s   ÿz?TestDocumentChooserUploadViewWithLimitedPermissions.test_simplec                 C   r÷  )Nrø  r7   rù  rú  rû  r$  rf   rü  r½  r&   r&   r'   Útest_chooser_view  s   zETestDocumentChooserUploadViewWithLimitedPermissions.test_chooser_viewc                 C   sx   t ƒ }d|dœ}| j tdƒ|¡}t |j ¡ ¡}|  |d d¡ t	j
jjdd}|  | ¡ ¡ |  | ¡ j| j¡ d S r  )r   r.   r  r
   r¢  r£  rj   r£   r=   r   r:   r;   r»   rÃ   r  r/   ry   rœ   )r%   r  r  rB   r¦  r   r&   r&   r'   r    s   þz=TestDocumentChooserUploadViewWithLimitedPermissions.test_postN)rÆ   rÇ   rÈ   r(   rC   r&  r  r&   r&   r&   r'   r#  Ý  s
    r#  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestUsageCountú	test.jsonc                 C   r    r!   r"   r$   r&   r&   r'   r(   )  r)   zTestUsageCount.setUpc                 C   s(   t jjjdd}|  | ¡  ¡ d¡ d S )NrY   rJ  r   )r   r:   r;   r/   r=   Ú	get_usagerˆ   ©r%   r   r&   r&   r'   Ú test_unused_document_usage_count,  ó   z/TestUsageCount.test_unused_document_usage_countc                 C   s|   | j dd$ tjjjdd}tjjdd}tƒ }||_||_| 	¡  W d   ƒ n1 s-w   Y  |  
| ¡  ¡ d¡ d S )NTrm  rY   rJ  r¶   )rx  r   r:   r;   r/   r   r   ÚpageÚlink_documentrJ   r=   r)  rˆ   ©r%   r   r-  Úevent_page_related_linkr&   r&   r'   Útest_used_document_usage_count0  s   
úz-TestUsageCount.test_used_document_usage_countc                 C   sˆ   | j dd$ tjjjdd}tjjdd}tƒ }||_||_| 	¡  W d   ƒ n1 s-w   Y  | j
 tddd¡}|  |d	¡ d S )
NTrm  rY   rJ  r¶   r”   ©rY   r•   zUsed 1 time)rx  r   r:   r;   r/   r   r   r-  r.  rJ   r.   r
   r@   ©r%   r   r-  r0  rB   r&   r&   r'   Útest_usage_count_appears:  s   
úz'TestUsageCount.test_usage_count_appearsc                 C   ó$   | j  tddd¡}|  |d¡ d S )Nr”   r2  r•   rQ  )r.   r/   r
   r@   rA   r&   r&   r'   Útest_usage_count_zero_appearsE  s   z,TestUsageCount.test_usage_count_zero_appearsN)	rÆ   rÇ   rÈ   r  r(   r+  r1  r4  r6  r&   r&   r&   r'   r'  &  s    
r'  c                   @   sJ   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚTestGetUsager(  c                 C   r    r!   r"   r$   r&   r&   r'   r(   M  r)   zTestGetUsage.setUpc                 C   s(   t jjjdd}|  t| ¡ ƒg ¡ d S )NrY   rJ  )r   r:   r;   r/   r=   rà   r)  r*  r&   r&   r'   Útest_unused_document_get_usageP  r,  z+TestGetUsage.test_unused_document_get_usagec                 C   sÈ   | j dd$ tjjjdd}tjjdd}tƒ }||_||_| 	¡  W d   ƒ n1 s-w   Y  |  
| ¡ d t¡ |  
| ¡ d d t¡ |  
| ¡ d d t¡ |  
| ¡ d d d t¡ d S )NTrm  rY   rJ  r¶   r   )rx  r   r:   r;   r/   r   r   r-  r.  rJ   ÚassertIsInstancer)  rÓ  r   rà   r   r/  r&   r&   r'   Útest_used_document_get_usageT  s   
ú z)TestGetUsage.test_used_document_get_usagec                 C   sØ   | j dd$ tjjjdd}tjjdd}tƒ }||_||_| 	¡  W d   ƒ n1 s-w   Y  | j
 tddd¡}|  |d	¡ |  |d
¡ | j|ddd |  tdƒddœtdddddœddddœg|j¡ d S )NTrm  rY   rJ  r¶   rs  r2  r•   Ú	Christmasú<table class="listing">ú<td>Event page</td>re   r,   rø   rù   r”   ztest documentr×   ÚUsage)rŒ   rú   Úsublabel)rx  r   r:   r;   r/   r   r   r-  r.  rJ   r.   r
   r@   rû   rj   r3  r&   r&   r'   Útest_usage_pageb  s4   
úþ
þý÷ðzTestGetUsage.test_usage_pagec                 C   r5  )Nrs  r2  r•   r<  )r.   r/   r
   rh   rA   r&   r&   r'   Útest_usage_page_no_usage  s   z%TestGetUsage.test_usage_page_no_usagec                 C   s4  | j dd$ tjjjdd}tjjdd}tƒ }||_||_| 	¡  W d   ƒ n1 s-w   Y  | j
dddd	}tjjd
dd}tjjddd}tjjdd| _tjj| jt ¡ |d |j | j¡ |j |¡ | jddd | j tddgd¡}|  |jd¡ |  |d¡ |  |d¡ | j|ddd d S )NTrm  rY   rJ  r¶   Ú
changeonlyúchangeonly@example.comr)  r*  r  Úchange_documentr   r#  r$  úDocument changersrq   r%  r-  rs  r•   r7   r;  z(Private page)r=  re   )rx  r   r:   r;   r/   r   r   r-  r.  rJ   r0  r   r   r<   Úchangers_groupr   r   r|   r1  r­   r=  r#   r.   r
   r=   r>   rh   r@   )r%   r   r-  r0  r6  Úchange_permissionr4  rB   r&   r&   r'   Ú+test_usage_page_with_only_change_permission†  s>   
ú	ÿÿÿýz8TestGetUsage.test_usage_page_with_only_change_permissionc                 C   s¨   | j dddd}tjjddd}tjjdd	d}tjjd
d| _tjj| jt 	¡ |d |j
 | j¡ |j |¡ | jddd | j tddgd¡}|  |jd¡ d S )NÚaddonlyzaddonly@example.comr)  r*  r  r  r   r#  r$  zDocument addersrq   r%  r-  rs  rY   r•   r;  )r0  r   r;   r/   r   r<   Úadders_groupr   r   r|   r1  r­   r=  r#   r.   r
   r=   r>   )r%   r6  Úadd_permissionr4  rB   r&   r&   r'   Ú)test_usage_page_without_change_permission¬  s(   ÿÿÿýz6TestGetUsage.test_usage_page_without_change_permissionN)rÆ   rÇ   rÈ   r  r(   r8  r:  r@  rA  rH  rL  r&   r&   r&   r'   r7  J  s    &r7  c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestEditOnlyPermissionsc                 C   sÊ   t ƒ }t ¡ | _| jjdd| _| jjdd| _tjj	j
d|| jd| _| jdddd	}tj	jd
dd}tj	jddd}tj	j
dd| _tj	j
| j| j|d |j | j¡ |j |¡ | jddd d S )Nrp   rq   ú
Nice plansr
  r  rB  rC  r)  r*  r  rD  r   r#  r$  rE  r%  r-  )r   r   r|   r   r}   rœ   Únice_plans_collectionr   r:   r;   r<   rM   r0  r   r/   r   rF  r   r1  r­   r=  r#   )r%   r  r6  rG  r4  r&   r&   r'   r(   È  s2   
ÿÿÿÿýzTestEditOnlyPermissions.setUpc                 C   sF   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr,   r7   r8   r9   r
  )r.   r/   r
   r=   r>   r?   rh   r@   rA   r&   r&   r'   Útest_get_indexê  s
   z&TestEditOnlyPermissions.test_get_indexc                 C   rþ  )Nr,   rÐ   rÑ   r7   rÒ   r  rA   r&   r&   r'   rÓ   õ  s   z#TestEditOnlyPermissions.test_searchc                 C   ó$   | j  tdƒ¡}|  |tdƒ¡ d S )Nró   rz  ©r.   r/   r
   r  rA   r&   r&   r'   Útest_get_addú  ó   z$TestEditOnlyPermissions.test_get_addc                 C   s¶   | j  td| jjfd¡}|  |jd¡ |  |d¡ |  |d¡ t	j
jddd}tj
j| j| j|d	 | j  td| jjfd¡}|  |jd¡ |  |d¡ |  |d
¡ |  |d¡ d S )Nr”   r•   r7   rC  rõ   r  r  r   r%  rN  rp   )r.   r/   r
   rM   r™   r=   r>   r?   rh   r   r;   r   r<   rF  rœ   r@   ©r%   rB   rK  r&   r&   r'   Útest_get_editÿ  s6   ÿþÿýÿþz%TestEditOnlyPermissions.test_get_editc                 C   sâ   | j  td| jjfddddœ¡}|  |tdƒ¡ |  tjj	j
| jjdjd¡ |  tjj	j
| jjdj| j¡ tj	j
dd	d
}tj	j| j| j|d | j  td| jjfdd| jjddœ¡ |  tjj	j
| jjdj| j¡ d S )Nr”   r•   rI  r×   r  r,   rJ  r  r  r   r%  )r5   ry   r  )r.   r  r
   rM   r™   r  r=   r   r:   r;   r/   r5   ry   rO  r   r   r<   rF  rœ   rU  r&   r&   r'   Útest_post_edit"	  sD   þþ	þþÿýýþþz&TestEditOnlyPermissions.test_post_editc                 C   s8   | j  td| jjfd¡}|  |jd¡ |  |d¡ d S )Nrh  r•   r7   rq  )r.   r/   r
   rM   r™   r=   r>   r?   rA   r&   r&   r'   Útest_get_deleteR	  s
   ÿz'TestEditOnlyPermissions.test_get_deletec                 C   rQ  )Nr…   rz  rR  rA   r&   r&   r'   Útest_get_add_multipleY	  rT  z-TestEditOnlyPermissions.test_get_add_multipleN)rÆ   rÇ   rÈ   r(   rP  rÓ   rS  rV  rW  rX  rY  r&   r&   r&   r'   rM  Ç  s    "#0rM  )Dr¢  Úunittestr   Údjango.contrib.auth.modelsr   r   Ú"django.contrib.contenttypes.modelsr   Údjango.core.files.uploadedfiler   Údjango.testr   r   Údjango.test.utilsr	   Údjango.urlsr
   Údjango.utils.htmlr   Údjango.utils.httpr   Údjango.utils.textr   Úwagtail.admin.admin_url_finderr   Úwagtail.documentsr   r   Úwagtail.documents.tests.utilsr   Úwagtail.modelsr   r   r   r   r   Úwagtail.test.testapp.modelsr   r   r   r   r   Úwagtail.test.utilsr   Ú!wagtail.test.utils.template_testsr   Úwagtail.test.utils.timestampsr   r   rÉ   rë   rò   r  r9  re  rg  r  rÅ  rÏ  rÜ  ró  r  r  r  r#  r'  r7  rM  r&   r&   r&   r'   Ú<module>   sj      h! L  9g  q
ÿ  -|?I$}