U
    {®Þh«W ã                   @   sl  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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) G dd„ de)eƒZ*G dd„ de)eƒZ+G dd„ de)eƒZ,G dd„ de)eƒZ-G dd„ de)eƒZ.G dd„ de)eƒZ/eddG dd „ d e)eƒƒZ0G d!d"„ d"e)eƒZ1G d#d$„ d$e)eƒZ2eddG d%d&„ d&e2ƒƒZ3G d'd(„ d(e3ƒZ4ed)dG d*d+„ d+e2ƒƒZ5G d,d-„ d-e)eƒZ6G d.d/„ d/e)eƒZ7G d0d1„ d1e)eƒZ8G d2d3„ d3e)eƒZ9G d4d5„ d5e)eƒZ:G d6d7„ d7e)eƒZ;G d8d9„ d9e)eƒZ<G d:d;„ d;e)eƒZ=dS )<é    N)Úmock)ÚGroupÚ
Permission)ÚContentType)ÚSimpleUploadedFile)ÚTestCaseÚTransactionTestCase)Úoverride_settings)Úreverse)Úescape)Ú	urlencode)ÚAdminURLFinder)Úget_document_modelÚmodels)Úget_test_document_file)Ú
CollectionÚGroupCollectionPermissionÚPageÚReferenceIndexÚUploadedFile)ÚCustomDocumentÚCustomDocumentWithAuthorÚ	EventPageÚEventPageRelatedLinkÚVariousOnDeleteModel)ÚWagtailTestUtilsc                   @   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   s   |   ¡  d S ©N©Úlogin©Úself© r"   úp/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/documents/tests/test_admin_views.pyÚsetUp"   s    zTestDocumentIndexView.setUpc                 C   s   | j  tdƒ|¡S ©Núwagtaildocs:index©ÚclientÚgetr
   ©r!   Úparamsr"   r"   r#   r)   %   s    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   s.   t dƒD ] }tjdt|ƒ d}| ¡  qd S ©Né2   zTest r-   ©Úranger   r3   ÚstrÚsave©r!   ÚiÚdocumentr"   r"   r#   Ú	make_docs3   s    zTestDocumentIndexView.make_docsc                 C   sP   |   ¡  | j tdƒddi¡}|  |jd¡ |  |d¡ |  |jd jd¡ d S )Nr&   Úpé   r0   r1   Úpage_obj©	rF   r(   r)   r
   r6   r7   r8   ÚcontextÚnumberr:   r"   r"   r#   Útest_pagination8   s
    z%TestDocumentIndexView.test_paginationc                 C   s(   |   ¡  |  ddi¡}|  |jd¡ d S )NrG   úHello World!é”  ©rF   r)   r6   r7   r:   r"   r"   r#   Útest_pagination_invalidD   s    z-TestDocumentIndexView.test_pagination_invalidc                 C   s(   |   ¡  |  ddi¡}|  |jd¡ d S )NrG   éŸ† rO   rP   r:   r"   r"   r#   Útest_pagination_out_of_rangeL   s    z2TestDocumentIndexView.test_pagination_out_of_rangec                 C   s2   ddg}|D ] }|   d|i¡}|  |jd¡ qd S )Nr.   z-created_atÚorderingr0   )r)   r6   r7   )r!   Z	orderingsrT   r;   r"   r"   r#   Útest_orderingT   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"])rF   r)   ÚassertNotContainsÚget_soupÚcontentÚ
select_oneÚassertIsNone)r!   r;   ÚsoupZcollection_selectr"   r"   r#   Útest_index_without_collectionsZ   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 ƒdddg¡ d S )Nú
Evil plans©Únamez
Good plansrV   TrW   rY   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>v   s   ÿzDTestDocumentIndexView.test_index_with_collection.<locals>.<listcomp>ÚRoot)
r   Úget_first_root_nodeÚ	add_childrF   r)   r9   r[   r\   Úselectr6   )r!   Úroot_collectionr;   r_   Zcollection_optionsr"   r"   r#   Útest_index_with_collectiond   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 plansrb   Z	Itinerary©r.   ri   Úcollection_idúwagtaildocs:add_multiplez	<a href="ú?collection_id=ú"rI   é   zTest 42z0
            <input data-bulk-action-parent-id="z–"
                   data-bulk-action-select-all-checkbox
                   type="checkbox"
                   aria-label="Select all"
            />TrH   )rX   Úcount)r   rl   rm   r   r3   r4   r5   rF   r)   Úpkr
   r9   r6   ÚlenrK   rZ   )r!   ro   Ztravel_plansr;   Ú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 )Nra   rb   úEviler plansú,&nbsp;&nbsp;&nbsp;&nbsp;&#x21b3 Eviler plans)r   rl   rm   r)   r9   ©r!   ro   Z
evil_plansr;   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 )Nra   rb   úTest docrq   rr   r0   úwagtaildocs:edit©ÚargsÚnextú?)r   rl   rm   r   r3   r4   r5   r)   Úidr6   r7   r
   r   Ú_requestZget_full_pathr9   )r!   ro   Úevil_plans_collectionÚdocr;   Zedit_urlr+   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">rv   T)rw   Zallow_extra_attrs)r)   r\   Údecoder
   ZassertTagInHTML)r!   r;   rX   Z
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 tagsr-   ÚoneÚtwor0   zinput[name=tag][checked]ú#id_tag labelc                 S   s   g | ]}|j d d‘qS )Trd   ©rf   )rh   Útagsr"   r"   r#   rj   Ò   s     z3TestDocumentIndexView.test_tags.<locals>.<listcomp>)r   r3   r4   r5   r”   Úaddr)   r6   r7   r[   r\   rn   ÚassertFalseÚassertCountEqual)r!   Údocument_two_tagsr;   r_   Z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 tagsr-   úTest document with one tagr   r   r‘   z"Test document with a different tagZ	unrelatedrI   é   ÚtagrH   rv   é   r’   c                 S   s&   g | ]}|  d ¡dk	r|jdd‘qS )zinput[checked]NTrd   )r]   rf   )rh   r   r"   r"   r#   rj   þ   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)Ú	separatorre   r“   )rh   Úfilterr"   r"   r#   rj   	  s     zTag: onezTag: unrelated)r   r3   r4   r5   r”   r•   r)   r6   rK   Ú	paginatorrw   r[   r\   rn   r—   )r!   Údocument_one_tagr˜   Zdocument_unrelated_tagr;   r_   r”   Zactive_filtersr"   r"   r#   Útest_tag_filteringÖ   sD    ÿÿÿ
þú

þz(TestDocumentIndexView.test_tag_filteringc                 C   sž   t ddƒD ]8}tjjjd| d}|d dkr
|j d¡ | ¡  q
|  dddœ¡}|  	|j
d	¡ |j d
¡}|  d|kp€d|k¡ |  d|kp–d|k¡ d S )Nrv   é‚   zTest document %ir-   rH   r   Zeven)r   rG   r0   Úutf8z?p=1&amp;tag=evenz?tag=even&amp;p=1z?p=3&amp;tag=evenz?tag=even&amp;p=3)r@   r   r3   r4   r5   r”   r•   rB   r)   r6   r7   r\   r   Ú
assertTrue)r!   rD   rE   r;   Zresponse_bodyr"   r"   r#   Ú)test_tag_filtering_preserves_other_params  s    
ÿÿz?TestDocumentIndexView.test_tag_filtering_preserves_other_paramsN)Ú__name__Ú
__module__Ú__qualname__r$   r)   r<   rF   rM   rQ   rS   rU   r`   rp   r{   r   rŠ   rŽ   r™   r¤   r¨   r"   r"   r"   r#   r   !   s"   
!	7r   c                   @   sP   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S )ÚTestDocumentIndexViewSearchc                 C   s   t jdd |  ¡  d S ©Nrk   rb   ©r   Zadd_rootr   r    r"   r"   r#   r$   $  s    z!TestDocumentIndexViewSearch.setUpc                 C   s   | j  tdƒ|¡S r%   r'   r*   r"   r"   r#   r)   (  s    zTestDocumentIndexViewSearch.getc                 C   s.   t dƒD ] }tjdt|ƒ d}| ¡  qd S r=   r?   rC   r"   r"   r#   rF   +  s    z%TestDocumentIndexViewSearch.make_docsc                 C   sj   t jjjdd t jjjdd |  ddi¡}|  |jd¡ |  |jd d¡ |  |d¡ |  	|d¡ d S )Nr,   r-   r/   ÚqÚHellor0   Úquery_string)
r   r3   r4   r5   r)   r6   r7   rK   r9   rZ   r:   r"   r"   r#   Útest_search0  s    z'TestDocumentIndexViewSearch.test_searchc                 C   sj   t jjjdd t jjjdd |  ddi¡}|  |jd¡ |  |jd d¡ |  |d¡ |  	|d¡ d S )Nr,   r-   r/   r¯   Zbonjr0   r±   )
r   r3   r4   r5   r)   r6   r7   rK   rZ   r9   r:   r"   r"   r#   Útest_search_partial:  s    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 )Nr,   r-   r/   r¯   Ú r0   úThis field is required.)	r   r3   r4   r5   r)   r6   r7   rZ   r9   r:   r"   r"   r#   Útest_empty_qD  s    z(TestDocumentIndexViewSearch.test_empty_qc                 C   s@   |   ¡  |  ddi¡}|  |jd¡ |  |d¡ |  |d¡ d S )Nr¯   ÚTestr0   r1   zThere are 50 matches)rF   r)   r6   r7   r8   r9   r:   r"   r"   r#   Útest_pagination_qN  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š   r-   r›   r   r   r‘   Útest)r   r¯   rI   rH   )r   r3   r4   r5   r”   r•   r)   r6   rK   r¢   rw   )r!   r£   r˜   r;   r"   r"   r#   Ú#test_tag_filtering_with_search_termW  s    ÿÿz?TestDocumentIndexViewSearch.test_tag_filtering_with_search_termN)r©   rª   r«   r$   r)   rF   r²   r³   r¶   r¸   rº   r"   r"   r"   r#   r¬   #  s   


	r¬   c                   @   s0   e Zd Zdd„ Zi fdd„Zdd„ Zdd„ Zd	S )
ÚTestDocumentIndexResultsViewc                 C   s   t jdd |  ¡  d S r­   r®   r    r"   r"   r#   r$   k  s    z"TestDocumentIndexResultsView.setUpc                 C   s   | j  tdƒ|¡S )Nr‹   r'   r*   r"   r"   r#   r)   o  s    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 reportr-   r¯   Úboringr„   ú/admin/documents/?q=boringr0   ú/admin/documents/edit/ú/?rV   TrW   rY   )r   r3   r4   r5   r)   r   r6   r7   r9   rx   rZ   )r!   r‰   r;   r+   r"   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 )Nra   rb   r¼   r-   r¯   r½   r„   r¾   r0   r¿   rÀ   rV   TrW   rY   )r   rl   rm   r   r3   r4   r5   r)   r   r6   r7   r9   rx   )r!   ro   r‰   r;   r+   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»   j  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   s   |   ¡  d S r   r   r    r"   r"   r#   r$   Œ  s    zTestDocumentAddView.setUpc                 C   sR   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Núwagtaildocs:addr0   úwagtaildocs/documents/add.htmlúK<label class="w-field__label" for="id_collection" id="id_collection-label">úenctype="multipart/form-data"úwagtailadmin/js/draftail.js©r(   r)   r
   r6   r7   r8   rZ   r9   r:   r"   r"   r#   Útest_get  s    þzTestDocumentAddView.test_getc                 C   sZ   t  ¡ }|jdd | j tdƒ¡}|  |jd¡ |  |d¡ |  	|d¡ |  	|d¡ d S )Nra   rb   rÃ   r0   rÄ   rÅ   ©
r   rl   rm   r(   r)   r
   r6   r7   r8   r9   ©r!   ro   r;   r"   r"   r#   Útest_get_with_collections¡  s    þz-TestDocumentAddView.test_get_with_collectionsc                 C   s@   t  ¡ }|jdd}|jdd | j tdƒ¡}|  |d¡ d S )Nra   rb   r|   rÃ   r}   ©r   rl   rm   r(   r)   r
   r9   r~   r"   r"   r#   Ú test_get_with_collection_nesting¯  s
    z4TestDocumentAddView.test_get_with_collection_nestingútests.CustomDocument©ZWAGTAILDOCS_DOCUMENT_MODELc                 C   sR   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )NrÃ   r0   rÄ   rÆ   zname="fancy_description"rÇ   )r(   r)   r
   r6   r7   r8   r9   r:   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©r.   ÚfilerÃ   r&   r-   )r   r(   Úpostr
   ÚassertRedirectsr   r3   r4   r)   r   rl   r6   ri   r§   Ú	file_sizeÚ	file_hash)r!   Ú	fake_fileÚ	post_datar;   rE   ro   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 )Nra   rb   rÓ   ©r.   rÕ   ri   rÃ   r&   r-   )r   rl   rm   r   r†   r(   rÖ   r
   r×   r§   r   r3   r4   r¡   Úexistsr6   r)   ri   )r!   ro   rˆ   rÚ   rÛ   r;   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 )	Nra   rb   rÓ   rÝ   rÃ   r0   rÄ   ú>Custom document with this Title and Collection already exists.)r   rl   rm   r   r4   r5   r   r†   r(   rÖ   r
   r6   r7   r8   r9   ©r!   ro   rˆ   rÛ   r;   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                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú3TestDocumentAddViewWithLimitedCollectionPermissionsc                 C   s’   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©Zcontent_type__app_labelÚcodenameÚwagtailadminÚaccess_adminra   rb   zEvil conspirators©Úgroupri   Z
permissionZmoriartyzmoriarty@example.comÚpassword©ÚusernameÚemailrí   ©rï   rí   ©r   r4   r)   r   rl   rm   rˆ   r   r5   Zpermissionsr•   r   Úcreate_userÚgroupsr   ©r!   Zadd_doc_permissionÚadmin_permissionro   Zconspirators_groupÚuserr"   r"   r#   r$     s0     ÿ ÿý  ÿz9TestDocumentAddViewWithLimitedCollectionPermissions.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S )NrÃ   r0   rÄ   rÅ   )r(   r)   r
   r6   r7   r8   rZ   r:   r"   r"   r#   rÉ   0  s    þz<TestDocumentAddViewWithLimitedCollectionPermissions.test_getc                 C   sH   | j jdd | j tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S )Nr|   rb   rÃ   r0   rÅ   r}   )rˆ   rm   r(   r)   r
   r6   r7   r9   r:   r"   r"   r#   rÎ   <  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   r3   r4   r¡   rÞ   r6   r)   ri   rˆ   ©r!   rÚ   rÛ   r;   r"   r"   r#   rÜ   I  s    þþz=TestDocumentAddViewWithLimitedCollectionPermissions.test_postN)r©   rª   r«   r$   rÉ   rÎ   rÜ   r"   r"   r"   r#   rã     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   r÷   r   r   r3   r4   r5   rE   )r!   rÚ   r"   r"   r#   r$   b  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‚   é.  )r÷   Úis_superuserÚuser_permissionsr•   r   r4   r)   rB   r(   r
   rE   r†   r6   r7   r   r^   Úget_edit_url)r!   r;   Ú
url_finderr"   r"   r#   Ú!test_get_with_limited_permissionsm  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‚   ZTestDocrÔ   rû   )r÷   rü   rý   r•   r   r4   r)   rB   r(   rÖ   r
   rE   r†   r   r6   r7   r:   r"   r"   r#   Ú"test_post_with_limited_permissions~  s     ÿÿ

þz7TestDocumentEditView.test_post_with_limited_permissionsc                 C   sz   | j  td| jjfd¡}|  |jd¡ |  |d¡ |  |d¡ |  	|d¡ t
| jƒ}d| jj }|  | | j¡|¡ d S )Nr   r‚   r0   úwagtaildocs/documents/edit.htmlrÆ   rÇ   z/admin/documents/edit/%d/)r(   r)   r
   rE   r†   r6   r7   r8   r9   rZ   r   r÷   rþ   )r!   r;   rÿ   Zexpected_urlr"   r"   r#   r<     s    ÿ
z TestDocumentEditView.test_simplec                 C   sJ   t  ¡ }|jdd}|jdd | j td| jjfd¡}|  |d¡ d S )Nra   rb   r|   r   r‚   r}   )	r   rl   rm   r(   r)   r
   rE   r†   r9   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 )Nra   rb   r€   rÝ   r&   r…   rr   r   r‚   r„   r0   z<input type="hidden" value="z" name="next">)r   rl   rm   r   r3   r4   r5   r   r
   r   r†   r(   r)   r6   r7   r9   ©r!   ro   rˆ   r‰   Zexpected_next_urlr;   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
   rE   r†   r×   r6   r   r3   r4   r)   r.   rø   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 )Nra   rb   r€   rÝ   r&   r…   rr   r   r‚   ZEdited)r.   ri   r„   )r   rl   rm   r   r3   r4   r5   r   r
   r   r†   r(   rÖ   r×   Úrefresh_from_dbr6   r.   r  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‚   r0   r  zFile not found)r   r   r3   r4   r5   rÕ   Údeleter(   r)   r
   r†   r6   r7   r8   r9   )r!   rÚ   rE   r;   r"   r"   r#   Útest_with_missing_source_fileò  s     ÿz2TestDocumentEditView.test_with_missing_source_filec                 C   sT   | j  td| jjfd¡}|  |jd¡ |  |d¡ |  || jj	¡ |  |d¡ d S )Nr   r‚   r0   r  úUsed 0 times©
r(   r)   r
   rE   r†   r6   r7   r8   r9   Z	usage_urlr:   r"   r"   r#   Útest_usage_link  s    ÿ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Ã   r-   s   less contentr   r‚   N)r   r(   rÖ   r
   r   r3   r4   r)   rØ   rÙ   Úfilenamerx   r.   r  ZassertNotEqual)r!   rÚ   rÛ   rE   Zold_file_sizeZold_file_hashÚnew_filer"   r"   r#   Ú/test_reupload_different_file_size_and_file_hash  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)rE   rÕ   rc   r  r   r(   rÖ   r
   rx   r.   r×   r  r6   Úread©r!   Zold_filenameÚnew_namer  r;   r"   r"   r#   Útest_reupload_same_name+  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)rE   rÕ   rc   r   r(   rÖ   r
   rx   r.   r×   r  r–   ÚstoragerÞ   r§   r6   r  r  r"   r"   r#   Útest_reupload_different_nameA  s    

þþ
z1TestDocumentEditView.test_reupload_different_nameN)r©   rª   r«   r$   r   r  r<   r  r  rÜ   r	  r  r  r  r  r  r"   r"   r"   r#   rù   a  s   	 rù   rÏ   rÐ   c                   @   s0   e Zd Zdd„ Zi fdd„Zdd„ Zdd„ Zd	S )
Ú+TestDocumentEditViewWithCustomDocumentModelc                 C   s,   |   ¡  tjjdtƒ d| _| jjj| _d S rú   )r   r   r4   r5   r   rE   rÕ   r  r    r"   r"   r#   r$   [  s    þz1TestDocumentEditViewWithCustomDocumentModel.setUpc                 C   s   | j  td| jjfd|¡S )Nr   r‚   )r(   r)   r
   rE   r†   r*   r"   r"   r#   r)   f  s     ÿz/TestDocumentEditViewWithCustomDocumentModel.getc                 C   s>   |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr0   r  rÆ   rÇ   )r)   r6   r7   r8   r9   r:   r"   r"   r#   rÑ   k  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 )Nra   rb   ZUpdatedrÝ   rq   r   r‚   r0   r  rà   )r   rl   rm   r   r4   r5   r   r†   r(   rÖ   r
   rE   r6   r7   r8   r9   rá   r"   r"   r#   râ   v  s(    ýþ ÿ ÿzQTestDocumentEditViewWithCustomDocumentModel.test_unique_together_validation_errorN)r©   rª   r«   r$   r)   rÑ   râ   r"   r"   r"   r#   r  Y  s   r  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Ó   r-   úwagtaildocs:deleter‚   )
r   r÷   r   r3   r4   r5   rE   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û   r  )r÷   rü   rý   r•   r   r4   r)   rB   r(   r  rÖ   r6   r7   r§   r   r¡   rE   r†   rÞ   )r!   Zresponse_getZresponse_postr"   r"   r#   Ú$test_delete_with_limited_permissionsœ  s     ÿÿ
ÿz;TestDocumentDeleteView.test_delete_with_limited_permissionsc                 C   s    t jj| jd | j | j¡}|  |jd¡ |  	|d¡ |  	|d¡ |  
|td| jjfdd ¡ |  
|d¡ |  |d	¡ |  |d
¡ |  |d| j› d¡ d S )N©Zprotected_documentr0   ú(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">)r   r4   r5   rE   r(   r)   r  r6   r7   r8   r9   r
   r†   rZ   r:   r"   r"   r#   Ú(test_delete_get_with_protected_reference®  s*    ÿþþþz?TestDocumentDeleteView.test_delete_get_with_protected_referencec                 C   sP   t jj| jd | j | j¡}|  |tdƒ¡ |  	t
ƒ jj| jjd ¡ ¡ d S )Nr  Úwagtailadmin_homer  )r   r4   r5   rE   r(   rÖ   r  r×   r
   r§   r   r¡   r†   rÞ   r:   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 )	Nr0   r   r!  r#  r$  r%  rŒ   r&  )r(   r)   r  r6   r7   r8   rZ   r9   r:   r"   r"   r#   r<   Ì  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 )Nr  r‚   T)Úfollowr&   r  c                 S   s   g | ]}|j  ¡ ‘qS r"   )Úmessagere   )rh   Úmr"   r"   r#   rj   ê  s     z6TestDocumentDeleteView.test_delete.<locals>.<listcomp>Úmessagesz!Document 'Test document' deleted.)r(   rÖ   r
   rE   r†   r×   r–   r   r3   r4   r¡   rÞ   r6   rK   r   r:   r"   r"   r#   Útest_deleteÜ  s     ÿþz"TestDocumentDeleteView.test_deletec                 C   sT   | j  td| jjfd¡}|  |jd¡ |  |d¡ |  || jj	¡ |  |d¡ d S )Nr  r‚   r0   r   z#This document is referenced 0 timesr  r:   r"   r"   r#   r  î  s    ÿz&TestDocumentDeleteView.test_usage_linkN)
r©   rª   r«   r$   r  r'  r)  r<   r.  r  r"   r"   r"   r#   r  “  s   r  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)r.   r”   c                 C   s$   |   ¡ | _tƒ jjdtƒ d| _d S rú   )r   r÷   r   r4   r5   r   r‰   r    r"   r"   r#   r$     s
    
þz"TestMultipleDocumentUploader.setUpc                 C   s2   | j  ¡  |  | j jd¡ |  d| j j ¡ ¡ d S )Nr0  Zcromarty)r‰   r  r6   r.   ÚassertInr”   Únamesr    r"   r"   r#   Úcheck_doc_after_edit  s    
z1TestMultipleDocumentUploader.check_doc_after_editc                 C   s   |   |d¡ d S ©NrÇ   )rZ   r:   r"   r"   r#   Úcheck_form_media_in_response  s    z9TestMultipleDocumentUploader.check_form_media_in_responsec                 C   sD   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |¡ dS )zR
        This tests that the add view responds correctly on a GET request
        rs   r0   úwagtaildocs/multiple/add.htmlÚid_adddocument_collectionN)r(   r)   r
   r6   r7   r8   rZ   r5  r:   r"   r"   r#   Útest_add  s
    z%TestMultipleDocumentUploader.test_addc                 C   sZ   t  ¡ }|jdd | j tdƒ¡}|  |jd¡ |  |d¡ |  	|d¡ |  	|d¡ d S )Nra   rb   rs   r0   r6  r7  rÊ   rË   r"   r"   r#   Útest_add_with_collections$  s    z6TestMultipleDocumentUploader.test_add_with_collectionsc                 C   sX   t  ¡ }|jdd}| j tdƒd|j›  ¡}|  |jd¡ |  	|d|j› d¡ d S )Nra   rb   rs   rt   r0   z<option value="z" selected>)
r   rl   rm   r(   r)   r
   rx   r6   r7   r9   )r!   ro   ri   r;   r"   r"   r#   Ú!test_add_with_selected_collection3  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
        rs   úfiles[]útest.pngó   Simple text documentr0   úContent-Typeúapplication/jsonú3wagtailadmin/generic/multiple_upload/edit_form.htmlr‰   Úedit_actionú/admin/documents/multiple/%d/Údelete_actionú$/admin/documents/multiple/%d/delete/r-   ÚformrÕ   ri   r.   Údoc_idÚsuccessr   N)r(   rÖ   r
   r   r6   r7   r8   r1  rK   r.   r§   rØ   rÙ   r†   r   r4   r)   r   rl   ri   ÚsetÚfieldsÚadmin_form_fieldsÚinitialÚjsonÚloadsr\   r   ÚassertNotIn©r!   r;   r‰   ro   Úresponse_jsonr"   r"   r#   Útest_add_post>  sP     ÿþ ÿþþþ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
        rs   ú(TXT) test titleútest.txtr=  ©r.   r;  r0   r>  r?  r@  r‰   ú.txtrA  rB  rC  rD  r-   rE  rÕ   ri   r.   rF  rG  r   N)r(   rÖ   r
   r   r6   r7   r8   r1  rK   r.   r  r§   rØ   rÙ   r†   r   r4   r)   r   rl   ri   rH  rI  rJ  rK  rL  rM  r\   r   rN  rO  r"   r"   r#   Útest_add_post_with_titlev  sR    þþ	 ÿþþþ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
        ra   rb   rs   r<  r=  ©r;  ri   r0   r>  r?  r@  r‰   r-   rE  rÕ   ri   r.   rF  rG  r   N)r   rl   rm   r(   rÖ   r
   r   r†   r6   r7   r8   r1  rK   r.   r§   rØ   rÙ   r   r4   r)   ri   rH  rI  rJ  rK  rL  rM  r\   r   )r!   ro   rˆ   r;   r‰   rP  r"   r"   r#   Útest_add_post_with_collections°  sD    þþ	 ÿþ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
        rs   i  N)r(   rÖ   r
   r6   r7   r:   r"   r"   r#   Útest_add_post_nofileæ  s    z1TestMultipleDocumentUploader.test_add_post_nofilec                 C   s,   | 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†   r6   r7   r:   r"   r"   r#   Útest_edit_getï  s    ÿ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†   )rh   ÚfieldÚdatar    r"   r#   Ú
<dictcomp>  s   ÿ z?TestMultipleDocumentUploader.test_edit_post.<locals>.<dictcomp>r0   r>  r?  rF  rE  rG  N)r(   rÖ   r
   r‰   r†   Úedit_post_dataÚitemsr6   r7   rL  rM  r\   r   r1  rN  r§   r3  ©r!   r;   rP  r"   r    r#   Útest_edit_postû  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-tagsr0   r>  r?  r@  rE  r.   rµ   rF  rG  N)r(   rÖ   r
   r‰   r†   r6   r7   r8   ÚassertFormErrorrK   rL  rM  r\   r   r1  r–   re  r"   r"   r#   Útest_edit_post_validation_error  s2    
 
 þþ	 ÿ  ÿz<TestMultipleDocumentUploader.test_edit_post_validation_errorc                 C   s,   | j  td| jjfd¡}|  |jd¡ dS )zn
        This tests that a GET request to the delete view returns a 405 "METHOD NOT ALLOWED" response
        úwagtaildocs:delete_multipler‚   r]  Nr^  r:   r"   r"   r#   Útest_delete_get8  s    ÿ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
        ri  r‚   r0   r>  r?  r  rF  rG  N)r(   rÖ   r
   r‰   r†   r6   r7   r–   r   r4   r¡   rÞ   rL  rM  r\   r   r1  r§   re  r"   r"   r#   Útest_delete_postD  s    ÿz-TestMultipleDocumentUploader.test_delete_postN)r©   rª   r«   Ú__doc__rc  r$   r3  r5  r8  r9  r:  rQ  rW  rZ  r[  r_  rf  rh  rj  rk  r"   r"   r"   r#   r/  ø  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                    s   t ƒ  ¡  |  | jjd¡ d S )Nrn  )Úsuperr3  r6   r‰   ro  r    ©Ú	__class__r"   r#   r3  b  s    
z7TestMultipleCustomDocumentUploader.check_doc_after_editc                 C   s   |   |d¡ d S r4  )r9   r:   r"   r"   r#   r5  f  s    z?TestMultipleCustomDocumentUploader.check_form_media_in_response)	r©   rª   r«   Údictr/  rc  r3  r5  Ú__classcell__r"   r"   rq  r#   rm  \  s    ÿrm  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 )ri   Nr"   )rh   Úfr"   r"   r#   Ú	<genexpr>r  s      zLTestMultipleCustomDocumentUploaderNoCollection.setUpClass.<locals>.<genexpr>rJ  )
rp  Ú
setUpClassr   ÚtuplerJ  r   ÚpatchÚobjectÚ8_TestMultipleCustomDocumentUploaderNoCollection__patcherÚstart)Úclsr3   rI  rq  r"   r#   rx  n  s
    
z9TestMultipleCustomDocumentUploaderNoCollection.setUpClassc                    s   | j  ¡  tƒ  ¡  d S r   )r|  Ústoprp  ÚtearDownClass)r~  rq  r"   r#   r€  v  s    
z<TestMultipleCustomDocumentUploaderNoCollection.tearDownClass)r©   rª   r«   Úclassmethodrx  r€  rt  r"   r"   rq  r#   ru  k  s   ru  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)Zfor_content_typerÕ   Úuploaded_by_user)rp  r$   r   r4   r5   r   Zget_for_modelr   r   r÷   Úuploaded_documentr    rq  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
        rs   r;  r<  r=  r0   r>  r?  r@  r†  rA  ú;/admin/documents/multiple/create_from_uploaded_document/%d/rC  ú+/admin/documents/multiple/delete_upload/%d/rE  rÕ   ri   r.   Úuploaded_file_idrG  r   N)r(   rÖ   r
   r   r6   r7   r8   r1  rK   r§   rÕ   Úsizer†   rH  rI  r   rJ  rK  rL  rM  r\   r   rN  re  r"   r"   r#   rQ  Œ  sT     ÿþ ÿ
ÿþ
ÿþþ
þ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 )rR  rs   rS  rT  r=  rU  r0   r>  r?  r@  r†  rV  r‰  rE  rG  N)r(   rÖ   r
   r   r6   r7   r8   r1  rK   rÕ   rc   rL  rM  r\   r   r†   r§   re  r"   r"   r#   rW  Ã  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 )rX  ra   rb   rs   r<  r=  rY  r0   r>  r?  r@  r†  rA  r‡  rC  rˆ  rE  rÕ   ri   r.   r‰  rG  r   N)r   rl   rm   r(   rÖ   r
   r   r†   r6   r7   r8   r1  rK   r§   rÕ   rŠ  rH  rI  r   rJ  rK  rL  rM  r\   r   )r!   ro   rˆ   r;   rP  r"   r"   r#   rZ  ä  sX    þþ	 ÿ
ÿþ
ÿþþ
þzRTestMultipleCustomDocumentUploaderWithRequiredField.test_add_post_with_collectionsc                    s   t ƒ  ¡  |  | jjd¡ d S )Nrƒ  )rp  r3  r6   r‰   r„  r    rq  r"   r#   r3     s    
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-titler0  úuploaded-document-%d-tagsr´   úuploaded-document-%d-authorr0   r>  r?  rE  r„  rA  r‡  r†  rC  rˆ  rµ   rG  N)r   r4   rw   r   r(   rÖ   r
   r†  r†   r6   r7   r1  rK   rI  rg  rL  rM  r\   r   r–   )r!   Údoc_count_beforeÚuploaded_doc_count_beforer;   Údoc_count_afterÚuploaded_doc_count_afterrP  r"   r"   r#   Ú$test_create_from_upload_invalid_post$  sX    

þ

 
 ûû


ÿþ
ÿþ  ÿ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Œ  r0  r  zfairies, donkeyrŽ  rƒ  r0   r>  r?  rF  rG  rv   r  ZdonkeyN)r   r4   rw   r   r(   rÖ   r
   r†  r†   r6   r7   rL  rM  r\   r   r1  r§   r)   r.   r„  rÕ   rc   rÙ   rØ   r”   r2  )r!   r  r  r;   r‘  r’  rP  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‚   r0   r>  r?  r  rG  N)r(   rÖ   r
   r†  r†   r6   r7   r–   r   r4   r¡   rÞ   rL  rM  r\   r   r§   re  r"   r"   r#   Útest_delete_uploaded_document  s     ÿÿÿzQTestMultipleCustomDocumentUploaderWithRequiredField.test_delete_uploaded_document)r©   rª   r«   rs  r/  rc  r$   rQ  rW  rZ  r3  r“  r”  r•  rt  r"   r"   rq  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   s   |   ¡ | _d S r   ©r   r÷   r    r"   r"   r#   r$   ©  s    zTestDocumentChooserView.setUpc                 C   s^   | j  tdƒ¡}|  |jd¡ |  |d¡ t |j 	¡ ¡}|  |d d¡ |  
d|d ¡ d S )Núwagtaildocs_chooser:chooser0   ú)wagtailadmin/generic/chooser/chooser.htmlÚstepÚchooserÇ   rX   ©r(   r)   r
   r6   r7   r8   rL  rM  r\   r   rN  re  r"   r"   r#   r<   ¬  s    z#TestDocumentChooserView.test_simplec                 C   s@   t  ¡ }|jdd}|jdd | j tdƒ¡}|  |d¡ d S )Nra   rb   r|   r˜  r}   rÍ   r~   r"   r"   r#   r  ¶  s
    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˜  r0   rš  r›  r™  z0name="document-chooser-upload-fancy_description"rX   rÇ   )r(   r)   r
   r6   r7   rL  rM  r\   r   r8   r1  re  r"   r"   r#   Útest_with_custom_document_model¿  s     ÿz7TestDocumentChooserView.test_with_custom_document_modelc                 C   s:   | j  tdƒddi¡}|  |jd¡ |  |jd d¡ d S )Nú"wagtaildocs_chooser:choose_resultsr¯   r°   r0   Zsearch_query©r(   r)   r
   r6   r7   rK   r:   r"   r"   r#   r²   Ï  s     ÿz#TestDocumentChooserView.test_searchc                 C   s.   t dƒD ] }tjdt|ƒ d}| ¡  qd S r=   r?   rC   r"   r"   r#   rF   Ö  s    z!TestDocumentChooserView.make_docsc                 C   sP   |   ¡  | j tdƒddi¡}|  |jd¡ |  |d¡ |  |jd jd¡ d S )Nrž  rG   rH   r0   z wagtaildocs/chooser/results.htmlÚresultsrJ   r:   r"   r"   r#   rM   Û  s     ÿz'TestDocumentChooserView.test_paginationc                 C   s0   |   ¡  | j tdƒddi¡}|  |jd¡ d S )Nrž  rG   rN   rO   ©rF   r(   r)   r
   r6   r7   r:   r"   r"   r#   rQ   é  s     ÿz/TestDocumentChooserView.test_pagination_invalidc                 C   s0   |   ¡  | j tdƒddi¡}|  |jd¡ d S )Nrž  rG   rR   rO   r¡  r:   r"   r"   r#   rS   ó  s     ÿ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 5 Q R X ˆ  	t
|jd	 ƒd
¡ ˆ  	|jd	 d |¡ d S )NúTest document shown©r.   r…  úTest document not shownr-   c                    s   | j ˆ jdS ©N)r…  ©r¡   r÷   ©Z	documentsÚrequestr    r"   r#   Úfilter_documents  s    zUTestDocumentChooserView.test_construct_queryset_hook_browse.<locals>.filter_documentsÚ#construct_document_chooser_querysetr˜  r   rv   r   ©r   r3   r4   r5   r÷   Úregister_hookr(   r)   r
   r6   ry   rK   ©r!   rE   r©  r;   r"   r    r#   Ú#test_construct_queryset_hook_browseý  s    þÿ ÿz;TestDocumentChooserView.test_construct_queryset_hook_browsec                 C   s<   |   ¡  | j tdƒ¡}| j|ddd | j|ddd d S )Nr&   rV   TrW   rY   )rF   r(   r)   r
   rZ   r:   r"   r"   r#   r`     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 )Nra   rb   r&   rV   TrW   rY   )r   rl   rm   rF   r(   r)   r
   r9   rË   r"   r"   r#   rp     s    z2TestDocumentChooserView.test_index_with_collectionN)r©   rª   r«   r$   r<   r  r	   r  r²   rF   rM   rQ   rS   r®  r`   rp   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   s   |   ¡ | _d S r   r—  r    r"   r"   r#   r$   '  s    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 5 Q R X ˆ  	t
|jd ƒd¡ ˆ  	|jd d |¡ d S )Nr¢  r£  r¤  r-   c                    s   | j ˆ jdS r¥  r¦  r§  r    r"   r#   r©  3  s    z[TestDocumentChooserViewSearch.test_construct_queryset_hook_search.<locals>.filter_documentsrª  rž  r¯   r·   r   rv   r   r«  r­  r"   r    r#   Ú#test_construct_queryset_hook_search*  s$    þÿ ÿ ÿzATestDocumentChooserViewSearch.test_construct_queryset_hook_searchN)r©   rª   r«   Úfixturesr$   r°  r"   r"   r"   r#   r¯  $  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Ó   r-   )r   r   r3   r4   r5   rE   r    r"   r"   r#   r$   C  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‚   r0   rš  Úchosen)r(   r)   r
   rE   r†   r6   r7   rL  rM  r\   r   re  r"   r"   r#   r<   I  s    ÿz)TestDocumentChooserChosenView.test_simpleN)r©   rª   r«   r$   r<   r"   r"   r"   r#   r²  B  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   s   |   ¡  d S r   r   r    r"   r"   r#   r$   S  s    z#TestDocumentChooserUploadView.setUpc                 C   sN   | j  tdƒ¡}|  |jd¡ |  |d¡ t |j 	¡ ¡}|  |d d¡ d S )Núwagtaildocs_chooser:creater0   ú/wagtailadmin/generic/chooser/creation_form.htmlrš  Úreshow_creation_form)
r(   r)   r
   r6   r7   r8   rL  rM  r\   r   re  r"   r"   r#   r<   V  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³  r-   )r   r(   rÖ   r
   rL  rM  r\   r   r6   r§   r   r3   r4   r¡   rÞ   )r!   rÚ   rÛ   r;   rP  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 )
Nra   rb   rÓ   rÝ   rµ  )r¹  rº  z"document-chooser-upload-collectionr0   r¶  rà   )r   rl   rm   r   r4   r5   r   r(   rÖ   r
   r†   r6   r7   r8   r9   )r!   ro   rˆ   r;   r"   r"   r#   Útest_unique_together_validationq  s.    ýýþ
 ÿ ÿz=TestDocumentChooserUploadView.test_unique_together_validationN)r©   rª   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d	S )
Ú3TestDocumentChooserUploadViewWithLimitedPermissionsc                 C   s’   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 rä   rò   rõ   r"   r"   r#   r$   ’  s0     ÿ ÿý  ÿz9TestDocumentChooserUploadViewWithLimitedPermissions.setUpc                 C   s^   | j  tdƒ¡}|  |jd¡ |  |d¡ t |j 	¡ ¡}|  |d d¡ |  
d|d ¡ d S )Nrµ  r0   r¶  rš  r·  Úid_collectionZhtmlFragmentrœ  re  r"   r"   r#   r<   ¬  s     ÿz?TestDocumentChooserUploadViewWithLimitedPermissions.test_simplec                 C   s^   | j  tdƒ¡}|  |jd¡ |  |d¡ t |j 	¡ ¡}|  |d d¡ |  
d|d ¡ d S )Nr˜  r0   r™  rš  r›  r½  rX   rœ  re  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
   rL  rM  r\   r   r6   r   r3   r4   r¡   r§   rÞ   r)   ri   rˆ   )r!   rÚ   rÛ   r;   rP  r‰   r"   r"   r#   rÜ   Ã  s    þz=TestDocumentChooserUploadViewWithLimitedPermissions.test_postN)r©   rª   r«   r$   r<   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   s   |   ¡  d S r   r   r    r"   r"   r#   r$   Ý  s    zTestUsageCount.setUpc                 C   s(   t jjjdd}|  | ¡  ¡ d¡ d S )Nrv   r  r   )r   r3   r4   r)   r6   Ú	get_usagerw   ©r!   r‰   r"   r"   r#   Ú test_unused_document_usage_countà  s    z/TestUsageCount.test_unused_document_usage_countc                 C   sP   t jjjdd}tjjdd}tƒ }||_||_| ¡  |  	| 
¡  ¡ d¡ d S )Nrv   r  rœ   )r   r3   r4   r)   r   r   ÚpageÚlink_documentrB   r6   rÁ  rw   ©r!   r‰   rÄ  Úevent_page_related_linkr"   r"   r#   Útest_used_document_usage_countä  s    z-TestUsageCount.test_used_document_usage_countc                 C   s\   t jjjdd}tjjdd}tƒ }||_||_| ¡  | j	 t
ddd¡}|  |d¡ d S )Nrv   r  rœ   r   ©rv   r‚   zUsed 1 time©r   r3   r4   r)   r   r   rÄ  rÅ  rB   r(   r
   r9   ©r!   r‰   rÄ  rÇ  r;   r"   r"   r#   Útest_usage_count_appearsí  s    z'TestUsageCount.test_usage_count_appearsc                 C   s$   | j  tddd¡}|  |d¡ d S )Nr   rÉ  r‚   r  )r(   r)   r
   r9   r:   r"   r"   r#   Útest_usage_count_zero_appears÷  s    z,TestUsageCount.test_usage_count_zero_appearsN)	r©   rª   r«   r±  r$   rÃ  rÈ  rÌ  rÍ  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   s   |   ¡  d S r   r   r    r"   r"   r#   r$   ÿ  s    zTestGetUsage.setUpc                 C   s(   t jjjdd}|  t| ¡ ƒg ¡ d S )Nrv   r  )r   r3   r4   r)   r6   ÚlistrÁ  rÂ  r"   r"   r#   Útest_unused_document_get_usage  s    z+TestGetUsage.test_unused_document_get_usagec                 C   sœ   t jjjdd}tjjdd}tƒ }||_||_| ¡  |  	| 
¡ d t¡ |  	| 
¡ d d t¡ |  	| 
¡ d d t¡ |  	| 
¡ d d d t¡ d S )Nrv   r  rœ   r   )r   r3   r4   r)   r   r   rÄ  rÅ  rB   ZassertIsInstancerÁ  ry  r   rÏ  r   rÆ  r"   r"   r#   Útest_used_document_get_usage  s    z)TestGetUsage.test_used_document_get_usagec                 C   sx   t jjjdd}tjjdd}tƒ }||_||_| ¡  | j	 t
ddd¡}|  |d¡ |  |d¡ | j|d	d
d d S )Nrv   r  rœ   r"  rÉ  r‚   Ú	Christmasú<table class="listing">ú<td>Event page</td>TrW   rÊ  rË  r"   r"   r#   Útest_usage_page  s    zTestGetUsage.test_usage_pagec                 C   s$   | j  tddd¡}|  |d¡ d S )Nr"  rÉ  r‚   rÓ  )r(   r)   r
   rZ   r:   r"   r"   r#   Útest_usage_page_no_usage  s    z%TestGetUsage.test_usage_page_no_usagec                 C   s  t jjjdd}tjjdd}tƒ }||_||_| ¡  | 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 )Nrv   r  rœ   Ú
changeonlyúchangeonly@example.comrí   rî   rå   Úchange_documentrç   ré   rê   úDocument changersrb   rë   rñ   r"  r‚   r0   rÒ  z(Private page)rÔ  TrW   )r   r3   r4   r)   r   r   rÄ  rÅ  rB   ró   r   r   r5   Úchangers_groupr   r   rl   rô   r•   rý   r   r(   r
   r6   r7   rZ   r9   )r!   r‰   rÄ  rÇ  r÷   Úchange_permissionrö   r;   r"   r"   r#   Ú+test_usage_page_with_only_change_permission$  sB      ÿ ÿ ÿý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 )NZaddonlyzaddonly@example.comrí   rî   rå   ræ   rç   ré   rê   zDocument addersrb   rë   rñ   r"  rv   r‚   rû   )ró   r   r4   r)   r   r5   Zadders_groupr   r   rl   rô   r•   rý   r   r(   r
   r6   r7   )r!   r÷   Úadd_permissionrö   r;   r"   r"   r#   Ú)test_usage_page_without_change_permissionI  s0      ÿ ÿ ÿýz6TestGetUsage.test_usage_page_without_change_permissionN)r©   rª   r«   r±  r$   rÐ  rÑ  rÕ  rÖ  rÝ  rß  r"   r"   r"   r#   rÎ  ü  s   %rÎ  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 )Nra   rb   ú
Nice plansrÓ   rÝ   r×  rØ  rí   rî   rå   rÙ  rç   ré   rê   rÚ  rë   rñ   )r   r   rl   ro   rm   rˆ   Únice_plans_collectionr   r3   r4   r5   rE   ró   r   r)   r   rÛ  r   rô   r•   rý   r   )r!   rÚ   r÷   rÜ  rö   r"   r"   r#   r$   e  s>    
  ÿ  ÿ ÿ ÿýzTestEditOnlyPermissions.setUpc                 C   sF   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr&   r0   r1   r2   rÓ   rÈ   r:   r"   r"   r#   Útest_get_index‡  s
    z&TestEditOnlyPermissions.test_get_indexc                 C   s:   | j  tdƒddi¡}|  |jd¡ |  |jd d¡ d S )Nr&   r¯   r°   r0   r±   rŸ  r:   r"   r"   r#   r²   ’  s    z#TestEditOnlyPermissions.test_searchc                 C   s$   | j  tdƒ¡}|  |tdƒ¡ d S )NrÃ   r(  ©r(   r)   r
   r×   r:   r"   r"   r#   Útest_get_add—  s    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‚   r0   r  rÅ   rå   ræ   rç   rë   rá  ra   )r(   r)   r
   rE   r†   r6   r7   r8   rZ   r   r4   r   r5   rÛ  rˆ   r9   ©r!   r;   rÞ  r"   r"   r#   Útest_get_editœ  s8    ÿþ ÿýÿþ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‚   r  r´   rÔ   r&   r  rå   ræ   rç   rë   )r.   ri   rÕ   )r(   rÖ   r
   rE   r†   r×   r6   r   r3   r4   r)   r.   ri   râ  r   r   r5   rÛ  rˆ   ræ  r"   r"   r#   Útest_post_edit¿  sF    þþ	þþ ÿýýþþz&TestEditOnlyPermissions.test_post_editc                 C   s8   | j  td| jjfd¡}|  |jd¡ |  |d¡ d S )Nr  r‚   r0   r   )r(   r)   r
   rE   r†   r6   r7   r8   r:   r"   r"   r#   Útest_get_deleteï  s
    ÿz'TestEditOnlyPermissions.test_get_deletec                 C   s$   | j  tdƒ¡}|  |tdƒ¡ d S )Nrs   r(  rä  r:   r"   r"   r#   Útest_get_add_multipleö  s    z-TestEditOnlyPermissions.test_get_add_multipleN)r©   rª   r«   r$   rã  r²   rå  rç  rè  ré  rê  r"   r"   r"   r#   rà  d  s   "#0rà  )>rL  Zunittestr   Zdjango.contrib.auth.modelsr   r   Z"django.contrib.contenttypes.modelsr   Zdjango.core.files.uploadedfiler   Zdjango.testr   r   Zdjango.test.utilsr	   Zdjango.urlsr
   Zdjango.utils.htmlr   Zdjango.utils.httpr   Zwagtail.admin.admin_url_finderr   Zwagtail.documentsr   r   Zwagtail.documents.tests.utilsr   Zwagtail.modelsr   r   r   r   r   Zwagtail.test.testapp.modelsr   r   r   r   r   Zwagtail.test.utilsr   r   r¬   r»   rÂ   rã   rù   r  r  r/  rm  ru  r‚  r–  r¯  r²  r´  r¼  r¿  rÎ  rà  r"   r"   r"   r#   Ú<module>   s`     G! L y9e  f
ÿ  -|?I"h