o
    ËÉhãY  ã                   @   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 d dlmZ G dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZeddddœidde d¡G dd„ deƒƒƒZdS )é    N)Úmock)ÚTestCaseÚTransactionTestCase)Úoverride_settings)Úreverse)Úsignal_handlers)Úget_document_modelc                   @   sX  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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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!e"d>d?d@dA„ ƒZ#e"dBd?dCdD„ ƒZ$e"dEd?dFdG„ ƒZ%dHdI„ Z&dJdK„ Z'dLdM„ Z(dNdO„ Z)d>S )PÚTestDocumentListingúdemosite.jsonc                 K   ó   | j  tdƒ|¡S ©Nzwagtailapi_v2:documents:listing©ÚclientÚgetr   ©ÚselfÚparams© r   úc/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/api/v2/tests/test_documents.pyÚget_response   ó   z TestDocumentListing.get_responsec                 C   ó   dd„ |d D ƒS )Nc                 S   ó   g | ]}|d  ‘qS ©Úidr   ©Ú.0Údocumentr   r   r   Ú
<listcomp>   ó    z<TestDocumentListing.get_document_id_list.<locals>.<listcomp>Úitemsr   ©r   Úcontentr   r   r   Úget_document_id_list   r   z(TestDocumentListing.get_document_id_listc                 C   sJ  |   ¡ }|  |jd¡ |  |d d¡ t |j d¡¡}|  d|¡ |  |d t	¡ |  d|d ¡ |  |d d t
¡ |  |d d tƒ j ¡ ¡ |  d|¡ |  |d t¡ |d D ]F}|  d|¡ |  |d t	¡ |  t|d  ¡ ƒh d£¡ |  |d d	 d
¡ |  |d d d|d  ¡ |  |d d  d|d  ¡¡ q\d S )NéÈ   úContent-typeúapplication/jsonúUTF-8ÚmetaÚtotal_countr    >   ÚtagsÚtypeÚ
detail_urlÚdownload_urlr+   úwagtaildocs.Documentr,   z'http://localhost/api/main/documents/%d/r   r-   zhttp://localhost/documents/%d/)r   ÚassertEqualÚstatus_codeÚjsonÚloadsr"   ÚdecodeÚassertInÚassertIsInstanceÚdictÚintr   ÚobjectsÚcountÚlistÚsetÚkeysÚ
assertTrueÚ
startswith©r   Úresponser"   r   r   r   r   Ú
test_basic   s>   ÿþ

þ
ÿÿîzTestDocumentListing.test_basicc                 C   s`   |   ¡ }t |j d¡¡}|d D ]}|  t| ¡ ƒh d£¡ |  t|d  ¡ ƒh d£¡ qd S )Nr'   r    >   r   r(   Útitler(   >   r*   r+   r,   r-   ©r   r1   r2   r"   r3   r/   r;   r<   r?   r   r   r   Útest_fields_defaultJ   s   þþz'TestDocumentListing.test_fields_defaultc                 C   ód   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒh d£¡ |  t|d  ¡ ƒh d£¡ qd S )NrB   ©Úfieldsr'   r    >   r   r(   rB   r(   >   r*   r+   r,   r-   rC   r?   r   r   r   Útest_fieldsU   ó   þþzTestDocumentListing.test_fieldsc                 C   óH   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒddh¡ qd S )Nú-titlerF   r'   r    r   r(   rC   r?   r   r   r   Útest_remove_fields`   ó
   ÿz&TestDocumentListing.test_remove_fieldsc                 C   rE   )Nú-download_urlrF   r'   r    >   r   r(   rB   r(   >   r*   r+   r,   rC   r?   r   r   r   Útest_remove_meta_fieldsg   ó   ÿþz+TestDocumentListing.test_remove_meta_fieldsc                 C   rJ   )Nz%-type,-detail_url,-tags,-download_urlrF   r'   r    r   rB   rC   r?   r   r   r   Útest_remove_all_meta_fieldsq   rM   z/TestDocumentListing.test_remove_all_meta_fieldsc                 C   rJ   )Nú-idrF   r'   r    r(   rB   rC   r?   r   r   r   Útest_remove_id_fieldx   rM   z(TestDocumentListing.test_remove_id_fieldc                 C   rE   )NÚ*rF   r'   r    >   r   r(   rB   r(   >   r*   r+   r,   r-   rC   r?   r   r   r   Útest_all_fields   rI   z#TestDocumentListing.test_all_fieldsc                 C   sd   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒddh¡ |  t|d  ¡ ƒh d£¡ qd S )Nz*,-title,-download_urlrF   r'   r    r   r(   >   r*   r+   r,   rC   r?   r   r   r   Ú%test_all_fields_then_remove_somethingŠ   rP   z9TestDocumentListing.test_all_fields_then_remove_somethingc                 C   sD   | j dd}t |j d¡¡}|d D ]}|  |d d t¡ qd S )Nr*   rF   r'   r    r(   )r   r1   r2   r"   r3   r5   r:   r?   r   r   r   Útest_fields_tags”   s
   ÿz$TestDocumentListing.test_fields_tagsc                 C   ó@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nútitle,*rF   r'   é  Úmessageú/fields error: '*' must be in the first position©r   r1   r2   r"   r3   r/   r0   ©r   r@   r"   r   r   r   Ú'test_star_in_wrong_position_gives_error›   ó   ÿz;TestDocumentListing.test_star_in_wrong_position_gives_errorc                 C   rX   )NÚuploaded_by_userrF   r'   rZ   r[   z unknown fields: uploaded_by_userr]   r^   r   r   r   Ú3test_fields_which_are_not_in_api_fields_gives_error¤   ó   zGTestDocumentListing.test_fields_which_are_not_in_api_fields_gives_errorc                 C   rX   )Nú123,title,abcrF   r'   rZ   r[   úunknown fields: 123, abcr]   r^   r   r   r   Ú%test_fields_unknown_field_gives_error«   rc   z9TestDocumentListing.test_fields_unknown_field_gives_errorc                 C   rX   )Nú-123,-title,-abcrF   r'   rZ   r[   re   r]   r^   r   r   r   Ú,test_fields_remove_unknown_field_gives_error²   rc   z@TestDocumentListing.test_fields_remove_unknown_field_gives_errorc                 C   s:   | j dd}t |j d¡¡}|  |¡}|  |dg¡ d S )NzJames Joyce)rB   r'   é   ©r   r1   r2   r"   r3   r#   r/   ©r   r@   r"   Údocument_id_listr   r   r   Útest_filtering_exact_filter»   ó   
z/TestDocumentListing.test_filtering_exact_filterc                 C   s:   | j dd}t |j d¡¡}|  |¡}|  |dg¡ d S )Né
   r   r'   rj   rk   r   r   r   Útest_filtering_on_idÂ   rn   z(TestDocumentListing.test_filtering_on_idc                 C   sR   t ƒ jjddj d¡ | jdd}t |j 	d¡¡}|  
|¡}|  |dg¡ d S )Né   r   Útest)r*   r'   )r   r8   r   r*   Úaddr   r1   r2   r"   r3   r#   r/   rk   r   r   r   Útest_filtering_tagsÉ   s
   
z'TestDocumentListing.test_filtering_tagsc                 C   rX   )NÚabc)Únot_a_fieldr'   rZ   r[   zFquery parameter is not an operation or a recognised field: not_a_fieldr]   r^   r   r   r   Ú(test_filtering_unknown_field_gives_errorÒ   s   ÿþz<TestDocumentListing.test_filtering_unknown_field_gives_errorc                 C   ó<   | j dd}t |j d¡¡}|  |¡}|  |g d¢¡ d S )NrB   ©Úorderr'   )rq   é   ro   ri   é   é   é   é   é   é   é	   é   rj   rk   r   r   r   Útest_ordering_by_titleà   ó   
z*TestDocumentListing.test_ordering_by_titlec                 C   rx   )NrK   ry   r'   )rƒ   r‚   r   r€   r   r~   r}   r|   ri   ro   r{   rq   rj   rk   r   r   r   Ú test_ordering_by_title_backwardsç   r…   z4TestDocumentListing.test_ordering_by_title_backwardsc                 C   s`   | j dd}t |j d¡¡}|  |¡}| j dd}t |j d¡¡}|  |¡}|  ||¡ d S )NÚrandomry   r'   )r   r1   r2   r"   r3   r#   ÚassertNotEqual)r   Ú
response_1Ú	content_1Údocument_id_list_1Ú
response_2Ú	content_2Údocument_id_list_2r   r   r   Útest_ordering_by_randomî   s   

z+TestDocumentListing.test_ordering_by_randomc                 C   rX   )Nz-randomry   r'   rZ   r[   z(cannot order by 'random' (unknown field)r]   r^   r   r   r   Ú-test_ordering_by_random_backwards_gives_errorù   r`   zATestDocumentListing.test_ordering_by_random_backwards_gives_errorc                 C   óB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr‡   ro   )rz   Úoffsetr'   rZ   r[   z,random ordering with offset is not supportedr]   r^   r   r   r   Ú/test_ordering_by_random_with_offset_gives_error  ó   ÿzCTestDocumentListing.test_ordering_by_random_with_offset_gives_errorc                 C   rX   )Nrv   ry   r'   rZ   r[   z-cannot order by 'not_a_field' (unknown field)r]   r^   r   r   r   Ú*test_ordering_by_unknown_field_gives_error  r`   z>TestDocumentListing.test_ordering_by_unknown_field_gives_errorc                 C   s6   | j dd}t |j d¡¡}|  t|d ƒd¡ d S )Nri   ©Úlimitr'   r    ©r   r1   r2   r"   r3   r/   Úlenr^   r   r   r   Ú"test_limit_only_two_items_returned  s   z6TestDocumentListing.test_limit_only_two_items_returnedc                 C   ó>   | j dd}t |j d¡¡}|  |d d tƒ j ¡ ¡ d S )Nri   r–   r'   r(   r)   ©	r   r1   r2   r"   r3   r/   r   r8   r9   r^   r   r   r   Útest_limit_total_count  ó
   ÿz*TestDocumentListing.test_limit_total_countc                 C   rX   )Nru   r–   r'   rZ   r[   z limit must be a positive integerr]   r^   r   r   r   Ú"test_limit_not_integer_gives_error%  rc   z6TestDocumentListing.test_limit_not_integer_gives_errorc                 C   rX   )Niè  r–   r'   rZ   r[   zlimit cannot be higher than 20r]   r^   r   r   r   Útest_limit_too_high_gives_error,  rc   z3TestDocumentListing.test_limit_too_high_gives_errorN)ÚWAGTAILAPI_LIMIT_MAXc                 C   sL   | j dd}t |j d¡¡}|  |jd¡ |  t|d ƒtƒ j	 
¡ ¡ d S )Ni@B r–   r'   r$   r    )r   r1   r2   r"   r3   r/   r0   r™   r   r8   r9   r^   r   r   r   Ú#test_limit_max_none_gives_no_errors3  s    z7TestDocumentListing.test_limit_max_none_gives_no_errorsro   c                 C   rX   )Né   r–   r'   rZ   r[   zlimit cannot be higher than 10r]   r^   r   r   r   Ú!test_limit_maximum_can_be_changed;  ó   z5TestDocumentListing.test_limit_maximum_can_be_changedri   c                 C   s2   |   ¡ }t |j d¡¡}|  t|d ƒd¡ d S )Nr'   r    ri   r˜   r^   r   r   r   Ú#test_limit_default_changes_with_maxC  s   z7TestDocumentListing.test_limit_default_changes_with_maxc                 C   s:   |   ¡ }t |j d¡¡}|  |¡}|  | d¡d¡ d S )Nr'   r~   r   ©r   r1   r2   r"   r3   r#   r/   Úindexrk   r   r   r   Ú)test_offset_5_usually_appears_5th_in_listN  s   
z=TestDocumentListing.test_offset_5_usually_appears_5th_in_listc                 C   s>   | j dd}t |j d¡¡}|  |¡}|  | d¡d¡ d S )Nr   ©r’   r'   r~   r   r§   rk   r   r   r   Ú test_offset_5_moves_after_offsetT  s   
z4TestDocumentListing.test_offset_5_moves_after_offsetc                 C   r›   )Nro   rª   r'   r(   r)   rœ   r^   r   r   r   Útest_offset_total_countZ  rž   z+TestDocumentListing.test_offset_total_countc                 C   rX   )Nru   rª   r'   rZ   r[   z!offset must be a positive integerr]   r^   r   r   r   Ú#test_offset_not_integer_gives_errorc  rc   z7TestDocumentListing.test_offset_not_integer_gives_error)*Ú__name__Ú
__module__Ú__qualname__Úfixturesr   r#   rA   rD   rH   rL   rO   rQ   rS   rU   rV   rW   r_   rb   rf   rh   rm   rp   rt   rw   r„   r†   r   r   r“   r•   rš   r   rŸ   r    r   r¢   r¤   r¦   r©   r«   r¬   r­   r   r   r   r   r	      sT    3

						



	r	   c                   @   sL   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zed
ddd„ ƒZ	dd„ Z
dS )ÚTestDocumentListingSearchr
   c                 K   r   r   r   r   r   r   r   r   n  r   z&TestDocumentListingSearch.get_responsec                 C   r   )Nc                 S   r   r   r   r   r   r   r   r   r  r   zBTestDocumentListingSearch.get_document_id_list.<locals>.<listcomp>r    r   r!   r   r   r   r#   q  r   z.TestDocumentListingSearch.get_document_id_listc                 C   s>   | j dd}t |j d¡¡}|  |¡}|  t|ƒdh¡ d S )NÚjames©Úsearchr'   ri   )r   r1   r2   r"   r3   r#   r/   r;   rk   r   r   r   Útest_search_for_james_joycet  s   
z5TestDocumentListingSearch.test_search_for_james_joycec                 C   s<   | j ddd}t |j d¡¡}|  |¡}|  |dg¡ d S )Nr³   rB   )rµ   rz   r'   ri   rj   rk   r   r   r   Útest_search_with_order|  s   
z0TestDocumentListingSearch.test_search_with_orderF)ÚWAGTAILAPI_SEARCH_ENABLEDc                 C   rX   )Nr³   r´   r'   rZ   r[   zsearch is disabledr]   r^   r   r   r   Ú%test_search_when_disabled_gives_error„  r¥   z?TestDocumentListingSearch.test_search_when_disabled_gives_errorc                 C   r‘   )Nr³   Úwagtail)rµ   r*   r'   rZ   r[   z5filtering by tag with a search query is not supportedr]   r^   r   r   r   Ú-test_search_when_filtering_by_tag_gives_errorŒ  s   þzGTestDocumentListingSearch.test_search_when_filtering_by_tag_gives_errorN)r®   r¯   r°   r±   r   r#   r¶   r·   r   r¹   r»   r   r   r   r   r²   k  s    
r²   c                   @   s„   e Zd Zdg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d„ ZdS )ÚTestDocumentDetailr
   c                 K   s   | j  td|fd|¡S )Núwagtailapi_v2:documents:detail©Úargsr   )r   Úimage_idr   r   r   r   r   š  s   ÿzTestDocumentDetail.get_responsec                 C   s"  |   d¡}|  |jd¡ |  |d d¡ t |j d¡¡}|  d|¡ |  |d d¡ |  d|¡ |  |d t	¡ |  d|d ¡ |  |d d d	¡ |  d
|d ¡ |  |d d
 d¡ |  d|d ¡ |  |d d d¡ |  d|¡ |  |d d¡ |  d|d ¡ |  |d d g ¡ d S )Nr€   r$   r%   r&   r'   r   r(   r+   r.   r,   z&http://localhost/api/main/documents/1/r-   z6http://localhost/documents/1/wagtail_by_markyharky.jpgrB   zWagtail by mark Harkinr*   )
r   r/   r0   r1   r2   r"   r3   r4   r5   r6   r^   r   r   r   rA   Ÿ  s.   
ÿ
þzTestDocumentDetail.test_basicc                 C   sx   t ƒ jjddj d¡ t ƒ jjddj d¡ |  d¡}t |j 	d¡¡}|  
d|d ¡ |  |d d ddg¡ d S )Nr€   r   ÚhelloÚworldr'   r*   r(   )r   r8   r   r*   rs   r   r1   r2   r"   r3   r4   r/   r^   r   r   r   Ú	test_tagsÉ  s   
zTestDocumentDetail.test_tagszhttp://api.example.com/)ÚWAGTAILAPI_BASE_URLc                 C   sD   |   d¡}t |j d¡¡}|  d|d ¡ |  |d d d¡ d S )Nr€   r'   r-   r(   z<http://api.example.com/documents/1/wagtail_by_markyharky.jpg)r   r1   r2   r"   r3   r4   r/   r^   r   r   r   Ú&test_download_url_with_custom_base_urlÓ  s   

þz9TestDocumentDetail.test_download_url_with_custom_base_urlc                 C   óL   | j ddd}t |j d¡¡}|  dt| ¡ ƒ¡ |  dt| ¡ ƒ¡ d S )Nri   rK   rF   r'   r   rB   ©	r   r1   r2   r"   r3   r4   r;   r<   ÚassertNotInr^   r   r   r   rL   à  ó   z%TestDocumentDetail.test_remove_fieldsc                 C   sT   | j ddd}t |j d¡¡}|  dt|d  ¡ ƒ¡ |  dt|d  ¡ ƒ¡ d S )Nri   rN   rF   r'   r,   r(   r-   rÇ   r^   r   r   r   rO   ç  s   z*TestDocumentDetail.test_remove_meta_fieldsc                 C   rÆ   )Nri   rR   rF   r'   rB   r   rÇ   r^   r   r   r   rS   î  rÉ   z'TestDocumentDetail.test_remove_id_fieldc                 C   sV   | j ddd}t |j d¡¡}|  t| ¡ ƒddh¡ |  t|d  ¡ ƒdh¡ d S )Nri   z	_,id,typerF   r'   r   r(   r+   rC   r^   r   r   r   Útest_remove_all_fieldsõ  s   z)TestDocumentDetail.test_remove_all_fieldsc                 C   r‘   )Nri   rY   rF   r'   rZ   r[   r\   r]   r^   r   r   r   r_   ü  r”   z:TestDocumentDetail.test_star_in_wrong_position_gives_errorc                 C   r‘   )Nri   ÚpathrF   r'   rZ   r[   zunknown fields: pathr]   r^   r   r   r   rb     ó   zFTestDocumentDetail.test_fields_which_are_not_in_api_fields_gives_errorc                 C   r‘   )Nri   rd   rF   r'   rZ   r[   re   r]   r^   r   r   r   rf     rÌ   z8TestDocumentDetail.test_fields_unknown_field_gives_errorc                 C   r‘   )Nri   rg   rF   r'   rZ   r[   re   r]   r^   r   r   r   rh     rÌ   z?TestDocumentDetail.test_fields_remove_unknown_field_gives_errorc                 C   r‘   )Nri   ztitle(foo,bar)rF   r'   rZ   r[   z&'title' does not support nested fieldsr]   r^   r   r   r   Ú6test_nested_fields_on_non_relational_field_gives_error  rÌ   zITestDocumentDetail.test_nested_fields_on_non_relational_field_gives_errorN)r®   r¯   r°   r±   r   rA   rÃ   r   rÅ   rL   rO   rS   rÊ   r_   rb   rf   rh   rÍ   r   r   r   r   r¼   —  s     *

	r¼   c                   @   s2   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestDocumentFindr
   c                 K   r   )Nzwagtailapi_v2:documents:findr   r   r   r   r   r   %  r   zTestDocumentFind.get_responsec                 C   sL   |   ¡ }|  |jd¡ |  |d d¡ t |j d¡¡}|  |ddi¡ d S )Né”  r%   r&   r'   r[   ú	not found©r   r/   r0   r1   r2   r"   r3   r^   r   r   r   Útest_without_parameters(  s
   z(TestDocumentFind.test_without_parametersc                 C   s.   | j dd}| j|dtddgd dd d S )Nr~   r   zhttp://localhostr½   r¾   F)Úfetch_redirect_response)r   ÚassertRedirectsr   )r   r@   r   r   r   Útest_find_by_id3  s   
ýz TestDocumentFind.test_find_by_idc                 C   sP   | j dd}|  |jd¡ |  |d d¡ t |j d¡¡}|  |ddi¡ d S )	NiÒ  r   rÏ   r%   r&   r'   r[   rÐ   rÑ   r^   r   r   r   Útest_find_by_id_nonexistent<  s
   z,TestDocumentFind.test_find_by_id_nonexistentN)r®   r¯   r°   r±   r   rÒ   rÕ   rÖ   r   r   r   r   rÎ   "  s    	rÎ   Úvarnishz3wagtail.contrib.frontend_cache.backends.HTTPBackendzhttp://localhost:8000)ÚBACKENDÚLOCATIONzhttp://api.example.com)ÚWAGTAILFRONTENDCACHErÄ   z>wagtail.contrib.frontend_cache.backends.http.HTTPBackend.purgec                       sF   e Zd ZdgZe‡ fdd„ƒZe‡ fdd„ƒZdd„ Zdd	„ Z‡  Z	S )
ÚTestDocumentCacheInvalidationr
   c                    ó   t ƒ  ¡  t ¡  d S ©N)ÚsuperÚ
setUpClassr   Úregister_signal_handlers©Úcls©Ú	__class__r   r   rß   U  ó   
z(TestDocumentCacheInvalidation.setUpClassc                    rÜ   rÝ   )rÞ   ÚtearDownClassr   Úunregister_signal_handlersrá   rã   r   r   ræ   Z  rå   z+TestDocumentCacheInvalidation.tearDownClassc                 C   óN   | j dd tƒ jjdd ¡  W d   ƒ n1 sw   Y  | d¡ d S ©NT)Úexecuter~   r   z,http://api.example.com/api/main/documents/5/)ÚcaptureOnCommitCallbacksr   r8   r   ÚsaveÚassert_any_call©r   Úpurger   r   r   Útest_resave_document_purges_  ó   ÿz9TestDocumentCacheInvalidation.test_resave_document_purgesc                 C   rè   ré   )rë   r   r8   r   Údeleterí   rî   r   r   r   Útest_delete_document_purgese  rñ   z9TestDocumentCacheInvalidation.test_delete_document_purges)
r®   r¯   r°   r±   Úclassmethodrß   ræ   rð   ró   Ú__classcell__r   r   rã   r   rÛ   H  s    rÛ   )r1   Úunittestr   Údjango.testr   r   Údjango.test.utilsr   Údjango.urlsr   Úwagtail.api.v2r   Úwagtail.documentsr   r	   r²   r¼   rÎ   ÚpatchrÛ   r   r   r   r   Ú<module>   s0      a, &þÿù	