U
    {®Þh² ã                   @   sŒ  d dl Z d dl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 d d
lmZ d dlmZ d dlmZ d dlmZ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„ Z%G dd„ deƒZ&G dd„ de$eƒZ'G dd„ de$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-G d)d*„ d*eƒZ.dS )+é    N)ÚStringIO)Úmock)ÚGroup)ÚContentType)Ú
management)ÚTestCaseÚTransactionTestCase)Úoverride_settings)Úreverse)Ú	APIClient)Úsignal_handlers)ÚPagesAPIViewSet)ÚLocaleÚPageÚSite)ÚBaseViewRestriction)Úmodels)Ú
StreamPage)ÚWagtailTestUtilsc                   C   s(   t jjtjjddjdd ¡  ¡  ¡ S )NT)Zis_default_site)Z	inclusive)	r   ÚobjectsÚdescendant_ofr   ÚgetZ	root_pageÚliveÚpublicÚcount© r   r   úg/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/api/v2/tests/test_pages.pyÚget_total_page_count   s
     ÿÿr   c                   @   s   e Zd Zg ZdS )ÚTest10411APIViewSetN)Ú__name__Ú
__module__Ú__qualname__Zmeta_fieldsr   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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eddd d!„ ƒZeddd"d#„ ƒZd$d%„ Zedd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!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.dXdY„ Z/dZd[„ Z0d\d]„ Z1d^d_„ Z2d`da„ Z3dbdc„ Z4ddde„ Z5dfdg„ Z6dhdi„ Z7djdk„ Z8dldm„ Z9dndo„ Z:dpdq„ Z;drds„ Z<dtdu„ Z=dvdw„ Z>dxdy„ Z?dzd{„ Z@d|d}„ ZAd~d„ ZBd€d„ ZCd‚dƒ„ ZDd„d…„ ZEd†d‡„ ZFdˆd‰„ ZGdŠd‹„ ZHdŒd„ ZIdŽd„ ZJdd‘„ ZKd’d“„ ZLd”d•„ ZMd–d—„ ZNd˜d™„ ZOdšd›„ ZPdœd„ ZQdždŸ„ ZRd d¡„ ZSd¢d£„ ZTd¤d¥„ ZUd¦d§„ ZVd¨d©„ ZWdªd«„ ZXd¬d­„ ZYd®d¯„ ZZd°d±„ Z[d²d³„ Z\d´dµ„ Z]d¶d·„ Z^d¸d¹„ Z_dºd»„ Z`d¼d½„ Zaed¾d¿dÀdÁ„ ƒZbedÂd¿dÃdÄ„ ƒZcedÅd¿dÆdÇ„ ƒZddÈdÉ„ ZedÊdË„ ZfdÌdÍ„ ZgdÎdÏ„ ZhdÐdÑ„ ZidÒdÓ„ Zjd¾S )ÔÚTestPageListingúdemosite.jsonc                 K   s   | j  tdƒ|¡S ©Núwagtailapi_v2:pages:listing©Úclientr   r
   ©ÚselfÚparamsr   r   r   Úget_response)   s    zTestPageListing.get_responsec                 C   s   dd„ |d D ƒS )Nc                 S   s   g | ]}|d  ‘qS ©Úidr   ©Ú.0Úpager   r   r   Ú
<listcomp>-   s     z4TestPageListing.get_page_id_list.<locals>.<listcomp>Úitemsr   ©r)   Úcontentr   r   r   Úget_page_id_list,   s    z TestPageListing.get_page_id_listc                 C   s   t jjddS ©Nú	home-page©Úslug©r   r   r   ©r)   r   r   r   Úget_homepage/   s    zTestPageListing.get_homepagec              	   C   sú   |   ¡ }|  |jd¡ |  |d d¡ t |j d¡¡}|  d|¡ |  |d t	¡ |  d|d ¡ |  |d d t
¡ |  |d d tƒ ¡ |  d|¡ |  |d t¡ |d D ]B}|  d|¡ |  |d t	¡ |  t|d  ¡ ƒdd	d
ddh¡ q²d S )NéÈ   úContent-typeúapplication/jsonúUTF-8ÚmetaÚtotal_countr2   ÚtypeÚ
detail_urlÚhtml_urlr9   Úfirst_published_at)r+   ÚassertEqualÚstatus_codeÚjsonÚloadsr4   ÚdecodeÚassertInÚassertIsInstanceÚdictÚintr   ÚlistÚsetÚkeys©r)   Úresponser4   r0   r   r   r   Ú
test_basic4   s$    þzTestPageListing.test_basicc                 C   sT   t ƒ }tjjjdd}| ¡  |  ¡ }t |j	 
d¡¡}|  |d d |d ¡ d S )Né   r,   r@   rA   rB   é   )r   r   ÚBlogEntryPager   r   Ú	unpublishr+   rI   rJ   r4   rK   rG   )r)   rB   r0   rT   r4   r   r   r   Ú*test_unpublished_pages_dont_appear_in_listS   s    z:TestPageListing.test_unpublished_pages_dont_appear_in_listc                 C   sl   t ƒ }tjjjdd}|jjtjdd t ƒ }|  	||¡ |  
¡ }t |j d¡¡}|  |d d |¡ d S )Né   r,   Útest)Úrestriction_typeÚpasswordr@   rA   rB   )r   r   ÚBlogIndexPager   r   Úview_restrictionsÚcreater   ZPASSWORDÚassertNotEqualr+   rI   rJ   r4   rK   rG   )r)   rB   r0   Únew_total_countrT   r4   r   r   r   Ú&test_private_pages_dont_appear_in_list]   s     ÿz6TestPageListing.test_private_pages_dont_appear_in_listc                 C   sz   t ƒ }| jddd}tƒ }tjjjdd}|jjdd | 	|¡ | t
dƒ¡}t |j d	¡¡d
 d }|  ||¡ d S )NÚalicer^   ©Úusernamer^   r[   r,   Úlogin©r]   r%   r@   rA   rB   )r   Úcreate_userr   r   r_   r   r   r`   ra   Úforce_authenticater
   rI   rJ   r4   rK   rG   )r)   r'   ÚuserÚold_total_countr0   rT   rc   r   r   r   Ú"test_private_pages_with_user_loginl   s    
ÿz2TestPageListing.test_private_pages_with_user_loginc           	      C   s    t ƒ }| jddd}tƒ }tjjjdd}tjjdd}|jj	dd	}|j
 |¡ |j
 |¡ | |¡ | td
ƒ¡}t |j d¡¡d d }|  ||¡ d S )Nre   r^   rf   r[   r,   ZEditors)ÚnameÚgroupsri   r%   r@   rA   rB   )r   rj   r   r   r_   r   r   r   r`   ra   rp   Úaddrk   r
   rI   rJ   r4   rK   rG   )	r)   r'   rl   rm   r0   Zeditors_groupZpage_restriction_instancerT   rc   r   r   r   Ú#test_private_pages_with_user_groups{   s     ÿ
ÿz3TestPageListing.test_private_pages_with_user_groupsc                 C   sF   t jjddd}tjjjdd ¡ j|d |  ¡ }|  	|j
d¡ d S ©NZtestsZmissingpage)Z	app_labelÚmodelrV   r,   )Úcontent_typer=   ©r   r   ra   r   rX   ÚfilterÚorder_byÚupdater+   rG   rH   ©r)   Zmissing_page_content_typerT   r   r   r   Ú)test_page_listing_with_missing_page_model   s     ÿÿz9TestPageListing.test_page_listing_with_missing_page_modelc                 C   s^   | j dd}t |j d¡¡}|d D ]2}|  |d d d¡ |  t| ¡ ƒdddh¡ q&d S )	Núdemosite.BlogEntryPage©rC   r@   r2   rA   rC   r-   Útitle©r+   rI   rJ   r4   rK   rG   rQ   rR   rS   r   r   r   Ú+test_type_filter_items_are_all_blog_entries    s
    z;TestPageListing.test_type_filter_items_are_all_blog_entriesc                 C   s6   | j dd}t |j d¡¡}|  |d d d¡ d S )Nr|   r}   r@   rA   rB   é   ©r+   rI   rJ   r4   rK   rG   ©r)   rT   r4   r   r   r   Útest_type_filter_total_countª   s    z,TestPageListing.test_type_filter_total_countc                 C   s°   | j dd}t |j d¡¡}d}d}|d D ]`}|  |d d dd	g¡ |d d dkr`d
}n|d d d	krtd
}|  t| ¡ ƒdddh¡ q.| j	|dd | j	|dd d S )Nz)demosite.BlogEntryPage,demosite.EventPager}   r@   Fr2   rA   rC   r|   údemosite.EventPageTr-   r~   z%No blog pages were found in the items)Úmsgz&No event pages were found in the items)
r+   rI   rJ   r4   rK   rL   rG   rQ   rR   Ú
assertTrue)r)   rT   r4   Zblog_page_seenZevent_page_seenr0   r   r   r   Útest_type_filter_multiple±   s     
 ÿz)TestPageListing.test_type_filter_multiplec                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nzdemosite.IDontExistr}   r@   é  Úmessageútype doesn't exist©r+   rI   rJ   r4   rK   rG   rH   rƒ   r   r   r   Ú"test_non_existent_type_gives_errorÈ   s    z2TestPageListing.test_non_existent_type_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nz	auth.Userr}   r@   r‰   rŠ   r‹   rŒ   rƒ   r   r   r   Útest_non_page_type_gives_errorÏ   s    z.TestPageListing.test_non_page_type_gives_errorT©ZWAGTAIL_I18N_ENABLEDc                 C   s|   t jjdd}|  ¡ }| |¡}| ¡  ¡  | jdd}t 	|j
 d¡¡}|  t|d ƒd¡ |  |d d d |j¡ d S )	NÚfr©Zlanguage_code)Úlocaler@   r2   rW   r   r-   )r   r   ra   r<   Úcopy_for_translationÚget_latest_revisionÚpublishr+   rI   rJ   r4   rK   rG   Úlenr-   ©r)   ÚfrenchÚhomepageÚfrench_homepagerT   r4   r   r   r   Útest_locale_filterØ   s    
z"TestPageListing.test_locale_filterc                 C   s~   t jjdd}|  ¡ }| |¡}| ¡  ¡  | j|jd}t	 
|j d¡¡}|  t|d ƒd¡ |  |d d d |j¡ d S )	Nr   r‘   )Útranslation_ofr@   r2   rW   r   r-   ©r   r   ra   r<   r“   r”   r•   r+   r-   rI   rJ   r4   rK   rG   r–   r—   r   r   r   Útest_translation_of_filterç   s    
z*TestPageListing.test_translation_of_filterc              	   C   sl   | j dd}t |j d¡¡}|d D ]@}|  t| ¡ ƒdddh¡ |  t|d  ¡ ƒdd	d
ddh¡ q&d S )Nr|   r}   r@   r2   r-   rA   r~   rC   rD   rE   r9   rF   r   rS   r   r   r   Útest_fields_defaultö   s    þz#TestPageListing.test_fields_defaultc                 C   sH   | j dd}t |j d¡¡}|d D ]}|  dt|d  ¡ ƒ¡ q&d S )Nr|   r}   r@   r2   r’   rA   ©r+   rI   rJ   r4   rK   rL   rQ   rR   rS   r   r   r   Ú%test_fields_default_with_i18n_enabled  s    z5TestPageListing.test_fields_default_with_i18n_enabledc              	   C   sP   | j ddd}t |j d¡¡}|d D ]"}|  t| ¡ ƒdddd	d
h¡ q(d S )Nr|   útitle,date,feed_image©rC   Úfieldsr@   r2   r-   rA   r~   ÚdateÚ
feed_imager   rS   r   r   r   Útest_fields
  s     ÿ
 ÿzTestPageListing.test_fieldsc                 C   sH   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒddh¡ q&d S )Nú-title©r¤   r@   r2   r-   rA   r   rS   r   r   r   Útest_remove_fields  s    z"TestPageListing.test_remove_fieldsc                 C   sj   | j dd}t |j d¡¡}|d D ]>}|  t| ¡ ƒdddh¡ |  t|d  ¡ ƒdd	d
dh¡ q&d S )Nú	-html_urlr©   r@   r2   r-   rA   r~   rC   rD   r9   rF   r   rS   r   r   r   Útest_remove_meta_fields  s    
þz'TestPageListing.test_remove_meta_fieldsc                 C   sH   | j dd}t |j d¡¡}|d D ]}|  t| ¡ ƒddh¡ q&d S )Nz5-type,-detail_url,-slug,-first_published_at,-html_urlr©   r@   r2   r-   r~   r   rS   r   r   r   Útest_remove_all_meta_fields'  s    ÿz+TestPageListing.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@   r2   rA   r~   r   rS   r   r   r   Útest_remove_id_field0  s    z$TestPageListing.test_remove_id_fieldc                 C   s†   | j ddd}t |j d¡¡}|d D ]X}|  t| ¡ ƒdddd	d
dddddh
¡ |  t|d  ¡ ƒddddddddddh
¡ q(d S )Nr|   Ú*r£   r@   r2   r-   rA   r~   r¥   Úrelated_linksÚtagsÚcarousel_itemsÚbodyr¦   Úfeed_image_thumbnailrC   rD   Úshow_in_menusrF   Úalias_ofÚ	seo_titler9   rE   Úsearch_descriptionr’   r   rS   r   r   r   Útest_all_fields7  s>    
öþöþzTestPageListing.test_all_fieldsc                 C   s€   | j ddd}t |j d¡¡}|d D ]R}|  t| ¡ ƒdddd	d
dddh¡ |  t|d  ¡ ƒdddddddddh	¡ q(d S )Nr|   z*,-title,-date,-seo_titler£   r@   r2   r-   rA   r±   r²   r³   r´   r¦   rµ   rC   rD   r¶   rF   r·   r9   rE   r¹   r’   r   rS   r   r   r   Ú%test_all_fields_then_remove_something[  s>     ÿ
øþ÷þz5TestPageListing.test_all_fields_then_remove_somethingc                 C   sd   | j ddd}t |j d¡¡}|d D ]6}|  t| ¡ ƒddh¡ |  t|d  ¡ ƒdh¡ q(d S )	Nr|   ú	_,id,typer£   r@   r2   r-   rA   rC   r   rS   r   r   r   Útest_remove_all_fields~  s
    z&TestPageListing.test_remove_all_fieldsc              	   C   sT   | j ddd}t |j d¡¡}|d D ]&}|  t|d  ¡ ƒddd	d
dh¡ q(d S )Nr|   úfeed_image(width,height)r£   r@   r2   r¦   r-   rA   r~   ÚwidthÚheightr   rS   r   r   r   Útest_nested_fields†  s     ÿþz"TestPageListing.test_nested_fieldsc                 C   sN   | j ddd}t |j d¡¡}|d D ] }|  t|d  ¡ ƒddh¡ q(d S )	Nr|   úfeed_image(-title)r£   r@   r2   r¦   r-   rA   r   rS   r   r   r   Útest_remove_nested_fields’  s     ÿz)TestPageListing.test_remove_nested_fieldsc              	   C   sT   | j ddd}t |j d¡¡}|d D ]&}|  t|d  ¡ ƒddd	d
dh¡ q(d S )Nr|   úfeed_image(*)r£   r@   r2   r¦   r-   rA   r~   r¿   rÀ   r   rS   r   r   r   Útest_all_nested_fields›  s     ÿþz&TestPageListing.test_all_nested_fieldsc                 C   sL   | j ddd}t |j d¡¡}|d D ]}|  t|d  ¡ ƒdh¡ q(d S )Nr|   úfeed_image(_,id)r£   r@   r2   r¦   r-   r   rS   r   r   r   Útest_remove_all_nested_fields§  s     ÿz-TestPageListing.test_remove_all_nested_fieldsc                 C   s‚   | j ddd}t |j d¡¡}|d D ]T}|d D ]F}|  t| ¡ ƒddd	d
ddh¡ |  t|d	  ¡ ƒdddddh¡ q4q(d S )Nr|   ú#carousel_items(image(width,height))r£   r@   r2   r³   r-   rA   ÚimageÚ	embed_urlÚcaptionÚlinkr~   r¿   rÀ   r   )r)   rT   r4   r0   Úcarousel_itemr   r   r   Útest_nested_nested_fields°  s     ÿ
þþz)TestPageListing.test_nested_nested_fieldsc                 C   s^   | j ddd}t |j d¡¡}|d D ]0}|  t| ¡ ƒdddd	h¡ |  |d	 t	¡ q(d S )
Nr|   útitle,related_linksr£   r@   r2   r-   rA   r~   r±   ©
r+   rI   rJ   r4   rK   rG   rQ   rR   rM   rP   rS   r   r   r   Útest_fields_child_relationÂ  s     ÿz*TestPageListing.test_fields_child_relationc                 C   sÖ   | j ddd}t |j d¡¡}|d D ]¨}|d }|d k	r(|  |t¡ |  t| 	¡ ƒddd	h¡ |  |d t
¡ |  |d t¡ |  t|d  	¡ ƒd
ddh¡ |  |d d
 d¡ |  |d d d|d  ¡ q(d S )Nr|   r¢   r£   r@   r2   r¦   r-   rA   r~   rC   rD   Údownload_urlúwagtailimages.Imageú$http://localhost/api/main/images/%d/©r+   rI   rJ   r4   rK   rM   rN   rG   rQ   rR   rO   )r)   rT   r4   r0   r¦   r   r   r   Útest_fields_foreign_keyÌ  s*     ÿþ

þz'TestPageListing.test_fields_foreign_keyc                 C   s^   | j ddd}t |j d¡¡}|d D ]0}|  t| ¡ ƒddddh¡ |  |d t	¡ q(d S )	Nr|   r²   r£   r@   r2   r-   rA   r~   rÐ   rS   r   r   r   Útest_fields_tagsä  s
    z TestPageListing.test_fields_tagsc                 C   sl   | j ddd}t |j d¡¡}tjtjd |j d¡¡}dddd	d
dg}|  t	|d d  
¡ ƒ|¡ d S )Nr|   z#date,title,feed_image,related_linksr£   r@   ©Úobject_pairs_hookr-   rA   r~   r¥   r¦   r±   r2   r   ©r+   rI   rJ   r4   rK   ÚJSONDecoderÚcollectionsÚOrderedDictrG   rP   rR   )r)   rT   r4   Úfield_orderr   r   r   Útest_fields_orderingì  s      ÿ
ÿúz$TestPageListing.test_fields_orderingc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nútitle,*r©   r@   r‰   rŠ   ú/fields error: '*' must be in the first positionrŒ   rƒ   r   r   r   Ú'test_star_in_wrong_position_gives_error  s     ÿz7TestPageListing.test_star_in_wrong_position_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr|   úfeed_image(123,title,abc)r£   r@   r‰   rŠ   úunknown fields: 123, abcrŒ   rƒ   r   r   r   Ú%test_unknown_nested_fields_give_error  s     ÿz5TestPageListing.test_unknown_nested_fields_give_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NÚparentr©   r@   r‰   rŠ   zunknown fields: parentrŒ   rƒ   r   r   r   Útest_parent_field_gives_error  s    z-TestPageListing.test_parent_field_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NrÏ   r©   r@   r‰   rŠ   zunknown fields: related_linksrŒ   rƒ   r   r   r   Ú$test_fields_without_type_gives_error  s    z4TestPageListing.test_fields_without_type_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NÚpathr©   r@   r‰   rŠ   úunknown fields: pathrŒ   rƒ   r   r   r   Ú3test_fields_which_are_not_in_api_fields_gives_error#  s    zCTestPageListing.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@   r‰   rŠ   rä   rŒ   rƒ   r   r   r   Ú%test_fields_unknown_field_gives_error*  s    z5TestPageListing.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@   r‰   rŠ   rä   rŒ   rƒ   r   r   r   Ú,test_fields_remove_unknown_field_gives_error1  s    z<TestPageListing.test_fields_remove_unknown_field_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr|   útitle(foo,bar)r£   r@   r‰   rŠ   ú&'title' does not support nested fieldsrŒ   rƒ   r   r   r   Ú6test_nested_fields_on_non_relational_field_gives_error8  s     ÿzFTestPageListing.test_nested_fields_on_non_relational_field_gives_errorc                 C   s:   | j dd}t |j d¡¡}|  |¡}|  |dg¡ d S )Nz	Home page©r~   r@   é   ©r+   rI   rJ   r4   rK   r5   rG   ©r)   rT   r4   Úpage_id_listr   r   r   Útest_filtering_exact_filterC  s    
z+TestPageListing.test_filtering_exact_filterc                 C   s<   | j ddd}t |j d¡¡}|  |¡}|  |dg¡ d S )Nr|   ú
2013-12-02)rC   r¥   r@   rV   rõ   rö   r   r   r   Ú-test_filtering_exact_filter_on_specific_fieldJ  s    
z=TestPageListing.test_filtering_exact_filter_on_specific_fieldc                 C   s:   | j dd}t |j d¡¡}|  |¡}|  |dg¡ d S )NrV   r,   r@   rõ   rö   r   r   r   Útest_filtering_on_idQ  s    
z$TestPageListing.test_filtering_on_idc                 C   s<   | j ddd}t |j d¡¡}|  |¡}|  |dg¡ d S )Núdemosite.contactpageé   ©rC   r¦   r@   é   rõ   rö   r   r   r   Útest_filtering_on_foreign_keyX  s    
z-TestPageListing.test_filtering_on_foreign_keyc              	   C   sD   | j dd}t |j d¡¡}|  |¡}|  |dddddd	g¡ d S )
NÚfalse©r¶   r@   é   é	   rV   é   é   é   rõ   rö   r   r   r   Útest_filtering_on_boolean_  s    
z)TestPageListing.test_filtering_on_booleanc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nrù   )r¥   r@   r‰   rŠ   z?query parameter is not an operation or a recognised field: daterŒ   rƒ   r   r   r   Ú:test_filtering_doesnt_work_on_specific_fields_without_typef  s     ÿþzJTestPageListing.test_filtering_doesnt_work_on_specific_fields_without_typec                 C   s>   | j ddd}t |j d¡¡}|  |¡}|  |ddg¡ d S )Nr|   Úwagtail©rC   r²   r@   rV   r  rõ   rö   r   r   r   Útest_filtering_tagsr  s    
z#TestPageListing.test_filtering_tagsc                 C   s<   | j ddd}t |j d¡¡}|  |¡}|  |dg¡ d S )Nr|   zwagtail,birdr  r@   rV   rõ   rö   r   r   r   Útest_filtering_multiple_tagsy  s    
z,TestPageListing.test_filtering_multiple_tagsc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NÚabc)Únot_a_fieldr@   r‰   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     ÿþz8TestPageListing.test_filtering_unknown_field_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  r,   r@   r‰   rŠ   zefield filter error. 'abc' is not a valid value for id (invalid literal for int() with base 10: 'abc')rŒ   rƒ   r   r   r   Ú test_filtering_id_int_validationŒ  s     ÿþz0TestPageListing.test_filtering_id_int_validationc                 C   sJ   | j ddd}t |j d¡¡}|  |jd¡ |  |d d d… d¡ d S )	Nrü   r  rþ   r@   r‰   rŠ   é=   z=field filter error. 'abc' is not a valid value for feed_imagerŒ   rƒ   r   r   r   Ú)test_filtering_foreign_key_int_validation˜  s    þz9TestPageListing.test_filtering_foreign_key_int_validationc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  r  r@   r‰   rŠ   zhfield filter error. 'abc' is not a valid value for show_in_menus (expected 'true' or 'false', got 'abc')rŒ   rƒ   r   r   r   Ú!test_filtering_boolean_validation¢  s     ÿþz1TestPageListing.test_filtering_boolean_validationc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nú r8   r@   r‰   rŠ   z<field filter error. null characters are not allowed for slugrŒ   rƒ   r   r   r   Ú1test_slug_field_containing_null_bytes_gives_error®  s    þzATestPageListing.test_slug_field_containing_null_bytes_gives_errorc                 C   s>   | j dd}t |j d¡¡}|  |¡}|  |dddg¡ d S )Nr[   ©Úchild_ofr@   rV   r  r  rõ   rö   r   r   r   Útest_child_of_filterº  s    
z$TestPageListing.test_child_of_filterc                 C   sB   | j dd}t |j d¡¡}|  |¡}|  |dddddg¡ d S )	NÚrootr  r@   é   r[   é   é   rÿ   rõ   rö   r   r   r   Útest_child_of_rootÁ  s    
z"TestPageListing.test_child_of_rootc                 C   s:   | j ddd}t |j d¡¡}|  |¡}|  |g ¡ d S )Nr…   r[   )rC   r  r@   rõ   rö   r   r   r   Útest_child_of_with_typeÉ  s    
z'TestPageListing.test_child_of_with_typec                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Néè  r  r@   r‰   rŠ   úparent page doesn't existrŒ   rƒ   r   r   r   Ú&test_child_of_unknown_page_gives_errorÐ  s    z6TestPageListing.test_child_of_unknown_page_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  r  r@   r‰   rŠ   z#child_of must be a positive integerrŒ   rƒ   r   r   r   Ú%test_child_of_not_integer_gives_error×  s    z5TestPageListing.test_child_of_not_integer_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NrW   r  r@   r‰   rŠ   r!  rŒ   rƒ   r   r   r   Ú5test_child_of_page_thats_not_in_same_site_gives_errorÞ  s    zETestPageListing.test_child_of_page_thats_not_in_same_site_gives_errorc                 C   s2   | j dd}| ¡ }|  |¡}|  |ddg¡ d S )Né
   ©Úancestor_ofrô   r  ©r+   rI   r5   rG   rö   r   r   r   Útest_ancestor_of_filterè  s    
z'TestPageListing.test_ancestor_of_filterc                 C   s2   | j ddd}| ¡ }|  |¡}|  |dg¡ d S )Núdemosite.eventindexpager  )rC   r'  r  r(  rö   r   r   r   Útest_ancestor_of_with_typeï  s    
z*TestPageListing.test_ancestor_of_with_typec                 C   s6   | j dd}| ¡ }|  |jd¡ |  |ddi¡ d S )Nr   r&  r‰   rŠ   zdescendant page doesn't exist©r+   rI   rG   rH   rƒ   r   r   r   Ú)test_ancestor_of_unknown_page_gives_errorö  s    z9TestPageListing.test_ancestor_of_unknown_page_gives_errorc                 C   s6   | j dd}| ¡ }|  |jd¡ |  |ddi¡ d S )Nr  r&  r‰   rŠ   z&ancestor_of must be a positive integerr,  rƒ   r   r   r   Ú(test_ancestor_of_not_integer_gives_errorý  s    z8TestPageListing.test_ancestor_of_not_integer_gives_errorc                 C   s.   | j dd}| ¡ }|  |¡}|  |g ¡ d S )Nrô   r&  r(  rö   r   r   r   Ú'test_ancestor_of_home_page_ignores_root  s    
z7TestPageListing.test_ancestor_of_home_page_ignores_rootc              	   C   sD   | j dd}t |j d¡¡}|  |¡}|  |dddddd	g¡ d S )
Nr  ©r   r@   r%  é   r  é   é   é   rõ   rö   r   r   r   Útest_descendant_of_filter  s    
z)TestPageListing.test_descendant_of_filterc                 C   s\   | j dd}t |j d¡¡}|  |¡}|  |dddddd	d
dddddddddddg¡ d S )Nr  r0  r@   r  r  r  r[   rV   r  r  r  r%  r1  r  r2  r3  r4  r  é   é   rÿ   rõ   rö   r   r   r   Útest_descendant_of_root  s    
&þz'TestPageListing.test_descendant_of_rootc                 C   s<   | j ddd}t |j d¡¡}|  |¡}|  |dg¡ d S )Nr*  rô   )rC   r   r@   r  rõ   rö   r   r   r   Útest_descendant_of_with_type!  s    
z,TestPageListing.test_descendant_of_with_typec                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr   r0  r@   r‰   rŠ   úancestor page doesn't existrŒ   rƒ   r   r   r   Ú+test_descendant_of_unknown_page_gives_error(  s    z;TestPageListing.test_descendant_of_unknown_page_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  r0  r@   r‰   rŠ   z(descendant_of must be a positive integerrŒ   rƒ   r   r   r   Ú*test_descendant_of_not_integer_gives_error/  s     ÿz:TestPageListing.test_descendant_of_not_integer_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NrW   r0  r@   r‰   rŠ   r:  rŒ   rƒ   r   r   r   Ú:test_descendant_of_page_thats_not_in_same_site_gives_error8  s    zJTestPageListing.test_descendant_of_page_thats_not_in_same_site_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  r[   )r   r  r@   r‰   rŠ   z9filtering by descendant_of with child_of is not supportedrŒ   rƒ   r   r   r   Ú9test_descendant_of_when_filtering_by_child_of_gives_error@  s    þzITestPageListing.test_descendant_of_when_filtering_by_child_of_gives_errorc                 C   s2   | j dd}t |j d¡¡}|  |ddi¡ d S )NÚ	localhost©Úsiter@   rŠ   zQYour query returned multiple sites. Try adding a port number to your site filter.r‚   rƒ   r   r   r   Ú,test_site_filter_same_hostname_returns_errorL  s     ÿþz<TestPageListing.test_site_filter_same_hostname_returns_errorc                 C   s<   | j dd}t |j d¡¡}|  |¡}|  |ddg¡ d S )Nzlocalhost:8001r@  r@   é   é   rõ   rö   r   r   r   Útest_site_filterW  s    
z TestPageListing.test_site_filterc                 C   sZ   |   ¡ }t |j 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[   rV   r  r  r  r%  r1  r  r2  r3  r4  r  r6  r7  rÿ   rõ   rö   r   r   r   Útest_ordering_defaulta  s    
(þz%TestPageListing.test_ordering_defaultc                 C   s^   | j dd}t |j d¡¡}|  |¡}|  |dddddd	d
ddddddddddddg¡ d S )Nr~   ©Úorderr@   r2  r3  r  r4  r[   rV   r  rÿ   r7  r  r  r  rô   r6  r  r  r  r%  r1  rõ   rö   r   r   r   Útest_ordering_by_titlek  s    
(þz&TestPageListing.test_ordering_by_titlec                 C   s^   | j dd}t |j d¡¡}|  |¡}|  |dddddd	d
ddddddddddddg¡ d S )Nr¨   rG  r@   r1  r%  r  r  r  r6  rô   r  r  r  r7  rÿ   r  rV   r[   r4  r  r3  r2  rõ   rö   r   r   r   Ú test_ordering_by_title_backwardsu  s    
(þz0TestPageListing.test_ordering_by_title_backwardsc                 C   s`   | j dd}t |j d¡¡}|  |¡}| j dd}t |j d¡¡}|  |¡}|  ||¡ d S )NÚrandomrG  r@   )r+   rI   rJ   r4   rK   r5   rb   )r)   Z
response_1Z	content_1Zpage_id_list_1Z
response_2Z	content_2Zpage_id_list_2r   r   r   Útest_ordering_by_random  s    

z'TestPageListing.test_ordering_by_randomc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nz-randomrG  r@   r‰   rŠ   z(cannot order by 'random' (unknown field)rŒ   rƒ   r   r   r   Ú-test_ordering_by_random_backwards_gives_errorŠ  s     ÿz=TestPageListing.test_ordering_by_random_backwards_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NrK  r%  )rH  Úoffsetr@   r‰   rŠ   z,random ordering with offset is not supportedrŒ   rƒ   r   r   r   Ú/test_ordering_by_random_with_offset_gives_error“  s     ÿz?TestPageListing.test_ordering_by_random_with_offset_gives_errorc                 C   s>   | j dd}t |j d¡¡}|  |¡}|  |dddg¡ d S )Nr|   r}   r@   rV   r  r  rõ   rö   r   r   r   Útest_ordering_default_with_typeœ  s    
z/TestPageListing.test_ordering_default_with_typec                 C   s@   | j ddd}t |j d¡¡}|  |¡}|  |dddg¡ d S )Nr|   r~   ©rC   rH  r@   r  rV   r  rõ   rö   r   r   r   Ú test_ordering_by_title_with_type£  s    
z0TestPageListing.test_ordering_by_title_with_typec                 C   s@   | j ddd}t |j d¡¡}|  |¡}|  |dddg¡ d S )Nr|   r¥   rQ  r@   rV   r  r  rõ   rö   r   r   r   Ú)test_ordering_by_specific_field_with_typeª  s    
z9TestPageListing.test_ordering_by_specific_field_with_typec                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  rG  r@   r‰   rŠ   z-cannot order by 'not_a_field' (unknown field)rŒ   rƒ   r   r   r   Ú*test_ordering_by_unknown_field_gives_error±  s     ÿz:TestPageListing.test_ordering_by_unknown_field_gives_errorc                 C   sB   | j dgd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nz	random,idrG  r@   r‰   rŠ   z4random ordering cannot be combined with other fieldsrŒ   rƒ   r   r   r   Ú3test_random_ordering_with_unknown_field_gives_errorº  s     ÿzCTestPageListing.test_random_ordering_with_unknown_field_gives_errorc                 C   st   | j dgd}t |j d¡¡}|  |¡}dddddd	d
ddddddddddddg}|  |d d… |d d… ¡ d S )Nzid,slugrG  r@   rô   r  r[   r  r  r  r%  rÿ   r6  r7  r1  rV   r  r  r  r  r2  r3  r4  rõ   ©r)   rT   r4   r÷   Zexpected_orderr   r   r   Útest_ordering_by_id_and_slugÃ  s0    
íz,TestPageListing.test_ordering_by_id_and_slugc                 C   st   | j dgd}t |j d¡¡}|  |¡}dddddd	d
ddddddddddddg}|  |d d… |d d… ¡ d S )Nz	title,-idrG  r@   r1  r%  r  r  r  r6  rô   r  r  r  r7  rÿ   r  rV   r[   r4  r  r3  r2  rõ   rV  r   r   r   Ú'test_ordering_by_title_and_id_backwardsß  s0    
íz7TestPageListing.test_ordering_by_title_and_id_backwardsc                 C   s6   | j dd}t |j d¡¡}|  t|d ƒd¡ d S )Nrô   ©Úlimitr@   r2   ©r+   rI   rJ   r4   rK   rG   r–   rƒ   r   r   r   Ú"test_limit_only_two_items_returnedý  s    z2TestPageListing.test_limit_only_two_items_returnedc                 C   s8   | j dd}t |j d¡¡}|  |d d tƒ ¡ d S )Nrô   rY  r@   rA   rB   ©r+   rI   rJ   r4   rK   rG   r   rƒ   r   r   r   Útest_limit_total_count  s    z&TestPageListing.test_limit_total_countc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  rY  r@   r‰   rŠ   z limit must be a positive integerrŒ   rƒ   r   r   r   Ú"test_limit_not_integer_gives_error
  s    z2TestPageListing.test_limit_not_integer_gives_errorc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr   rY  r@   r‰   rŠ   zlimit cannot be higher than 20rŒ   rƒ   r   r   r   Útest_limit_too_high_gives_error  s    z/TestPageListing.test_limit_too_high_gives_errorN)ZWAGTAILAPI_LIMIT_MAXc                 C   sF   | j dd}t |j d¡¡}|  |jd¡ |  t|d ƒtƒ ¡ d S )Ni@B rY  r@   r=   r2   )	r+   rI   rJ   r4   rK   rG   rH   r–   r   rƒ   r   r   r   Ú#test_limit_max_none_gives_no_errors  s    z3TestPageListing.test_limit_max_none_gives_no_errorsr%  c                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  rY  r@   r‰   rŠ   zlimit cannot be higher than 10rŒ   rƒ   r   r   r   Ú!test_limit_maximum_can_be_changed   s    z1TestPageListing.test_limit_maximum_can_be_changedrô   c                 C   s2   |   ¡ }t |j d¡¡}|  t|d ƒd¡ d S )Nr@   r2   rô   r[  rƒ   r   r   r   Ú#test_limit_default_changes_with_max(  s    z3TestPageListing.test_limit_default_changes_with_maxc                 C   s:   |   ¡ }t |j d¡¡}|  |¡}|  | d¡d¡ d S )Nr@   r[   r  ©r+   rI   rJ   r4   rK   r5   rG   Úindexrö   r   r   r   Ú)test_offset_5_usually_appears_5th_in_list3  s    
z9TestPageListing.test_offset_5_usually_appears_5th_in_listc                 C   s>   | j dd}t |j d¡¡}|  |¡}|  | d¡d¡ d S )Nr  ©rN  r@   r[   r   rd  rö   r   r   r   Ú test_offset_5_moves_after_offset9  s    
z0TestPageListing.test_offset_5_moves_after_offsetc                 C   s8   | j dd}t |j d¡¡}|  |d d tƒ ¡ d S )Nr%  rg  r@   rA   rB   r]  rƒ   r   r   r   Útest_offset_total_count?  s    z'TestPageListing.test_offset_total_countc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  rg  r@   r‰   rŠ   z!offset must be a positive integerrŒ   rƒ   r   r   r   Ú#test_offset_not_integer_gives_errorF  s    z3TestPageListing.test_offset_not_integer_gives_errorc                 C   s(   t j ¡  ¡  |  ¡ }|  |jd¡ d S )Nr=   )r   r   ÚallÚdeleter+   rG   rH   ©r)   rT   r   r   r   Útest_issue_3967O  s    zTestPageListing.test_issue_3967c                 C   s"   | j  tdƒ¡}|  |jd¡ d S )Nz!wagtailapi_v2:issue_10411:listingr=   )r'   r   r
   rG   rH   rm  r   r   r   Útest_issue_10411U  s    z TestPageListing.test_issue_10411)kr   r    r!   Úfixturesr+   r5   r<   rU   rZ   rd   rn   rr   r{   r€   r„   rˆ   r   rŽ   r	   r›   rž   rŸ   r¡   r§   rª   r¬   r­   r¯   rº   r»   r½   rÁ   rÃ   rÅ   rÇ   rÎ   rÑ   rÖ   r×   rß   râ   rå   rç   rè   rë   rí   rï   rò   rø   rú   rû   r   r  r	  r  r  r  r  r  r  r  r  r  r  r"  r#  r$  r)  r+  r-  r.  r/  r5  r8  r9  r;  r<  r=  r>  rB  rE  rF  rI  rJ  rL  rM  rO  rP  rR  rS  rT  rU  rW  rX  r\  r^  r_  r`  ra  rb  rc  rf  rh  ri  rj  rn  ro  r   r   r   r   r"   &   sÚ   

	


	$#		
		


	



				



	r"   c                       sÈ   e Zd ZdgZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zed
d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eddd d!„ ƒZd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Z‡  ZS )*ÚTestPageListingSearchr#   c                    s"   t ƒ  ¡  tjddtƒ dd d S )NZupdate_indexÚdefaulté2   )Úbackend_nameÚstdoutÚ
chunk_size)ÚsuperÚsetUpr   Zcall_commandr   r;   ©Ú	__class__r   r   rx  ^  s    
üzTestPageListingSearch.setUpc                 K   s   | j  tdƒ|¡S r$   r&   r(   r   r   r   r+   g  s    z"TestPageListingSearch.get_responsec                 C   s   dd„ |d D ƒS )Nc                 S   s   g | ]}|d  ‘qS r,   r   r.   r   r   r   r1   k  s     z:TestPageListingSearch.get_page_id_list.<locals>.<listcomp>r2   r   r3   r   r   r   r5   j  s    z&TestPageListingSearch.get_page_id_listc                 C   s   t jjddS r6   r:   r;   r   r   r   r<   m  s    z"TestPageListingSearch.get_homepageTr   c                 C   s¢   t jjdd}|  ¡ }| |¡}| ¡  ¡  tjjdd}| |¡}| ¡  ¡  | j	ddd}t
 |j d¡¡}|  t|d ƒd	¡ |  |d d
 d |j¡ d S )Nr   r‘   z/home-page/events-index/©Zurl_pathÚevents)r’   Úsearchr@   r2   rW   r   r-   )r   r   ra   r<   r“   r”   r•   r   r   r+   rI   rJ   r4   rK   rG   r–   r-   )r)   r˜   r™   rš   Zevents_indexZfrench_events_indexrT   r4   r   r   r   Útest_locale_filter_with_searchp  s    

z4TestPageListingSearch.test_locale_filter_with_searchc                 C   s¶   t jjdd}|  ¡ }| |¡}| ¡  ¡  | j|jdd}t	 
|j d¡¡}|  t|d ƒd¡ |  |d d d	 |j¡ | j|jd
d}t	 
|j d¡¡}|  t|d ƒd¡ d S )Nr   r‘   Úhome)rœ   r}  r@   r2   rW   r   r-   Zgnomer   r—   r   r   r   Ú&test_translation_of_filter_with_search€  s    
z<TestPageListingSearch.test_translation_of_filter_with_searchc                 C   sD   | j dd}t |j d¡¡}|  |¡}|  t|ƒddddh¡ d S )NÚblog©r}  r@   r[   rV   r  r  ©r+   rI   rJ   r4   rK   r5   rG   rQ   rö   r   r   r   Útest_search_for_blog  s    
z*TestPageListingSearch.test_search_for_blogc                 C   sD   | j ddd}t |j d¡¡}|  |¡}|  t|ƒdddh¡ d S )Nr|   r  ©rC   r}  r@   rV   r  r  rƒ  rö   r   r   r   Útest_search_with_type˜  s    
z+TestPageListingSearch.test_search_with_typec                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nzdemosite.InvalidPageTyper  r…  r@   r‰   rŠ   r‹   rŒ   rƒ   r   r   r   Útest_search_with_invalid_typeŸ  s    z3TestPageListingSearch.test_search_with_invalid_typec                 C   s>   | j dddd}t |j d¡¡}|  |¡}|  |dg¡ d S )NzAnother blog postr  r~   )r~   r}  rH  r@   r  rõ   rö   r   r   r   Útest_search_with_filter§  s      ÿ
z-TestPageListingSearch.test_search_with_filterc                 C   sF   | j ddddd}t |j d¡¡}|  |jd¡ |  |dd	i¡ d S )
Nr|   Úfoor  r~   )rC   r´   r}  rH  r@   r‰   rŠ   z>cannot filter by 'body' while searching (field is not indexed)rŒ   rƒ   r   r   r   Ú/test_search_with_filter_on_non_filterable_field±  s       ÿ ÿþzETestPageListingSearch.test_search_with_filter_on_non_filterable_fieldc                 C   sB   | j ddd}t |j d¡¡}|  |¡}|  |ddddg¡ d S )	Nr  r~   )r}  rH  r@   r  r[   rV   r  rõ   rö   r   r   r   Útest_search_with_order¿  s    
z,TestPageListingSearch.test_search_with_orderc                 C   sD   | j dddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )	Nr|   r  r´   )rC   r}  rH  r@   r‰   rŠ   z=cannot order by 'body' while searching (field is not indexed)rŒ   rƒ   r   r   r   Ú.test_search_with_order_on_non_filterable_fieldÇ  s      ÿ ÿþzDTestPageListingSearch.test_search_with_order_on_non_filterable_fieldF)ZWAGTAILAPI_SEARCH_ENABLEDc                 C   s@   | j dd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )Nr  r‚  r@   r‰   rŠ   zsearch is disabledrŒ   rƒ   r   r   r   Ú%test_search_when_disabled_gives_errorÕ  s    z;TestPageListingSearch.test_search_when_disabled_gives_errorc                 C   sD   | j dddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )	Nr|   r  r
  )rC   r}  r²   r@   r‰   rŠ   z5filtering by tag with a search query is not supportedrŒ   rƒ   r   r   r   Ú-test_search_when_filtering_by_tag_gives_errorÝ  s      ÿþzCTestPageListingSearch.test_search_when_filtering_by_tag_gives_errorc                 C   sB   | j dddd}t |j d¡¡}|  |¡}|  t|ƒdh¡ d S )Nr|   úblog elephantsÚand©rC   r}  Zsearch_operatorr@   r  rƒ  rö   r   r   r   Útest_search_operator_andé  s    ý
z.TestPageListingSearch.test_search_operator_andc                 C   sF   | j dddd}t |j d¡¡}|  |¡}|  t|ƒdddh¡ d S )	Nr|   r  Úorr‘  r@   rV   r  r  rƒ  rö   r   r   r   Útest_search_operator_orõ  s      ÿ
z-TestPageListingSearch.test_search_operator_orc                 C   sT   | j dd}t |j d¡¡}|  |jd¡ |  |d d¡ |  |d d d	¡ d S )
NÚ r‚  r@   r=   r>   r?   rA   rB   r   rŒ   rƒ   r   r   r   Útest_empty_searches_workÿ  s
    z.TestPageListingSearch.test_empty_searches_work)r   r    r!   rp  rx  r+   r5   r<   r	   r~  r€  r„  r†  r‡  rˆ  rŠ  r‹  rŒ  r  rŽ  r’  r”  r–  Ú__classcell__r   r   ry  r   rq  [  s,   	

	


rq  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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&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:S );ÚTestPageDetailr#   c                 K   s   | j  td|fd|¡S )Núwagtailapi_v2:pages:detail©Úargsr&   )r)   Zpage_idr*   r   r   r   r+   
  s     ÿzTestPageDetail.get_responsec              
   C   sv  |   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 t	¡ |  t
|d d  ¡ ƒdddh¡ |  |d d d d¡ |  |d d d t	¡ |  t
|d d d  ¡ ƒdd
dh¡ |  |d d d d d¡ |  |d d 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 t	¡ |  t
|d  ¡ ƒdddh¡ |  |d d d¡ |  |d d t	¡ |  t
|d d  ¡ ƒdd
dh¡ |  |d d d d ¡ |  |d d d
 d!¡ |  |d" d#d$i¡ |  |d g ¡ |d D ]@}|  t
| ¡ ƒddd%d&d'd(h¡ |  t
|d  ¡ ƒdh¡ q0d S ))NrV   r=   r>   r?   r@   r-   rA   rC   r|   rD   ú#http://localhost/api/main/pages/16/rE   ú&http://localhost/blog-index/blog-post/ræ   r~   r[   zdemosite.BlogIndexPagez"http://localhost/api/main/pages/5/zhttp://localhost/blog-index/r·   r¥   r´   r²   r¦   r±   r³   rù   Úbirdr
  rý   rÒ   rÓ   z#http://localhost/api/main/images/7/rµ   ÚerrorZSourceImageIOErrorrÊ   rÌ   rË   rÉ   )r+   rG   rH   rI   rJ   r4   rK   rL   rM   rN   rQ   rR   ÚassertIsNone©r)   rT   r4   rÍ   r   r   r   rU     sš    

 ÿ
 ÿ"þ ÿþþþþ þþ	
þzTestPageDetail.test_basicc                 C   s2   |   d¡}t |j d¡¡}|  |d d ¡ d S )Nrô   r@   rA   ræ   )r+   rI   rJ   r4   rK   r   rƒ   r   r   r   Ú)test_meta_parent_id_doesnt_show_root_pagez  s    
z8TestPageDetail.test_meta_parent_id_doesnt_show_root_pagec              
   C   s˜   |   d¡}t |j d¡¡}tjtjd |j d¡¡}dddddd	d
dddg
}|  t	| 
¡ ƒ|¡ ddddddddddg
}|  t	|d  
¡ ƒ|¡ d S )NrV   r@   rØ   r-   rA   r~   r´   r²   r¥   r¦   rµ   r³   r±   rC   rD   rE   r9   r¶   r¸   r¹   rF   r·   ræ   rÚ   )r)   rT   r4   rÞ   Zmeta_field_orderr   r   r   Útest_field_ordering  s:    

ÿööz"TestPageDetail.test_field_orderingc                 C   sV   t jjjdd ¡ jd d |  d¡}t |j	 
d¡¡}|  d|¡ |  |d ¡ d S )NrV   r,   )Zfeed_image_idr@   r±   r¦   )r   rX   r   rw   rx   ry   r+   rI   rJ   r4   rK   rL   r   rƒ   r   r   r   Útest_null_foreign_key§  s
    
z$TestPageDetail.test_null_foreign_keyc                 C   sH   t jjddd}tjjjdd ¡ j|d |  d¡}|  	|j
d¡ d S rs   rv   rz   r   r   r   Ú!test_page_with_missing_page_model°  s     ÿÿ
z0TestPageDetail.test_page_with_missing_page_modelc                 C   st  t jjddj}|jdd}|  |j¡}|  |jd¡ |  |d d¡ t	 
|j d¡¡}|  |d	 d
 d¡ |  |d	 d d¡ |  d|d	 ¡ |  |d	 d t¡ |  t|d	 d  ¡ ƒdd	dh¡ |  |d	 d d d¡ |  |d	 d d	 t¡ |  t|d	 d d	  ¡ ƒd
ddh¡ |  |d	 d d	 d
 d¡ |  |d	 d d	 d d¡ |  |d	 d d	 d d¡ d S )NrV   r,   znew-slug)Zupdate_slugr=   r>   r?   r@   rA   rC   r|   rE   z%http://localhost/blog-index/new-slug/r·   r-   r~   rD   rœ  r  )r   r   r   ÚspecificZcreate_aliasr+   r-   rG   rH   rI   rJ   r4   rK   rL   rM   rN   rQ   rR   )r)   ÚoriginalÚaliasrT   r4   r   r   r   Útest_alias_page¿  sF    
 ÿ ÿþ ÿþþzTestPageDetail.test_alias_pageTr   c                 C   s8   |   d¡}t |j d¡¡}|  dt|d  ¡ ƒ¡ d S )NrV   r@   r’   rA   r    )r)   rT   r0   r   r   r   Ú%test_default_fields_with_i18n_enabledê  s    
z4TestPageDetail.test_default_fields_with_i18n_enabledc                 C   sL   | j ddd}t |j d¡¡}|  dt| ¡ ƒ¡ |  dt| ¡ ƒ¡ d S )NrV   r¨   r©   r@   r-   r~   ©	r+   rI   rJ   r4   rK   rL   rQ   rR   ZassertNotInrƒ   r   r   r   rª   ò  s    z!TestPageDetail.test_remove_fieldsc                 C   sT   | j ddd}t |j d¡¡}|  dt|d  ¡ ƒ¡ |  dt|d  ¡ ƒ¡ d S )NrV   r«   r©   r@   rD   rA   rE   r«  rƒ   r   r   r   r¬   ù  s    z&TestPageDetail.test_remove_meta_fieldsc                 C   sL   | j ddd}t |j d¡¡}|  dt| ¡ ƒ¡ |  dt| ¡ ƒ¡ d S )NrV   zu-type,-detail_url,-slug,-first_published_at,-alias_of,-html_url,-search_description,-show_in_menus,-parent,-seo_titler©   r@   r-   rA   r«  rƒ   r   r   r   r­      s    þz*TestPageDetail.test_remove_all_meta_fieldsc                 C   sL   | j ddd}t |j d¡¡}|  dt| ¡ ƒ¡ |  dt| ¡ ƒ¡ d S )NrV   r®   r©   r@   r~   r-   r«  rƒ   r   r   r   r¯   
  s    z#TestPageDetail.test_remove_id_fieldc                 C   sV   | j ddd}t |j d¡¡}|  t| ¡ ƒddh¡ |  t|d  ¡ ƒdh¡ d S )NrV   r¼   r©   r@   r-   rA   rC   r   rƒ   r   r   r   r½     s    z%TestPageDetail.test_remove_all_fieldsc                 C   sF   | j ddd}t |j d¡¡}|  t|d  ¡ ƒdddd	d
h¡ d S )NrV   r¾   r©   r@   r¦   r-   rA   r~   r¿   rÀ   r   rƒ   r   r   r   rÁ     s    þz!TestPageDetail.test_nested_fieldsc                 C   s@   | j ddd}t |j d¡¡}|  t|d  ¡ ƒddh¡ d S )NrV   rÂ   r©   r@   r¦   r-   rA   r   rƒ   r   r   r   rÃ   !  s    z(TestPageDetail.test_remove_nested_fieldsc                 C   sF   | j ddd}t |j d¡¡}|  t|d  ¡ ƒdddd	d
h¡ d S )NrV   rÄ   r©   r@   r¦   r-   rA   r~   r¿   rÀ   r   rƒ   r   r   r   rÅ   '  s    þz%TestPageDetail.test_all_nested_fieldsc                 C   s>   | j ddd}t |j d¡¡}|  t|d  ¡ ƒdh¡ d S )NrV   rÆ   r©   r@   r¦   r-   r   rƒ   r   r   r   rÇ   0  s    z,TestPageDetail.test_remove_all_nested_fieldsc              
   C   st   | j ddd}t |j d¡¡}|d D ]F}|  t| ¡ ƒdddd	d
dh¡ |  t|d  ¡ ƒdddddh¡ q(d S )NrV   rÈ   r©   r@   r³   r-   rA   rÉ   rÊ   rË   rÌ   r~   r¿   rÀ   r   r¡  r   r   r   rÎ   6  s    
þþz(TestPageDetail.test_nested_nested_fieldsc                 C   s0   |   d¡}t |j d¡¡}|  |d t¡ d S )NrV   r@   r±   )r+   rI   rJ   r4   rK   rM   rP   rƒ   r   r   r   Ú"test_fields_child_relation_is_listE  s    
z1TestPageDetail.test_fields_child_relation_is_listc                 C   s¼   |   d¡}t |j d¡¡}|d }|  |t¡ |  t| 	¡ ƒdddh¡ |  |d t
¡ |  |d t¡ |  t|d  	¡ ƒddd	h¡ |  |d d d
¡ |  |d d d|d  ¡ d S )NrV   r@   r¦   r-   rA   r~   rC   rD   rÒ   rÓ   rÔ   rÕ   )r)   rT   r4   r¦   r   r   r   rÖ   K  s     
 ÿ

þz&TestPageDetail.test_fields_foreign_keyc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NrV   rà   r©   r@   r‰   rŠ   rá   rŒ   rƒ   r   r   r   râ   ^  s     ÿz6TestPageDetail.test_star_in_wrong_position_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NrV   rã   r©   r@   r‰   rŠ   rä   rŒ   rƒ   r   r   r   rå   g  s    z4TestPageDetail.test_unknown_nested_fields_give_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NrV   ré   r©   r@   r‰   rŠ   rê   rŒ   rƒ   r   r   r   rë   n  s    zBTestPageDetail.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 )NrV   rì   r©   r@   r‰   rŠ   rä   rŒ   rƒ   r   r   r   rí   u  s    z4TestPageDetail.test_fields_unknown_field_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NrV   rî   r©   r@   r‰   rŠ   rä   rŒ   rƒ   r   r   r   rï   |  s    z;TestPageDetail.test_fields_remove_unknown_field_gives_errorc                 C   sB   | j ddd}t |j d¡¡}|  |jd¡ |  |ddi¡ d S )NrV   rð   r©   r@   r‰   rŠ   rñ   rŒ   rƒ   r   r   r   rò   ƒ  s    zETestPageDetail.test_nested_fields_on_non_relational_field_gives_errorc                 C   sÀ   t jjdd}|jtjddd}tjjj|dddd}tjjj|d	d
dddd}| j|j	dd}t
 |j d¡¡}|  |d |j	dddidddddddœ	|j	d
ddid
ddddddœ	g¡ dS )zl
        Check that adding form_fields will correctly return then in the API response when declared
        r7   r8   z
Contact usró   ©ÚinstancerW   Úemail)r0   Ú
sort_orderÚlabelÚ
field_typerô   rŠ   Ú	multilineTz<em>please</em> be polite)r0   r°  r±  r²  ÚrequiredÚ	help_textZform_fieldsr©   r@   rC   zdemosite.FormFieldr•  )	r-   Z
clean_namerA   r±  rµ  r´  r²  ÚchoicesÚdefault_valueN)r   r   r   Ú	add_childr   ZFormPageZ	FormFieldra   r+   ÚpkrI   rJ   r4   rK   rG   )r)   Z	home_pageZ	form_pageZfield_1Zfield_2rT   r4   r   r   r   Útest_form_fields_on_form_pageŠ  sT    üú	÷÷ôþz,TestPageDetail.test_form_fields_on_form_pageN) r   r    r!   rp  r+   rU   r¢  r£  r¤  r¥  r©  r	   rª  rª   r¬   r­   r¯   r½   rÁ   rÃ   rÅ   rÇ   rÎ   r¬  rÖ   râ   rå   rë   rí   rï   rò   rº  r   r   r   r   r˜    s:   k&	+

			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 )ÚTestPageFindr#   c                 K   s   | j  tdƒ|¡S )Nzwagtailapi_v2:pages:findr&   r(   r   r   r   r+   Ä  s    zTestPageFind.get_responsec                 C   sL   |   ¡ }|  |jd¡ |  |d d¡ t |j d¡¡}|  |ddi¡ d S )Né”  r>   r?   r@   rŠ   ú	not found©r+   rG   rH   rI   rJ   r4   rK   rƒ   r   r   r   Útest_without_parametersÇ  s
    z$TestPageFind.test_without_parametersc                 C   s.   | j dd}| j|dtddgd dd d S )Nr[   r,   úhttp://localhostr™  rš  F©Zfetch_redirect_response©r+   ZassertRedirectsr
   rm  r   r   r   Útest_find_by_idÒ  s    ýzTestPageFind.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(TestPageFind.test_find_by_id_nonexistentc                 C   s.   | j dd}| j|dtddgd dd d S )	Nz/events-index/event-1/©Z	html_pathrÀ  r™  r  rš  FrÁ  rÂ  rm  r   r   r   Útest_find_by_html_pathæ  s    ýz#TestPageFind.test_find_by_html_pathc                 C   s.   | j dd}| j|dtddgd dd d S )	Nzevents-index/event-1rÅ  rÀ  r™  r  rš  FrÁ  rÂ  rm  r   r   r   Ú9test_find_by_html_path_with_start_and_end_slashes_removedï  s    ýzFTestPageFind.test_find_by_html_path_with_start_and_end_slashes_removedc                 C   sP   | j dd}|  |jd¡ |  |d d¡ t |j d¡¡}|  |ddi¡ d S )	Nz/foorÅ  r¼  r>   r?   r@   rŠ   r½  r¾  rƒ   r   r   r   Ú"test_find_by_html_path_nonexistentø  s
    z/TestPageFind.test_find_by_html_path_nonexistentN)r   r    r!   rp  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 )ÚTestPageDetailWithStreamFieldz	test.jsonc                 C   s   t jjdd| _d S )Nz/home/r{  )r   r   r   r™   r;   r   r   r   rx    s    z#TestPageDetailWithStreamField.setUpc                 C   s   t dd|d}| jj|dS )Nzstream pagezstream-page)r~   r9   r´   r­  )r   r™   r¸  )r)   r´   Ústream_pager   r   r   Úmake_stream_page
  s    z.TestPageDetailWithStreamField.make_stream_pagec                 C   sÞ   |   d¡}td|jfd}| j |¡}|  |jd¡ |  |d d¡ t |j	 
d¡¡}|  d|¡ |  |d |j¡ |  d	|¡ |  t|d	 ƒd
¡ |  |d	 d d d¡ |  |d	 d d d¡ |  |d	 d d ¡ d S )Nz"[{"type": "text", "value": "foo"}]r™  rš  r=   zcontent-typer?   úutf-8r-   r´   rW   r   rC   ÚtextÚvaluer‰  )rË  r
   r-   r'   r   rG   rH   rI   rJ   r4   rK   rL   r–   r‡   ©r)   rÊ  Zresponse_urlrT   r4   r   r   r   Ú"test_can_fetch_streamfield_content  s    
z@TestPageDetailWithStreamField.test_can_fetch_streamfield_contentc                 C   sl   |   d¡}td|jfd}| j |¡}t |j d¡¡}|  	|d d d d¡ |  	|d d d	 d
¡ d S )Nú[{"type": "image", "value": 1}]r™  rš  rÌ  r´   r   rC   rÉ   rÎ  rW   )
rË  r
   r-   r'   r   rI   rJ   r4   rK   rG   rÏ  r   r   r   Útest_image_block!  s    
z.TestPageDetailWithStreamField.test_image_blockc                 C   sx   |   d¡}d td|jfd¡}| j |¡}t |j 	d¡¡}|  
|d d d d	¡ |  
|d d d
 dddœ¡ d S )NrÑ  z{}?extended=1r™  rš  rÌ  r´   r   rC   rÉ   rÎ  rW   zA missing image)r-   r~   )rË  Úformatr
   r-   r'   r   rI   rJ   r4   rK   rG   rÏ  r   r   r   Ú3test_image_block_with_custom_get_api_representation,  s    
ÿ ÿzQTestPageDetailWithStreamField.test_image_block_with_custom_get_api_representationN)	r   r    r!   rp  rx  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                       sV   e Zd ZdgZe‡ fdd„ƒZe‡ fdd„ƒZdd„ Zdd	„ Zd
d„ Z	dd„ Z
‡  ZS )ÚTestPageCacheInvalidationr#   c                    s   t ƒ  ¡  t ¡  d S ©N)rw  Ú
setUpClassr   Zregister_signal_handlers©Úclsry  r   r   r×  I  s    
z$TestPageCacheInvalidation.setUpClassc                    s   t ƒ  ¡  t ¡  d S rÖ  )rw  ÚtearDownClassr   Zunregister_signal_handlersrØ  ry  r   r   rÚ  N  s    
z'TestPageCacheInvalidation.tearDownClassc                 C   s&   t jjddj ¡  ¡  | d¡ d S ©Nrô   r,   z(http://api.example.com/api/main/pages/2/)r   r   r   r¦  Úsave_revisionr•   Úassert_any_call©r)   Úpurger   r   r   Útest_republish_page_purgesS  s    z4TestPageCacheInvalidation.test_republish_page_purgesc                 C   s    t jjdd ¡  | d¡ d S rÛ  )r   r   r   rY   rÝ  rÞ  r   r   r   Útest_unpublish_page_purgesX  s    z4TestPageCacheInvalidation.test_unpublish_page_purgesc                 C   s    t jjdd ¡  | d¡ d S )NrV   r,   z)http://api.example.com/api/main/pages/16/)r   r   r   rl  rÝ  rÞ  r   r   r   Útest_delete_page_purges]  s    z1TestPageCacheInvalidation.test_delete_page_purgesc                 C   s    t jjddj ¡  | ¡  d S )Nrô   r,   )r   r   r   r¦  rÜ  Zassert_not_calledrÞ  r   r   r   Útest_save_draft_doesnt_purgeb  s    z6TestPageCacheInvalidation.test_save_draft_doesnt_purge)r   r    r!   rp  Úclassmethodr×  rÚ  rà  rá  râ  rã  r—  r   r   ry  r   rÕ  <  s   rÕ  c                   @   s   e Zd ZejZdd„ ZdS )ÚTestPageViewSetSubclassingc                 C   s   |   |  ¡ jtj¡ d S rÖ  )rG   Zget_querysetrt   r   rX   r;   r   r   r   Útest_get_querysetk  s    þz,TestPageViewSetSubclassing.test_get_querysetN)r   r    r!   r   rX   rt   ræ  r   r   r   r   rå  h  s   rå  )/rÜ   rI   Úior   Zunittestr   Zdjango.contrib.auth.modelsr   Z"django.contrib.contenttypes.modelsr   Zdjango.corer   Zdjango.testr   r   Zdjango.test.utilsr	   Zdjango.urlsr
   Zrest_framework.testr   Zwagtail.api.v2r   Zwagtail.api.v2.viewsr   Zwagtail.modelsr   r   r   Z wagtail.models.view_restrictionsr   Zwagtail.test.demositer   Zwagtail.test.testapp.modelsr   Zwagtail.test.utilsr   r   r   r"   rq  r˜  r»  rÉ  ÚpatchrÕ  rå  r   r   r   r   Ú<module>   s^           = -   =C8þÿù	"