o
    ËÉh“W  ã                   @   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_image_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ÚTestImageListingúdemosite.jsonc                 K   ó   | j  tdƒ|¡S ©Nzwagtailapi_v2:images:listing©ÚclientÚgetr   ©ÚselfÚparams© r   ú`/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/api/v2/tests/test_images.pyÚget_response   ó   zTestImageListing.get_responsec                 C   ó   dd„ |d D ƒS )Nc                 S   ó   g | ]}|d  ‘qS ©Úidr   ©Ú.0Úimager   r   r   Ú
<listcomp>   ó    z6TestImageListing.get_image_id_list.<locals>.<listcomp>Úitemsr   ©r   Úcontentr   r   r   Úget_image_id_list   r   z"TestImageListing.get_image_id_listc                 C   s*  |   ¡ }|  |jd¡ |  |d d¡ t |j d¡¡}|  d|¡ |  |d t	¡ |  d|d ¡ |  |d d t
¡ |  |d d tƒ j ¡ ¡ |  d|¡ |  |d t¡ |d D ]6}|  d|¡ |  |d t	¡ |  t|d  ¡ ƒh 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+   úwagtailimages.Imager,   z$http://localhost/api/main/images/%d/r   )r   ÚassertEqualÚstatus_codeÚjsonÚloadsr"   ÚdecodeÚassertInÚassertIsInstanceÚdictÚintr   ÚobjectsÚcountÚlistÚsetÚkeys©r   Úresponser"   r   r   r   r   Ú
test_basic   s4   ÿþ

þôzTestImageListing.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_defaultC   s   þþz$TestImageListing.test_fields_defaultc                 C   ód   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒh d£¡ |  t|d  ¡ ƒh d£¡ qd S )Nzwidth,height©Úfieldsr'   r    >   r   r(   r@   ÚwidthÚheightr(   >   r*   r+   r,   r-   rA   r=   r   r   r   Útest_fieldsN   ó   ÿþüzTestImageListing.test_fieldsc                 C   óH   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒddh¡ qd S )Nú-titlerD   r'   r    r   r(   rA   r=   r   r   r   Útest_remove_fields[   ó
   ÿz#TestImageListing.test_remove_fieldsc                 C   rC   )Nz-tagsrD   r'   r    >   r   r(   r@   r(   >   r+   r,   r-   rA   r=   r   r   r   Útest_remove_meta_fieldsb   ó   ÿþz(TestImageListing.test_remove_meta_fieldsc                 C   sH   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒh d£¡ qd S )Nz-type,-detail_url,-tagsrD   r'   r    >   r   r(   r@   rA   r=   r   r   r   Útest_remove_all_meta_fieldsl   rM   z,TestImageListing.test_remove_all_meta_fieldsc                 C   rJ   )Nú-idrD   r'   r    r(   r@   rA   r=   r   r   r   Útest_remove_id_fields   rM   z%TestImageListing.test_remove_id_fieldc                 C   rC   )NÚ*rD   r'   r    >   r   r(   r@   rF   rG   r(   >   r*   r+   r,   r-   rA   r=   r   r   r   Útest_all_fieldsz   rI   z TestImageListing.test_all_fieldsc                 C   rC   )Nz*,-title,-tagsrD   r'   r    >   r   r(   rF   rG   r(   >   r+   r,   r-   rA   r=   r   r   r   Ú%test_all_fields_then_remove_something‡   rO   z6TestImageListing.test_all_fields_then_remove_somethingc                 C   s   | j dd}t |j d¡¡}|d D ]2}|  t| ¡ ƒh d£¡ |  t| ¡ ƒh d£¡ |  t|d  ¡ ƒh d£¡ |  |d d t	¡ qd S )Nr*   rD   r'   r    >   r   r(   r@   r(   >   r*   r+   r,   r-   )
r   r1   r2   r"   r3   r/   r;   r<   r5   r:   r=   r   r   r   Útest_fields_tags‘   s   þùz!TestImageListing.test_fields_tagsc                 C   ó@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nútitle,*rD   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ž   ó   ÿz8TestImageListing.test_star_in_wrong_position_gives_errorc                 C   rW   )NÚuploaded_by_userrD   r'   rY   rZ   z unknown fields: uploaded_by_userr\   r]   r   r   r   Ú3test_fields_which_are_not_in_api_fields_gives_error§   ó   zDTestImageListing.test_fields_which_are_not_in_api_fields_gives_errorc                 C   rW   )Nú123,title,abcrD   r'   rY   rZ   úunknown fields: 123, abcr\   r]   r   r   r   Ú%test_fields_unknown_field_gives_error®   rb   z6TestImageListing.test_fields_unknown_field_gives_errorc                 C   rW   )Nú-123,-title,-abcrD   r'   rY   rZ   rd   r\   r]   r   r   r   Ú,test_fields_remove_unknown_field_gives_errorµ   rb   z=TestImageListing.test_fields_remove_unknown_field_gives_errorc                 C   s:   | j dd}t |j d¡¡}|  |¡}|  |dg¡ d S )NúJames Joyce)r@   r'   é   ©r   r1   r2   r"   r3   r#   r/   ©r   r>   r"   Úimage_id_listr   r   r   Útest_filtering_exact_filter¾   ó   
z,TestImageListing.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%TestImageListing.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$TestImageListing.test_filtering_tagsc                 C   rW   )NÚabc)Únot_a_fieldr'   rY   rZ   zFquery parameter is not an operation or a recognised field: not_a_fieldr\   r]   r   r   r   Ú(test_filtering_unknown_field_gives_errorÕ   s   ÿþz9TestImageListing.test_filtering_unknown_field_gives_errorc                 C   ó<   | j dd}t |j d¡¡}|  |¡}|  |g d¢¡ d S )Nr@   ©Úorderr'   )rq   é   é   ri   ro   é   é   é   é   é   é   é	   rj   rk   r   r   r   Útest_ordering_by_titleã   ó   
z'TestImageListing.test_ordering_by_titlec                 C   rx   )NrK   ry   r'   )rƒ   r‚   r   r€   r   r~   r}   ro   ri   r|   r{   rq   rj   rk   r   r   r   Ú test_ordering_by_title_backwardsê   r…   z1TestImageListing.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Úimage_id_list_1Ú
response_2Ú	content_2Úimage_id_list_2r   r   r   Útest_ordering_by_randomñ   s   

z(TestImageListing.test_ordering_by_randomc                 C   rW   )Nz-randomry   r'   rY   rZ   z(cannot order by 'random' (unknown field)r\   r]   r   r   r   Ú-test_ordering_by_random_backwards_gives_errorü   r_   z>TestImageListing.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'   rY   rZ   z,random ordering with offset is not supportedr\   r]   r   r   r   Ú/test_ordering_by_random_with_offset_gives_error  ó   ÿz@TestImageListing.test_ordering_by_random_with_offset_gives_errorc                 C   rW   )Nrv   ry   r'   rY   rZ   z-cannot order by 'not_a_field' (unknown field)r\   r]   r   r   r   Ú*test_ordering_by_unknown_field_gives_error  r_   z;TestImageListing.test_ordering_by_unknown_field_gives_errorc                 C   s6   | j dd}t |j d¡¡}|  t|d ƒd¡ d S )Né   ©Úlimitr'   r    ©r   r1   r2   r"   r3   r/   Úlenr]   r   r   r   Ú"test_limit_only_two_items_returned  s   z3TestImageListing.test_limit_only_two_items_returnedc                 C   ó>   | j dd}t |j d¡¡}|  |d d tƒ j ¡ ¡ d S )Nr–   r—   r'   r(   r)   ©	r   r1   r2   r"   r3   r/   r   r8   r9   r]   r   r   r   Útest_limit_total_count  ó
   ÿz'TestImageListing.test_limit_total_countc                 C   rW   )Nru   r—   r'   rY   rZ   z limit must be a positive integerr\   r]   r   r   r   Ú"test_limit_not_integer_gives_error(  rb   z3TestImageListing.test_limit_not_integer_gives_errorc                 C   rW   )Niè  r—   r'   rY   rZ   zlimit cannot be higher than 20r\   r]   r   r   r   Útest_limit_too_high_gives_error/  rb   z0TestImageListing.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_errors6  s    z4TestImageListing.test_limit_max_none_gives_no_errorsro   c                 C   rW   )Né   r—   r'   rY   rZ   zlimit cannot be higher than 10r\   r]   r   r   r   Ú!test_limit_maximum_can_be_changed>  ó   z2TestImageListing.test_limit_maximum_can_be_changedr–   c                 C   s2   |   ¡ }t |j d¡¡}|  t|d ƒd¡ d S )Nr'   r    r–   r™   r]   r   r   r   Ú#test_limit_default_changes_with_maxF  s   z4TestImageListing.test_limit_default_changes_with_maxc                 C   s:   |   ¡ }t |j d¡¡}|  |¡}|  | d¡d¡ d S )Nr'   ro   rq   ©r   r1   r2   r"   r3   r#   r/   Úindexrk   r   r   r   Ú*test_offset_10_usually_appears_7th_in_listQ  s   
z;TestImageListing.test_offset_10_usually_appears_7th_in_listc                 C   s>   | j dd}t |j d¡¡}|  |¡}|  | d¡d¡ d S )Nr€   ©r’   r'   ro   r–   r¨   rk   r   r   r   Ú!test_offset_10_moves_after_offsetW  s   
z2TestImageListing.test_offset_10_moves_after_offsetc                 C   rœ   )Nro   r«   r'   r(   r)   r   r]   r   r   r   Útest_offset_total_count]  rŸ   z(TestImageListing.test_offset_total_countc                 C   rW   )Nru   r«   r'   rY   rZ   z!offset must be a positive integerr\   r]   r   r   r   Ú#test_offset_not_integer_gives_errorf  rb   z4TestImageListing.test_offset_not_integer_gives_error)*Ú__name__Ú
__module__Ú__qualname__Úfixturesr   r#   r?   rB   rH   rL   rN   rP   rR   rT   rU   rV   r^   ra   re   rg   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    ,

						



	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 )ÚTestImageListingSearchr
   c                 K   r   r   r   r   r   r   r   r   q  r   z#TestImageListingSearch.get_responsec                 C   r   )Nc                 S   r   r   r   r   r   r   r   r   u  r   z<TestImageListingSearch.get_image_id_list.<locals>.<listcomp>r    r   r!   r   r   r   r#   t  r   z(TestImageListingSearch.get_image_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_joycew  s   
z2TestImageListingSearch.test_search_for_james_joycec                 C   s<   | j ddd}t |j d¡¡}|  |¡}|  |dg¡ d S )Nr´   r@   )r¶   rz   r'   ri   rj   rk   r   r   r   Útest_search_with_order  s   
z-TestImageListingSearch.test_search_with_orderF)ÚWAGTAILAPI_SEARCH_ENABLEDc                 C   rW   )Nr´   rµ   r'   rY   rZ   zsearch is disabledr\   r]   r   r   r   Ú%test_search_when_disabled_gives_error‡  r¦   z<TestImageListingSearch.test_search_when_disabled_gives_errorc                 C   r‘   )Nr´   Úwagtail)r¶   r*   r'   rY   rZ   z5filtering by tag with a search query is not supportedr\   r]   r   r   r   Ú-test_search_when_filtering_by_tag_gives_error  s   þzDTestImageListingSearch.test_search_when_filtering_by_tag_gives_errorN)r¯   r°   r±   r²   r   r#   r·   r¸   r   rº   r¼   r   r   r   r   r³   n  s    
r³   c                   @   sr   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S )ÚTestImageDetailr
   c                 K   s   | j  td|fd|¡S )Núwagtailapi_v2:images:detail©Úargsr   )r   Úimage_idr   r   r   r   r     s   ÿzTestImageDetail.get_responsec                 C   s6  |   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 d g ¡ d S )Nri   r$   r%   r&   r'   r   r(   r+   r.   r,   z#http://localhost/api/main/images/5/r@   rh   rF   rG   iô  iˆ  r*   )
r   r/   r0   r1   r2   r"   r3   r4   r5   r6   r]   r   r   r   r?   ¢  s,   
ÿzTestImageDetail.test_basicc                 C   sp   t ƒ jjdd}|j d¡ |j d¡ |  d¡}t |j 	d¡¡}|  
d|d ¡ |  |d d ddg¡ d S )Nri   r   ÚhelloÚworldr'   r*   r(   )r   r8   r   r*   rs   r   r1   r2   r"   r3   r4   r/   )r   r   r>   r"   r   r   r   Ú	test_tagsË  s   
zTestImageDetail.test_tagsc                 C   óL   | j ddd}t |j d¡¡}|  dt| ¡ ƒ¡ |  dt| ¡ ƒ¡ d S )Nri   rK   rD   r'   r   r@   ©	r   r1   r2   r"   r3   r4   r;   r<   ÚassertNotInr]   r   r   r   rL   Ø  ó   z"TestImageDetail.test_remove_fieldsc                 C   sT   | j ddd}t |j d¡¡}|  dt|d  ¡ ƒ¡ |  dt|d  ¡ ƒ¡ d S )Nri   z-typerD   r'   r,   r(   r+   rÆ   r]   r   r   r   rN   ß  s   z'TestImageDetail.test_remove_meta_fieldsc                 C   rÅ   )Nri   rQ   rD   r'   r@   r   rÆ   r]   r   r   r   rR   æ  rÈ   z$TestImageDetail.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,typerD   r'   r   r(   r+   rA   r]   r   r   r   Útest_remove_all_fieldsí  s   z&TestImageDetail.test_remove_all_fieldsc                 C   r‘   )Nri   rX   rD   r'   rY   rZ   r[   r\   r]   r   r   r   r^   ô  r”   z7TestImageDetail.test_star_in_wrong_position_gives_errorc                 C   r‘   )Nri   ÚpathrD   r'   rY   rZ   zunknown fields: pathr\   r]   r   r   r   ra   ý  ó   zCTestImageDetail.test_fields_which_are_not_in_api_fields_gives_errorc                 C   r‘   )Nri   rc   rD   r'   rY   rZ   rd   r\   r]   r   r   r   re     rË   z5TestImageDetail.test_fields_unknown_field_gives_errorc                 C   r‘   )Nri   rf   rD   r'   rY   rZ   rd   r\   r]   r   r   r   rg     rË   z<TestImageDetail.test_fields_remove_unknown_field_gives_errorc                 C   r‘   )Nri   ztitle(foo,bar)rD   r'   rY   rZ   z&'title' does not support nested fieldsr\   r]   r   r   r   Ú6test_nested_fields_on_non_relational_field_gives_error  rË   zFTestImageDetail.test_nested_fields_on_non_relational_field_gives_errorN)r¯   r°   r±   r²   r   r?   rÄ   rL   rN   rR   rÉ   r^   ra   re   rg   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 )ÚTestImageFindr
   c                 K   r   )Nzwagtailapi_v2:images:findr   r   r   r   r   r     r   zTestImageFind.get_responsec                 C   sL   |   ¡ }|  |jd¡ |  |d d¡ t |j d¡¡}|  |ddi¡ d S )Né”  r%   r&   r'   rZ   ú	not found©r   r/   r0   r1   r2   r"   r3   r]   r   r   r   Útest_without_parameters   s
   z%TestImageFind.test_without_parametersc                 C   s.   | j dd}| j|dtddgd dd d S )Nri   r   zhttp://localhostr¾   r¿   F)Úfetch_redirect_response)r   ÚassertRedirectsr   )r   r>   r   r   r   Útest_find_by_id+  s   
ýzTestImageFind.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'   rZ   rÏ   rÐ   r]   r   r   r   Útest_find_by_id_nonexistent4  s
   z)TestImageFind.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)ÚWAGTAILFRONTENDCACHEÚWAGTAILAPI_BASE_URLz>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 )
ÚTestImageCacheInvalidationr
   c                    ó   t ƒ  ¡  t ¡  d S ©N)ÚsuperÚ
setUpClassr   Úregister_signal_handlers©Úcls©Ú	__class__r   r   rß   M  ó   
z%TestImageCacheInvalidation.setUpClassc                    rÜ   rÝ   )rÞ   ÚtearDownClassr   Úunregister_signal_handlersrá   rã   r   r   ræ   R  rå   z(TestImageCacheInvalidation.tearDownClassc                 C   óN   | j dd tƒ jjdd ¡  W d   ƒ n1 sw   Y  | d¡ d S ©NT)Úexecuteri   r   z)http://api.example.com/api/main/images/5/)ÚcaptureOnCommitCallbacksr   r8   r   ÚsaveÚassert_any_call©r   Úpurger   r   r   Útest_resave_image_purgesW  ó   ÿz3TestImageCacheInvalidation.test_resave_image_purgesc                 C   rè   ré   )rë   r   r8   r   Údeleterí   rî   r   r   r   Útest_delete_image_purges]  rñ   z3TestImageCacheInvalidation.test_delete_image_purges)
r¯   r°   r±   r²   Úclassmethodrß   ræ   rð   ró   Ú__classcell__r   r   rã   r   rÛ   @  s    rÛ   )r1   Úunittestr   Údjango.testr   r   Údjango.test.utilsr   Údjango.urlsr   Úwagtail.api.v2r   Úwagtail.imagesr   r	   r³   r½   rÍ   ÚpatchrÛ   r   r   r   r   Ú<module>   s0      d, &þÿù	