U
    {®Þ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   s   | j  tdƒ|¡S ©Nzwagtailapi_v2:images:listing©ÚclientÚgetr   ©ÚselfÚparams© r   úh/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/api/v2/tests/test_images.pyÚget_response   s    zTestImageListing.get_responsec                 C   s   dd„ |d D ƒS )Nc                 S   s   g | ]}|d  ‘qS ©Úidr   ©Ú.0Úimager   r   r   Ú
<listcomp>   s     z6TestImageListing.get_image_id_list.<locals>.<listcomp>Úitemsr   ©r   Úcontentr   r   r   Úget_image_id_list   s    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 ]p}|  d|¡ |  |d t	¡ |  t|d  ¡ ƒdd	d
dh¡ |  |d d d¡ |  |d d	 d|d  ¡ q¸d S )NéÈ   úContent-typeúapplication/jsonúUTF-8ÚmetaÚtotal_countr   ÚtypeÚ
detail_urlÚtagsÚdownload_urlúwagtailimages.Imagez$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   sf   |   ¡ }t |j d¡¡}|d D ]>}|  t| ¡ ƒdddh¡ |  t|d  ¡ ƒdddd	h¡ q"d S )
Nr"   r   r   r#   Útitler%   r&   r'   r(   ©r   r,   r-   r   r.   r*   r6   r7   r8   r   r   r   Útest_fields_defaultC   s    
þz$TestImageListing.test_fields_defaultc              	   C   sn   | j dd}t |j d¡¡}|d D ]B}|  t| ¡ ƒddddd	h¡ |  t|d  ¡ ƒd
dddh¡ q&d S )Nzwidth,height©Úfieldsr"   r   r   r#   r;   ÚwidthÚheightr%   r&   r'   r(   r<   r8   r   r   r   Útest_fieldsN   s    
 ÿ
þzTestImageListing.test_fieldsc                 C   sH   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒddh¡ q&d S )Nú-titler>   r"   r   r   r#   r<   r8   r   r   r   Útest_remove_fields[   s    z#TestImageListing.test_remove_fieldsc                 C   sh   | j dd}t |j d¡¡}|d D ]<}|  t| ¡ ƒdddh¡ |  t|d  ¡ ƒdd	d
h¡ q&d S )Nz-tagsr>   r"   r   r   r#   r;   r%   r&   r(   r<   r8   r   r   r   Útest_remove_meta_fieldsb   s     ÿz(TestImageListing.test_remove_meta_fieldsc                 C   sJ   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒdddh¡ q&d S )Nz-type,-detail_url,-tagsr>   r"   r   r   r;   r#   r<   r8   r   r   r   Útest_remove_all_meta_fieldsl   s    z,TestImageListing.test_remove_all_meta_fieldsc                 C   sH   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒddh¡ q&d S )Nú-idr>   r"   r   r#   r;   r<   r8   r   r   r   Útest_remove_id_fields   s    z%TestImageListing.test_remove_id_fieldc              	   C   sn   | j dd}t |j d¡¡}|d D ]B}|  t| ¡ ƒddddd	h¡ |  t|d  ¡ ƒd
dddh¡ q&d S )NÚ*r>   r"   r   r   r#   r;   r@   rA   r%   r&   r'   r(   r<   r8   r   r   r   Útest_all_fieldsz   s    
 ÿ
þz TestImageListing.test_all_fieldsc                 C   sj   | j dd}t |j d¡¡}|d D ]>}|  t| ¡ ƒddddh¡ |  t|d  ¡ ƒd	d
dh¡ q&d S )Nz*,-title,-tagsr>   r"   r   r   r#   r@   rA   r%   r&   r(   r<   r8   r   r   r   Ú%test_all_fields_then_remove_something‡   s     ÿz6TestImageListing.test_all_fields_then_remove_somethingc                 C   s˜   | j dd}t |j d¡¡}|d D ]l}|  t| ¡ ƒdddh¡ |  t| ¡ ƒdddh¡ |  t|d  ¡ ƒdd	dd
h¡ |  |d d t	¡ q&d S )Nr'   r>   r"   r   r   r#   r;   r%   r&   r(   )
r   r,   r-   r   r.   r*   r6   r7   r0   r5   r8   r   r   r   Útest_fields_tags‘   s    
þz!TestImageListing.test_fields_tagsc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nútitle,*r>   r"   é  Úmessageú/fields error: '*' must be in the first position©r   r,   r-   r   r.   r*   r+   ©r   r9   r   r   r   r   Ú'test_star_in_wrong_position_gives_errorž   s     ÿz8TestImageListing.test_star_in_wrong_position_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NZuploaded_by_userr>   r"   rN   rO   z unknown fields: uploaded_by_userrQ   rR   r   r   r   Ú3test_fields_which_are_not_in_api_fields_gives_error§   s    zDTestImageListing.test_fields_which_are_not_in_api_fields_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nú123,title,abcr>   r"   rN   rO   úunknown fields: 123, abcrQ   rR   r   r   r   Ú%test_fields_unknown_field_gives_error®   s    z6TestImageListing.test_fields_unknown_field_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nú-123,-title,-abcr>   r"   rN   rO   rV   rQ   rR   r   r   r   Ú,test_fields_remove_unknown_field_gives_errorµ   s    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   r,   r-   r   r.   r   r*   ©r   r9   r   Zimage_id_listr   r   r   Útest_filtering_exact_filter¾   s    
z,TestImageListing.test_filtering_exact_filterc                 C   s:   | j dd}t |j d¡¡}|  |¡}|  |dg¡ d S )Né
   r   r"   r\   r]   r   r   r   Útest_filtering_on_idÅ   s    
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   r3   r   r'   Úaddr   r,   r-   r   r.   r   r*   r]   r   r   r   Útest_filtering_tagsÌ   s
    
z$TestImageListing.test_filtering_tagsc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NÚabc)Únot_a_fieldr"   rN   rO   zFquery parameter is not an operation or a recognised field: not_a_fieldrQ   rR   r   r   r   Ú(test_filtering_unknown_field_gives_errorÕ   s     ÿþz9TestImageListing.test_filtering_unknown_field_gives_errorc                 C   sP   | j dd}t |j d¡¡}|  |¡}|  |dddddd	d
dddddg¡ d S )Nr;   ©Úorderr"   ra   é   é   r[   r_   é   é   é   é   é   é   é	   r\   r]   r   r   r   Útest_ordering_by_titleã   s    
z'TestImageListing.test_ordering_by_titlec                 C   sP   | j dd}t |j d¡¡}|  |¡}|  |dddddd	d
dddddg¡ d S )NrC   rh   r"   rr   rq   rp   ro   rn   rm   rl   r_   r[   rk   rj   ra   r\   r]   r   r   r   Ú test_ordering_by_title_backwardsê   s    
z1TestImageListing.test_ordering_by_title_backwardsc                 C   s`   | j dd}t |j d¡¡}|  |¡}| j dd}t |j d¡¡}|  |¡}|  ||¡ d S )NÚrandomrh   r"   )r   r,   r-   r   r.   r   ZassertNotEqual)r   Z
response_1Z	content_1Zimage_id_list_1Z
response_2Z	content_2Zimage_id_list_2r   r   r   Útest_ordering_by_randomñ   s    

z(TestImageListing.test_ordering_by_randomc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nz-randomrh   r"   rN   rO   z(cannot order by 'random' (unknown field)rQ   rR   r   r   r   Ú-test_ordering_by_random_backwards_gives_errorü   s     ÿz>TestImageListing.test_ordering_by_random_backwards_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nru   r_   )ri   Úoffsetr"   rN   rO   z,random ordering with offset is not supportedrQ   rR   r   r   r   Ú/test_ordering_by_random_with_offset_gives_error  s     ÿz@TestImageListing.test_ordering_by_random_with_offset_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nrf   rh   r"   rN   rO   z-cannot order by 'not_a_field' (unknown field)rQ   rR   r   r   r   Ú*test_ordering_by_unknown_field_gives_error  s     ÿ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   r,   r-   r   r.   r*   ÚlenrR   r   r   r   Ú"test_limit_only_two_items_returned  s    z3TestImageListing.test_limit_only_two_items_returnedc                 C   s>   | j dd}t |j d¡¡}|  |d d tƒ j ¡ ¡ d S )Nr{   r|   r"   r#   r$   ©	r   r,   r-   r   r.   r*   r   r3   r4   rR   r   r   r   Útest_limit_total_count  s    
 
ÿz'TestImageListing.test_limit_total_countc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nre   r|   r"   rN   rO   z limit must be a positive integerrQ   rR   r   r   r   Ú"test_limit_not_integer_gives_error(  s    z3TestImageListing.test_limit_not_integer_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Niè  r|   r"   rN   rO   zlimit cannot be higher than 20rQ   rR   r   r   r   Útest_limit_too_high_gives_error/  s    z0TestImageListing.test_limit_too_high_gives_errorN)Z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   r,   r-   r   r.   r*   r+   r   r   r3   r4   rR   r   r   r   Ú#test_limit_max_none_gives_no_errors6  s    z4TestImageListing.test_limit_max_none_gives_no_errorsr_   c                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Né   r|   r"   rN   rO   zlimit cannot be higher than 10rQ   rR   r   r   r   Ú!test_limit_maximum_can_be_changed>  s    z2TestImageListing.test_limit_maximum_can_be_changedr{   c                 C   s2   |   ¡ }t |j d¡¡}|  t|d ƒd¡ d S )Nr"   r   r{   r~   rR   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"   r_   ra   ©r   r,   r-   r   r.   r   r*   Úindexr]   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 )Nro   ©rx   r"   r_   r{   r‰   r]   r   r   r   Ú!test_offset_10_moves_after_offsetW  s    
z2TestImageListing.test_offset_10_moves_after_offsetc                 C   s>   | j dd}t |j d¡¡}|  |d d tƒ j ¡ ¡ d S )Nr_   rŒ   r"   r#   r$   r   rR   r   r   r   Útest_offset_total_count]  s    
 
ÿz(TestImageListing.test_offset_total_countc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nre   rŒ   r"   rN   rO   z!offset must be a positive integerrQ   rR   r   r   r   Ú#test_offset_not_integer_gives_errorf  s    z4TestImageListing.test_offset_not_integer_gives_error)*Ú__name__Ú
__module__Ú__qualname__Úfixturesr   r   r:   r=   rB   rD   rE   rF   rH   rJ   rK   rL   rS   rT   rW   rY   r^   r`   rd   rg   rs   rt   rv   rw   ry   rz   r€   r‚   rƒ   r„   r   r…   r‡   rˆ   r‹   r   rŽ   r   r   r   r   r   r	      sR   ,

						



	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   s   | j  tdƒ|¡S r   r   r   r   r   r   r   q  s    z#TestImageListingSearch.get_responsec                 C   s   dd„ |d D ƒS )Nc                 S   s   g | ]}|d  ‘qS r   r   r   r   r   r   r   u  s     z<TestImageListingSearch.get_image_id_list.<locals>.<listcomp>r   r   r   r   r   r   r   t  s    z(TestImageListingSearch.get_image_id_listc                 C   s>   | j dd}t |j d¡¡}|  |¡}|  t|ƒdh¡ d S )NÚjames©Úsearchr"   r[   )r   r,   r-   r   r.   r   r*   r6   r]   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—   ri   r"   r[   r\   r]   r   r   r   Útest_search_with_order  s    
z-TestImageListingSearch.test_search_with_orderF)ZWAGTAILAPI_SEARCH_ENABLEDc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr•   r–   r"   rN   rO   zsearch is disabledrQ   rR   r   r   r   Ú%test_search_when_disabled_gives_error‡  s    z<TestImageListingSearch.test_search_when_disabled_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr•   Zwagtail)r—   r'   r"   rN   rO   z5filtering by tag with a search query is not supportedrQ   rR   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   Z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 )Nr[   r   r    r!   r"   r   r#   r%   r)   r&   z#http://localhost/api/main/images/5/r;   rZ   r@   rA   iô  iˆ  r'   )
r   r*   r+   r,   r-   r   r.   r/   r0   r1   rR   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 )Nr[   r   ZhelloZworldr"   r'   r#   )r   r3   r   r'   rc   r   r,   r-   r   r.   r/   r*   )r   r   r9   r   r   r   r   Ú	test_tagsË  s    
zTestImageDetail.test_tagsc                 C   sL   | j ddd}t |j d¡¡}|  dt| ¡ ƒ¡ |  dt| ¡ ƒ¡ d S )Nr[   rC   r>   r"   r   r;   ©	r   r,   r-   r   r.   r/   r6   r7   ZassertNotInrR   r   r   r   rD   Ø  s    z"TestImageDetail.test_remove_fieldsc                 C   sT   | j ddd}t |j d¡¡}|  dt|d  ¡ ƒ¡ |  dt|d  ¡ ƒ¡ d S )Nr[   z-typer>   r"   r&   r#   r%   r¡   rR   r   r   r   rE   ß  s    z'TestImageDetail.test_remove_meta_fieldsc                 C   sL   | j ddd}t |j d¡¡}|  dt| ¡ ƒ¡ |  dt| ¡ ƒ¡ d S )Nr[   rG   r>   r"   r;   r   r¡   rR   r   r   r   rH   æ  s    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 )Nr[   z	_,id,typer>   r"   r   r#   r%   r<   rR   r   r   r   Útest_remove_all_fieldsí  s    z&TestImageDetail.test_remove_all_fieldsc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr[   rM   r>   r"   rN   rO   rP   rQ   rR   r   r   r   rS   ô  s     ÿz7TestImageDetail.test_star_in_wrong_position_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr[   Úpathr>   r"   rN   rO   zunknown fields: pathrQ   rR   r   r   r   rT   ý  s    zCTestImageDetail.test_fields_which_are_not_in_api_fields_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr[   rU   r>   r"   rN   rO   rV   rQ   rR   r   r   r   rW     s    z5TestImageDetail.test_fields_unknown_field_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr[   rX   r>   r"   rN   rO   rV   rQ   rR   r   r   r   rY     s    z<TestImageDetail.test_fields_remove_unknown_field_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr[   ztitle(foo,bar)r>   r"   rN   rO   z&'title' does not support nested fieldsrQ   rR   r   r   r   Ú6test_nested_fields_on_non_relational_field_gives_error  s    zFTestImageDetail.test_nested_fields_on_non_relational_field_gives_errorN)r   r‘   r’   r“   r   r:   r    rD   rE   rH   r¢   rS   rT   rW   rY   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   s   | j  tdƒ|¡S )Nzwagtailapi_v2:images:findr   r   r   r   r   r     s    zTestImageFind.get_responsec                 C   sL   |   ¡ }|  |jd¡ |  |d d¡ t |j d¡¡}|  |ddi¡ d S )Né”  r    r!   r"   rO   ú	not found©r   r*   r+   r,   r-   r   r.   rR   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 )Nr[   r   zhttp://localhostr   rž   F)Zfetch_redirect_response)r   ZassertRedirectsr   )r   r9   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"   rO   r§   r¨   rR   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¥   Zvarnishz3wagtail.contrib.frontend_cache.backends.HTTPBackendzhttp://localhost:8000)ZBACKENDZLOCATIONzhttp://api.example.com)ZWAGTAILFRONTENDCACHEZ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                    s   t ƒ  ¡  t ¡  d S ©N)ÚsuperÚ
setUpClassr   Zregister_signal_handlers©Úcls©Ú	__class__r   r   r¯   M  s    
z%TestImageCacheInvalidation.setUpClassc                    s   t ƒ  ¡  t ¡  d S r­   )r®   ÚtearDownClassr   Zunregister_signal_handlersr°   r²   r   r   r´   R  s    
z(TestImageCacheInvalidation.tearDownClassc                 C   s"   t ƒ jjdd ¡  | d¡ d S ©Nr[   r   z)http://api.example.com/api/main/images/5/)r   r3   r   ÚsaveÚassert_any_call©r   Úpurger   r   r   Útest_resave_image_purgesW  s    z3TestImageCacheInvalidation.test_resave_image_purgesc                 C   s"   t ƒ jjdd ¡  | d¡ d S rµ   )r   r3   r   Údeleter·   r¸   r   r   r   Útest_delete_image_purges\  s    z3TestImageCacheInvalidation.test_delete_image_purges)
r   r‘   r’   r“   Úclassmethodr¯   r´   rº   r¼   Ú__classcell__r   r   r²   r   r¬   @  s   r¬   )r,   Zunittestr   Zdjango.testr   r   Zdjango.test.utilsr   Zdjango.urlsr   Zwagtail.api.v2r   Zwagtail.imagesr   r	   r”   rœ   r¥   Úpatchr¬   r   r   r   r   Ú<module>   s.     d, &þÿù	