U
    |®Þh9¿  ã                   @   s  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mZ d dlmZmZmZmZmZ d d	lmZ d d
lmZ d dlmZmZmZ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 eƒZ$G dd„ de eƒZ%G dd„ deƒZ&dS )é    )ÚStringIO)Úmock)Úget_user_model)ÚContentType)Ú
management)ÚCountÚQ)ÚTestCaseÚTransactionTestCase)ÚLocaleÚPageÚPageViewRestrictionÚSiteÚWorkflow)Ú	MATCH_ALL)Úpage_unpublished)Ú	EventPageÚ
SimplePageÚSingleEventPageÚ
StreamPage)ÚWagtailTestUtilsc                   @   sb  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!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-dVS )WÚTestPageQuerySetú	test.jsonc                 C   sJ   t j ¡ }|D ]}|  |j¡ qt jjdd}|  |j|jd ¡ ¡ d S )Nú/home/©Úurl_path©Úid)r   ÚobjectsÚliveÚ
assertTrueÚgetÚfilterr   Úexists)ÚselfÚpagesÚpageÚhomepage© r(   úh/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/tests/test_page_queryset.pyÚ	test_live   s
    
zTestPageQuerySet.test_livec                 C   sJ   t j ¡ }|D ]}|  |j¡ qt jjdd}|  |j|jd 	¡ ¡ d S )Nú!/home/events/someone-elses-event/r   r   )
r   r   Znot_liveÚassertFalser   r!   r    r"   r   r#   ©r$   r%   r&   Úeventr(   r(   r)   Útest_not_live$   s
    
zTestPageQuerySet.test_not_livec                 C   sJ   t j ¡ }|D ]}|  |j¡ qt jjdd}|  |j|jd ¡ ¡ d S ©Nú/home/events/r   r   )	r   r   Úin_menur    Úshow_in_menusr!   r"   r   r#   )r$   r%   r&   Úevents_indexr(   r(   r)   Útest_in_menu/   s
    
zTestPageQuerySet.test_in_menuc                 C   s:   t j ¡ }|D ]}|  |j¡ q|  |jdd ¡ ¡ d S )Né   r   )r   r   Znot_in_menur,   r3   r    r"   r#   )r$   r%   r&   r(   r(   r)   Útest_not_in_menu:   s    
z!TestPageQuerySet.test_not_in_menuc                 C   s>   t jjdd}t j |¡}|  | ¡ d¡ |  | ¡ |¡ d S ©Nr   r   r6   )r   r   r!   r&   ÚassertEqualÚcountÚfirst)r$   r'   r%   r(   r(   r)   Ú	test_pageD   s    zTestPageQuerySet.test_pagec                 C   sR   t jjdd}t j |¡}|  | ¡ t j ¡  ¡ d ¡ |D ]}|  ||¡ q<d S r8   )r   r   r!   Znot_pager9   r:   ÚallÚassertNotEqual©r$   r'   r%   r&   r(   r(   r)   Útest_not_pageL   s
    zTestPageQuerySet.test_not_pagec                 C   sD   t jjdd}t j |¡}|D ] }|  | ¡ j|jd ¡ ¡ qd S r0   ©	r   r   r!   Zdescendant_ofr    Úget_ancestorsr"   r   r#   ©r$   r4   r%   r&   r(   r(   r)   Útest_descendant_ofU   s    z#TestPageQuerySet.test_descendant_ofc                 C   sh   t jjdd}t jj|dd}|D ](}|  ||kpF| ¡ j|jd ¡ ¡ q"|  |j|jd ¡ ¡ d S ©Nr1   r   T©Z	inclusiver   rA   rC   r(   r(   r)   Útest_descendant_of_inclusive]   s    þz-TestPageQuerySet.test_descendant_of_inclusivec                 C   s\   t jjdd}t j |¡}|D ] }|  | ¡ j|jd ¡ ¡ q|  	|j|jd ¡ ¡ d S r0   )
r   r   r!   Únot_descendant_ofr,   rB   r"   r   r#   r    rC   r(   r(   r)   Útest_not_descendant_ofk   s
    z'TestPageQuerySet.test_not_descendant_ofc                 C   s`   t jjdd}t jj|dd}|D ] }|  | ¡ j|jd ¡ ¡ q"|  |j|jd ¡ ¡ d S rE   )	r   r   r!   rH   r,   rB   r"   r   r#   rC   r(   r(   r)   Ú test_not_descendant_of_inclusivev   s
    z1TestPageQuerySet.test_not_descendant_of_inclusivec                 C   s8   t jjdd}t j |¡}|D ]}|  | ¡ |¡ qd S )Nr   r   )r   r   r!   Zchild_ofr9   Ú
get_parentr?   r(   r(   r)   Útest_child_of   s    zTestPageQuerySet.test_child_ofc                 C   s8   t jjdd}t j |¡}|D ]}|  | ¡ |¡ qd S )Nr1   r   )r   r   r!   Znot_child_ofr>   rK   rC   r(   r(   r)   Útest_not_child_of‰   s    z"TestPageQuerySet.test_not_child_ofc                 C   sj   t jjdd}t jjdd}t jjdd}t j |¡}|  | ¡ d¡ |  |d |¡ |  |d |¡ d S )Nr6   r   r   r   r1   é   r   ©r   r   r!   Zancestor_ofr9   r:   ©r$   Ú	root_pager'   r4   r%   r(   r(   r)   Útest_ancestor_of‘   s    z!TestPageQuerySet.test_ancestor_ofc                 C   s~   t jjdd}t jjdd}t jjdd}t jj|dd}|  | ¡ d¡ |  |d	 |¡ |  |d |¡ |  |d
 |¡ d S )Nr6   r   r   r   r1   TrF   é   r   rN   rO   rP   r(   r(   r)   Útest_ancestor_of_inclusive›   s    z+TestPageQuerySet.test_ancestor_of_inclusivec                 C   st   t jjdd}t jjdd}t jjdd}t j |¡}|D ]}|  ||¡ |  ||¡ q:|  |j|jd ¡ ¡ d S )Nr6   r   r   r   r1   )	r   r   r!   Únot_ancestor_ofr>   r    r"   r   r#   ©r$   rQ   r'   r4   r%   r&   r(   r(   r)   Útest_not_ancestor_of¦   s    z%TestPageQuerySet.test_not_ancestor_ofc                 C   sl   t jjdd}t jjdd}t jjdd}t jj|dd}|D ](}|  ||¡ |  ||¡ |  ||¡ q>d S )Nr6   r   r   r   r1   TrF   )r   r   r!   rU   r>   rV   r(   r(   r)   Útest_not_ancestor_of_inclusive´   s    z/TestPageQuerySet.test_not_ancestor_of_inclusivec                 C   sL   t jjdd}t jjdd}t j |¡}|  | ¡ d¡ |  |d |¡ d S )Nr   r   r1   r6   r   )r   r   r!   Z	parent_ofr9   r:   )r$   r'   r4   r%   r(   r(   r)   Útest_parent_ofÀ   s
    zTestPageQuerySet.test_parent_ofc                 C   sZ   t jjdd}t jjdd}t j |¡}|D ]}|  ||¡ q,|  |j|jd ¡ ¡ d S )Nr   r   r1   r   )	r   r   r!   Znot_parent_ofr>   r    r"   r   r#   )r$   r'   r4   r%   r&   r(   r(   r)   Útest_not_parent_ofÉ   s    z#TestPageQuerySet.test_not_parent_ofc                 C   s^   t jjdd}t jjdd}t j |¡}|D ]}|  | ¡ |¡ q,|  |j|jd 	¡ ¡ dS )zx
        sibling_of should default to an inclusive definition of sibling
        if 'inclusive' flag not passed
        r1   r   ú/home/events/christmas/r   N©
r   r   r!   Ú
sibling_ofr9   rK   r    r"   r   r#   ©r$   r4   r.   r%   r&   r(   r(   r)   Útest_sibling_of_defaultÕ   s    z(TestPageQuerySet.test_sibling_of_defaultc                 C   sb   t jjdd}t jjdd}t jj|dd}|D ]}|  | ¡ |¡ q0|  |j|jd 	¡ ¡ d S ©Nr1   r   r[   FrF   r   )
r   r   r!   r]   r9   rK   r,   r"   r   r#   r^   r(   r(   r)   Útest_sibling_of_exclusiveå   s    z*TestPageQuerySet.test_sibling_of_exclusivec                 C   sb   t jjdd}t jjdd}t jj|dd}|D ]}|  | ¡ |¡ q0|  |j|jd 	¡ ¡ d S ©Nr1   r   r[   TrF   r   r\   r^   r(   r(   r)   Útest_sibling_of_inclusiveñ   s    z*TestPageQuerySet.test_sibling_of_inclusivec                 C   sv   t jjdd}t jjdd}t j |¡}|D ]}|  | ¡ |¡ q,|  |j|jd 	¡ ¡ |  
|j|jd 	¡ ¡ dS )zµ
        not_sibling_of should default to an inclusive definition of sibling -
        i.e. eliminate self from the results as well -
        if 'inclusive' flag not passed
        r1   r   r[   r   N©r   r   r!   Únot_sibling_ofr>   rK   r,   r"   r   r#   r    r^   r(   r(   r)   Útest_not_sibling_of_defaultý   s    z,TestPageQuerySet.test_not_sibling_of_defaultc                 C   s‚   t jjdd}t jjdd}t jj|dd}|D ]}||kr0|  | ¡ |¡ q0|  |j|jd 	¡ ¡ |  |j|jd 	¡ ¡ d S r`   )
r   r   r!   re   r>   rK   r    r"   r   r#   r^   r(   r(   r)   Útest_not_sibling_of_exclusive  s    z.TestPageQuerySet.test_not_sibling_of_exclusivec                 C   sz   t jjdd}t jjdd}t jj|dd}|D ]}|  | ¡ |¡ q0|  |j|jd 	¡ ¡ |  
|j|jd 	¡ ¡ d S rb   rd   r^   r(   r(   r)   Útest_not_sibling_of_inclusive!  s    z.TestPageQuerySet.test_not_sibling_of_inclusivec                 C   s\   t j t¡}|D ]}|  |jt¡ qt jjdd}|  ||¡ t jjdd}|  ||¡ d S ©Nr+   r   ú/home/events/saint-patrick/)r   r   Útyper   ÚassertIsInstanceÚspecificr!   ÚassertInr-   r(   r(   r)   Ú	test_type0  s    zTestPageQuerySet.test_typec                 C   s|   t j tt¡}|D ]}|  |jttf¡ qt jjdd}|  ||¡ t jjdd}|  ||¡ t jjdd}|  ||¡ d S )Nr+   r   rj   ú/home/about-us/)	r   r   rk   r   r   rl   rm   r!   rn   ©r$   r%   r&   r.   Úabout_usr(   r(   r)   Útest_type_with_multiple_models@  s    z/TestPageQuerySet.test_type_with_multiple_modelsc                 C   s\   t j t¡}|D ]}|  |jt¡ qt jjdd}|  ||¡ t jjdd}|  ||¡ d S ©Nrp   r   r   )r   r   Únot_typer   ÚassertNotIsInstancerm   r!   rn   ©r$   r%   r&   rr   r'   r(   r(   r)   Útest_not_typeT  s    zTestPageQuerySet.test_not_typec                 C   sb   t j tt¡}|D ]}|  |jttf¡ qt jjdd}|  ||¡ t jjdd}|  	||¡ d S rt   )
r   r   ru   r   r   rv   rm   r!   ÚassertNotInrn   rw   r(   r(   r)   Ú"test_not_type_with_multiple_modelsc  s    z3TestPageQuerySet.test_not_type_with_multiple_modelsc                 C   s\   t j t¡}|D ]}|  |jt¡ qt jjdd}|  ||¡ t jjdd}|  ||¡ d S ri   )	r   r   Ú
exact_typer   ÚassertIsÚspecific_classr!   rn   ry   )r$   r%   r&   r.   Úsingle_eventr(   r(   r)   Útest_exact_typer  s    z TestPageQuerySet.test_exact_typec                 C   s–   t j tt ¡}|D ]}|  |jtt f¡ qt jjdd}|  ||¡ t jjdd}|  ||¡ t jjdd}|  ||¡ t jjdd}|  ||¡ d S )Nr+   r   rj   r   rp   )r   r   r{   r   rn   r}   r!   ry   )r$   r%   r&   r.   r~   r'   rr   r(   r(   r)   Ú$test_exact_type_with_multiple_models‚  s    z5TestPageQuerySet.test_exact_type_with_multiple_modelsc                 C   s\   t j t¡}|D ]}|  |jt¡ qt jjdd}|  ||¡ t jjdd}|  ||¡ d S )Nr   r   rj   )r   r   Únot_exact_typer   ZassertIsNotr}   r!   rn   )r$   r%   r&   r'   r.   r(   r(   r)   Útest_not_exact_type›  s    z$TestPageQuerySet.test_not_exact_typec                 C   sb   t j tt ¡}|D ]}|  |jtt f¡ qt jjdd}|  ||¡ t jjdd}|  ||¡ d S )Nrj   r   rp   )r   r   r   r   ry   r}   r!   rn   rq   r(   r(   r)   Ú(test_not_exact_type_with_multiple_models«  s    z9TestPageQuerySet.test_not_exact_type_with_multiple_modelsc              	   C   s¦   t jjdd}t jjdd}t jjdd}tjj|dd |  d¡X t j ¡ }|  |j|j	d 
¡ ¡ |  |j|j	d 
¡ ¡ |  |j|j	d 
¡ ¡ W 5 Q R X d S ©	Nr1   r   r[   r   Zhello)r&   Úpasswordé   r   )r   r   r!   r   ÚcreateÚassertNumQueriesÚpublicr    r"   r   r#   r,   ©r$   r4   r.   r'   r%   r(   r(   r)   Útest_public¼  s    
zTestPageQuerySet.test_publicc              	   C   s¦   t jjdd}t jjdd}t jjdd}tjj|dd |  d¡X t j ¡ }|  |j|j	d 
¡ ¡ |  |j|j	d 
¡ ¡ |  |j|j	d 
¡ ¡ W 5 Q R X d S r„   )r   r   r!   r   r‡   rˆ   Z
not_publicr,   r"   r   r#   r    rŠ   r(   r(   r)   Útest_not_publicÑ  s    
z TestPageQuerySet.test_not_publicc              	   C   s¦   t jjdd}t jjdd}t jjdd}tjj|dd |  d¡X t j ¡ }|  |j|j	d 
¡ ¡ |  |j|j	d 
¡ ¡ |  |j|j	d 
¡ ¡ W 5 Q R X d S r„   )r   r   r!   r   r‡   rˆ   Úprivater,   r"   r   r#   r    rŠ   r(   r(   r)   Útest_privateæ  s    
zTestPageQuerySet.test_privatec                 C   s,   t j ¡  ¡  tj ¡  ¡ }|  |d¡ d S ©Nr   )r   r   r=   Údeleter   r   r:   r9   )r$   r:   r(   r(   r)   Ú!test_private_with_no_private_pageû  s    z2TestPageQuerySet.test_private_with_no_private_pagec                 C   s4   t j t¡}tƒ }||O }|  t j |¡ ¡ ¡ d S ©N)r   r   Útype_qr   r   r    r"   r#   )r$   r“   Úqueryr(   r(   r)   Útest_merge_queries  s    z#TestPageQuerySet.test_merge_queriesc                 C   s$   t j ¡  ¡  |  t j ¡ d¡ d S r   )r   r   r=   r   r9   r:   ©r$   r(   r(   r)   Útest_delete_queryset	  s    z%TestPageQuerySet.test_delete_querysetc              	   C   s$   |   t¡ tj ¡  W 5 Q R X d S r’   )ÚassertRaisesÚAttributeErrorr   r   r   r–   r(   r(   r)   Ú'test_delete_is_not_available_on_manager  s    z8TestPageQuerySet.test_delete_is_not_available_on_managerc              	   C   s¼   t jjdd}tjjdd}t jjdd}|jt dd||jd	d
}|  d¡$ t j |¡}|  	t
|ƒ|g¡ W 5 Q R X |  d¡0 t jj|dd d¡}|  	t
|ƒ||g¡ W 5 Q R X d S )Nr   r   Úfr©Zlanguage_coder6   ©ÚdepthúFrench homepageúhome-fr©ÚtitleÚslugÚlocaleÚtranslation_key©ÚinstanceTrF   r   )r   r   r!   r   r‡   Ú	add_childr¥   rˆ   Ztranslation_ofZassertListEqualÚlistÚorder_by)r$   Úen_homepageÚ	fr_localerQ   Úfr_homepageÚtranslationsr(   r(   r)   Útest_translation_of  s,    üÿ	 ÿþz$TestPageQuerySet.test_translation_ofc              	   C   s  t jjdd}tjjdd}t jjdd}|jt dd||jd	d
}|  d¡ tt j 	|¡ƒ}W 5 Q R X t j 
¡ D ](}||fkr|  ||¡ qt|  ||¡ qt|  d¡ tt jj	|ddƒ}W 5 Q R X t j 
¡ D ]*}|||fkrð|  ||¡ qÒ|  ||¡ qÒd S )Nr   r   r›   rœ   r6   r   rŸ   r    r¡   r¦   TrF   )r   r   r!   r   r‡   r¨   r¥   rˆ   r©   Znot_translation_ofr=   ry   rn   )r$   r«   r¬   rQ   r­   r®   r&   r(   r(   r)   Útest_not_translation_of+  s2    üÿ	
ÿz(TestPageQuerySet.test_not_translation_ofc                 C   sì  t jjdd}t jjdd}tƒ j ¡ }tj ¡ }|j|jg}i }i }|D ]\}| ¡  | ||¡}	|	j	}
|
j
j|
d dd | ||¡}| ¡  |||j< |j	j
||j< qJt jj|j|jfd}d|dgd	| ¡ d
gg}|D ]
\}}}| j|dî |  |¡ dd„ | ¡ D ƒ}W 5 Q R X |D ]º}||j }|  d¡ |  |j||j g¡ W 5 Q R X |  d¡" |  |jd j	j
||j ¡ W 5 Q R X |  d¡ |  |j¡ W 5 Q R X |  d¡ |  |j||j ¡ W 5 Q R X q W 5 Q R X qÚd S )Nr   r   r1   Zapprove)ÚuserÚaction_name)Zpk__inÚbaserN   rm   r†   )Úcasec                 S   s   i | ]}|j |“qS r(   ©Úpk)Ú.0r&   r(   r(   r)   Ú
<dictcomp>o  s     zBTestPageQuerySet.test_prefetch_workflow_states.<locals>.<dictcomp>r   )r   r   r!   r   r;   r   rm   Zsave_revisionÚstartZcurrent_task_stateÚtaskZ	on_actionZrefresh_from_dbr¶   r"   ZsubTestrˆ   Zprefetch_workflow_statesr9   Z_current_workflow_statesr    Zworkflow_in_progressZcurrent_workflow_state)r$   ÚhomeZevent_indexr±   ZworkflowZ
test_pagesZworkflow_statesZcurrent_tasksr&   Zapproved_workflow_stateZ
task_stateZworkflow_stater”   Zqueriesr´   Znum_queriesZqueried_pagesr<   r(   r(   r)   Útest_prefetch_workflow_statesQ  sV    

ÿ

þþþz.TestPageQuerySet.test_prefetch_workflow_statesN).Ú__name__Ú
__module__Ú__qualname__Úfixturesr*   r/   r5   r7   r<   r@   rD   rG   rI   rJ   rL   rM   rR   rT   rW   rX   rY   rZ   r_   ra   rc   rf   rg   rh   ro   rs   rx   rz   r   r€   r‚   rƒ   r‹   rŒ   rŽ   r‘   r•   r—   rš   r¯   r°   r¼   r(   r(   r(   r)   r      sV   
	
	&r   c                   @   s"   e Zd ZdgZdd„ Zdd„ ZdS )ÚTestPageQueryInSiter   c                 C   sz   t dddd| _t ¡ j| jd t dddd| _| jj| jd tjjd	d
tjj	| jj
ddd| _t jj	dd| _d S )NzSite 2 pageÚsite_2_pageZHello)r¢   r£   Úcontentr¦   zSite 2 subpageÚsite_2_subpagezHello againzexample.comi  rµ   F)ÚhostnameÚportrQ   Zis_default_siterp   r   )r   rÂ   r   Úget_first_root_noder¨   rÄ   r   r   r‡   r!   r¶   Úsite_2Úabout_us_pager–   r(   r(   r)   ÚsetUpŽ  s&    ýýüzTestPageQueryInSite.setUpc                 C   s<   t j | j¡}|  | j|¡ |  | j|¡ |  | j|¡ d S r’   )	r   r   Zin_siterÈ   rn   rÂ   rÄ   ry   rÉ   )r$   Zsite_2_pagesr(   r(   r)   Útest_in_site¤  s    z TestPageQueryInSite.test_in_siteN)r½   r¾   r¿   rÀ   rÊ   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 )ÚTestPageQuerySetSearchr   c                 C   sV   t jjddgd}|  | ¡ d¡ |  tjjddj|¡ |  tjjddj|¡ d S )NÚmoonÚlocation)ÚfieldsrN   ú)/home/events/tentative-unpublished-event/r   r+   )	r   r   Úsearchr9   r:   rn   r   r!   rm   ©r$   r%   r(   r(   r)   Útest_search¯  s    ÿüþz"TestPageQuerySetSearch.test_searchc                 C   sz   t jjddd}|  t|ƒtjjddjg¡ t jjddd}t|dd„ d	}|  |tjjd
djtjjddjg¡ d S )Nzmoon poniesÚand)ÚoperatorrÐ   r   Úorc                 S   s   | j S r’   r   )r&   r(   r(   r)   Ú<lambda>Ë  ó    z7TestPageQuerySetSearch.test_operators.<locals>.<lambda>)Úkeyr+   )	r   r   rÑ   r9   r©   r   r!   rm   Úsorted)r$   ÚresultsZsorted_resultsr(   r(   r)   Útest_operators¾  s$    ÿÿþ	ÿþþz%TestPageQuerySetSearch.test_operatorsc                 C   s   t j d¡jddgdd}|  t|ƒtjjddjtjjddjg¡ t j d	¡jddgdd}|  t|ƒtjjddjtjjddjg¡ d S )
Nr   rÍ   rÎ   F)rÏ   Zorder_by_relevancer+   r   rÐ   ú	-url_path)	r   r   rª   rÑ   r9   r©   r   r!   rm   rÒ   r(   r(   r)   Útest_custom_orderÖ  s4      ÿÿþþ
  ÿÿüþz(TestPageQuerySetSearch.test_custom_orderc              	      s¼   g ‰ ‡ fdd„}t  |¡ ztjjdd}| ¡  ¡  tjjdd}t	jjdd}tjjdd}|  
|j¡ |  
|j¡ |  t|fˆ ¡ |  t	|fˆ ¡ |  t|fˆ ¡ W 5 t  |¡ X d S )Nc                    s   ˆ   | |f¡ d S r’   )Úappend)Zsenderr§   Úkwargs©Zunpublish_signals_firedr(   r)   Úpage_unpublished_handler÷  s    zGTestPageQuerySetSearch.test_unpublish.<locals>.page_unpublished_handlerr1   r   r[   rj   rÐ   )r   ÚconnectZ
disconnectr   r   r!   Úget_childrenZ	unpublishr   r   r,   r   rn   ry   )r$   râ   r4   Ú	christmasZsaint_patrickZunpublished_eventr(   rá   r)   Útest_unpublishó  s&    
ÿÿz%TestPageQuerySetSearch.test_unpublishN)r½   r¾   r¿   rÀ   rÓ   rÜ   rÞ   ræ   r(   r(   r(   r)   rÌ   ¬  s
   rÌ   c                   @   s†   e Zd 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S ) ÚTestSpecificQueryaã  
    Test the .specific() queryset method. This is isolated in its own test case
    because it is sensitive to database changes that might happen for other
    tests.

    The fixture sets up a page structure like:

    =========== =========================================
    Type        Path
    =========== =========================================
    Page        /
    Page        /home/
    SimplePage  /home/about-us/
    EventIndex  /home/events/
    EventPage   /home/events/christmas/
    EventPage   /home/events/someone-elses-event/
    EventPage   /home/events/tentative-unpublished-event/
    SimplePage  /home/other/
    EventPage   /home/other/special-event/
    =========== =========================================
    útest_specific.jsonc                 C   s0   t j ¡  ¡ | _t j ¡  ¡ jtdƒd| _d S )Nr¶   ©r:   )r   r   r   rm   Ú
live_pagesÚannotater   Úlive_pages_with_annotationsr–   r(   r(   r)   rÊ   0  s    ÿzTestSpecificQuery.setUpc              
   C   s¶   t jjdd}|  d¡ | ¡  ¡ }W 5 Q R X |  d¡ t|ƒ}W 5 Q R X |  |t¡ |  t	|ƒd¡ |D ]B}|j
}| ¡ }|  ||¡ |  d¡ |  ||j¡ W 5 Q R X qnd S )Nr   r   r   r†   é   )r   r   r!   rˆ   Úget_descendantsrm   r©   rl   r9   ÚlenÚcontent_typeÚmodel_classr|   )r$   ÚrootÚqsr%   r&   rð   Úmodelr(   r(   r)   Útest_specific6  s    zTestSpecificQuery.test_specificc              	   C   sš   |   d¡" tj ¡  d¡d d…  ¡ }W 5 Q R X |   d¡ t|ƒ}W 5 Q R X |  t|ƒd¡ |  |tjj	ddjtjj	ddjtjj	ddjg¡ d S )Nr   rÝ   rS   z/home/other/special-event/r   ú/home/other/r[   )
rˆ   r   r   r   rª   rm   r©   r9   rï   r!   ©r$   ró   r%   r(   r(   r)   Útest_filtering_before_specificQ  s    &ýþz0TestSpecificQuery.test_filtering_before_specificc              	   C   s¬   |   d¡& tj ¡  ¡  ¡  d¡d d… }W 5 Q R X |   d¡ t|ƒ}W 5 Q R X |  t	|ƒd¡ |  |tjj
ddjtjj
ddjtjj
ddjtjj
ddjg¡ d S )	Nr   rÝ   r†   rö   r   r[   r1   rp   )rˆ   r   r   rm   r   r2   rª   r©   r9   rï   r!   r÷   r(   r(   r)   Útest_filtering_after_specificg  s    *üþz/TestSpecificQuery.test_filtering_after_specificc              	   C   sd   |   d¡  t| jƒ}|  t|ƒd¡ W 5 Q R X |   d¡  t| jƒ}|  t|ƒd¡ W 5 Q R X d S )Né   rí   )rˆ   r©   rê   r9   rï   rì   rÒ   r(   r(   r)   ÚCtest_specific_query_with_annotations_performs_no_additional_queries~  s    

zUTestSpecificQuery.test_specific_query_with_annotations_performs_no_additional_queriesc                 C   s|   t j ¡ }|  ¡ }| ¡ jj|dd | ¡ jj|dd t j ¡  ¡ j	t
dƒd}|  | ¡ jd¡ |  | ¡ jd¡ d S )NF©r±   Zcomment_notificationsÚsubscribers©Úsubscribers_countr6   )r   r   r   Úcreate_test_userr;   rý   r‡   Úlastrm   rë   r   r9   rÿ   )r$   r%   r±   rÛ   r(   r(   r)   Ú#test_specific_query_with_annotation‰  s    
þÿz5TestSpecificQuery.test_specific_query_with_annotationc                 C   sb   t j ¡ }|  ¡ }| ¡ jj|dd | ¡ jj|dd tt j ¡  	¡ j
tdƒd d¡ƒ dS )zŒ
        Ensure alias() works with specific() queries.
        See https://github.com/wagtail/wagtail/issues/11285 for more details
        Frü   rý   rþ   rÿ   N)r   r   r   r   r;   rý   r‡   r  Úiterrm   Úaliasr   rª   )r$   r%   r±   r(   r(   r)   Útest_specific_query_with_aliasš  s    
þýÿz0TestSpecificQuery.test_specific_query_with_aliasc                 C   sx   t jjddd}tjjddj|d ttjjdd ¡  	¡ ƒ}|  
|tjjddtjjddj	tjjd	dj	g¡ d S )
NZtestsZmissingpage)Z	app_labelrô   r1   r   )rð   r   rp   rö   )r   r   r‡   r   r"   Úupdater©   r!   rä   rm   r9   )r$   Zmissing_page_content_typer%   r(   r(   r)   Ú/test_specific_gracefully_handles_missing_models­  s     ÿÿýþzATestSpecificQuery.test_specific_gracefully_handles_missing_modelsc              
   C   sˆ   t jdtj t¡dh |  td¡  tt	jj
dd ¡  ¡ ƒ}W 5 Q R X |  |t	jj
ddt	jj
ddt	jj
ddg¡ W 5 Q R X d S )	Nz,wagtail.query.ContentType.objects.get_for_id)Zreturn_valuez;Specific versions of the following items could not be foundr   r   r1   rp   rö   )r   Úpatchr   r   Zget_for_modelr   ZassertWarnsRegexÚRuntimeWarningr©   r   r!   rä   rm   r9   rÒ   r(   r(   r)   Ú-test_specific_gracefully_handles_missing_rowsÄ  s$    
þþÿýþz?TestSpecificQuery.test_specific_gracefully_handles_missing_rowsc              
   C   sþ   t jjdd}tdddd}|j|d |  d¡ | ¡ jd	d
}W 5 Q R X |  d¡ t|ƒ}W 5 Q R X |  	|t¡ |  
t|ƒd¡ |D ]B}|j}| ¡ }|  	||¡ |  d¡ |  ||j¡ W 5 Q R X qŒ|  d¡ |d j |d j W 5 Q R X d S )Nr   r   ústream pageústream-pageú"[{"type": "text", "value": "foo"}]©r¢   r£   Úbodyr¦   r   T)Zdeferr6   é   rN   éÿÿÿÿ)r   r   r!   r   r¨   rˆ   rî   rm   r©   rl   r9   rï   rð   rñ   r|   r  )r$   rò   Ústream_pageró   r%   r&   rð   rô   r(   r(   r)   Útest_deferred_specific_queryß  s,    ý
z.TestSpecificQuery.test_deferred_specific_queryc              	   C   sÚ   | j }|  d¡" t| ¡ ƒ}|  t|ƒd¡ W 5 Q R X |  d¡" t| ¡  ¡ ƒ}|  ||¡ W 5 Q R X |  d¡& t| ¡ jddƒ}|  ||¡ W 5 Q R X |  d¡& t| ¡ jddƒ}|  ||¡ W 5 Q R X d S )Nrú   rí   ©Ú
chunk_sizeé   rN   ©rì   rˆ   r©   r=   r9   rï   Úiterator)r$   ÚquerysetÚbenchmark_resultÚresult_1Úresult_2Zresult_3r(   r(   r)   Ú!test_specific_query_with_iterator	  s    z3TestSpecificQuery.test_specific_query_with_iteratorc              	   C   s¬   | j dd … }|  d¡" t| ¡ ƒ}|  t|ƒd¡ W 5 Q R X |  d¡" t| ¡  ¡ ƒ}|  ||¡ W 5 Q R X |  d¡& t| ¡ jddƒ}|  ||¡ W 5 Q R X d S )NrN   r†   rú   r  r6   r  r  ©r$   r  r  r  r  r(   r(   r)   Ú/test_bottom_sliced_specific_query_with_iterator%  s    zATestSpecificQuery.test_bottom_sliced_specific_query_with_iteratorc              	   C   s¬   | j d d… }|  d¡" t| ¡ ƒ}|  t|ƒd¡ W 5 Q R X |  d¡" t| ¡  ¡ ƒ}|  ||¡ W 5 Q R X |  d¡& t| ¡ jddƒ}|  ||¡ W 5 Q R X d S )Nr  rú   rí   r6   r  r  r  r(   r(   r)   Ú,test_top_sliced_specific_query_with_iterator:  s    z>TestSpecificQuery.test_top_sliced_specific_query_with_iteratorc              	   C   s¬   | j dd… }|  d¡" t| ¡ ƒ}|  t|ƒd¡ W 5 Q R X |  d¡" t| ¡  ¡ ƒ}|  ||¡ W 5 Q R X |  d¡& t| ¡ jddƒ}|  ||¡ W 5 Q R X d S )NrN   r  r†   rú   rS   r  r  r  r(   r(   r)   Ú7test_top_and_bottom_sliced_specific_query_with_iteratorO  s    zITestSpecificQuery.test_top_and_bottom_sliced_specific_query_with_iteratorN)r½   r¾   r¿   Ú__doc__rÀ   rÊ   rõ   rø   rù   rû   r  r  r  r
  r  r  r  r   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 )ÚTestSpecificQuerySearchrè   c                 C   sD   t jddtƒ dd tj ¡  ¡ | _tj ¡  ¡ jt	dƒd| _
d S )NZupdate_indexÚdefaulté2   )Úbackend_nameÚstdoutr  r¶   ré   )r   Zcall_commandr   r   r   r   rm   rê   rë   r   rì   r–   r(   r(   r)   rÊ   h  s    üÿzTestSpecificQuerySearch.setUpc                 C   sH   t j ¡  ¡  t¡ d¡}|  t|ƒd¡ |D ]}|  	t
|dƒ¡ q.d S )NÚ_scorer   )r   r   r   rm   rÑ   r   Úannotate_scoreÚassertGreaterrï   r    Úhasattr©r$   rÛ   Úresultr(   r(   r)   Ú8test_specific_query_with_match_all_search_and_annotationu  s
    ÿzPTestSpecificQuerySearch.test_specific_query_with_match_all_search_and_annotationc                 C   sH   t j ¡  ¡  d¡ d¡}|  t|ƒd¡ |D ]}|  t	|dƒ¡ q.d S )Nr.   r(  r   )
r   r   r   rm   rÑ   r)  r*  rï   r    r+  r,  r(   r(   r)   Ú3test_specific_query_with_real_search_and_annotation€  s
    ÿzKTestSpecificQuerySearch.test_specific_query_with_real_search_and_annotationc                 C   s”   t tj ¡  ¡  ¡ jtddƒ}|  t	|ƒd¡ |  
tjjddj|¡ |  
tjjddj|¡ |  
tjjddj|¡ |  
tjjddj|¡ d S )	Nz wagtail.search.backends.database)Úbackendr†   rö   r   r[   r1   rp   )r©   r   r   rm   r   r2   rÑ   r   r9   rï   rn   r!   rÒ   r(   r(   r)   Útest_specific_query_with_search‹  s     ýÿ	 ÿz7TestSpecificQuerySearch.test_specific_query_with_searchN)r½   r¾   r¿   rÀ   rÊ   r.  r/  r1  r(   r(   r(   r)   r#  e  s
   r#  c                   @   sŽ   e Zd 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!S )"ÚTestFirstCommonAncestorza
    Uses the same fixture as TestSpecificQuery. See that class for the layout
    of pages.
    rè   c                 C   s8   t jjdd| _t j t¡| _t j t¡jdd| _d S )Nr   r   z/other/)Zurl_path__contains)	r   r   r!   rQ   rk   r   Ú
all_eventsÚexcludeÚregular_eventsr–   r(   r(   r)   rÊ   ©  s
    ÿzTestFirstCommonAncestor.setUpc                 C   s    t dddd}| jj|d d S )Nr  r  r  r  r¦   )r   rQ   r¨   )r$   r  r(   r(   r)   Ú_create_streampage°  s    ýz*TestFirstCommonAncestor._create_streampagec                 C   s(   |   | j ¡ d¡ |   | j ¡ d¡ d S )Nr†   rS   )r9   r3  r:   r5  r–   r(   r(   r)   Útest_bookkeeping¸  s    z(TestFirstCommonAncestor.test_bookkeepingc                 C   s    |   tjjdd| j ¡ ¡ dS )zCommon ancestor for EventPagesr»   ©r£   N)r9   r   r   r!   r3  Úfirst_common_ancestorr–   r(   r(   r)   Útest_event_pages¼  s     ÿz(TestFirstCommonAncestor.test_event_pagesc                 C   s    |   tjjdd| j ¡ ¡ dS )z8Common ancestor for EventPages, excluding /other/ eventsÚeventsr8  N©r9   r   r   r!   r5  r9  r–   r(   r(   r)   Útest_normal_event_pagesÄ  s     ÿz/TestFirstCommonAncestor.test_normal_event_pagesc                 C   s$   |   tjjdd| jjdd¡ dS )zj
        Common ancestor for EventPages, excluding /other/ events, with
        include_self=True
        r;  r8  T©Úinclude_selfNr<  r–   r(   r(   r)   Ú$test_normal_event_pages_include_selfÊ  s    þz<TestFirstCommonAncestor.test_normal_event_pages_include_selfc                 C   s(   |   tjjddtjjdd ¡ ¡ dS )z4Test getting a single page, with include_self=False.r;  r8  Ú	Christmas©r¢   N©r9   r   r   r!   r"   r9  r–   r(   r(   r)   Ú test_single_page_no_include_selfÔ  s    þz8TestFirstCommonAncestor.test_single_page_no_include_selfc                 C   s,   |   tjjddtjjddjdd¡ dS )z3Test getting a single page, with include_self=True.rA  rB  Tr>  NrC  r–   r(   r(   r)   Útest_single_page_include_selfÛ  s    ÿþz5TestFirstCommonAncestor.test_single_page_include_selfc                 C   s   |   t ¡ tj ¡ ¡ d S r’   ©r9   r   rÇ   r   r9  r–   r(   r(   r)   Útest_all_pagesä  s     ÿz&TestFirstCommonAncestor.test_all_pagesc              	   C   s*   |   tj¡ tjjdd W 5 Q R X d S ©NT)Ústrict)r˜   r   ÚDoesNotExistr   r9  r–   r(   r(   r)   Útest_all_pages_stricté  s    z-TestFirstCommonAncestor.test_all_pages_strictc                 C   s    |   t ¡ tjjddd¡ d S )NT)r?  rI  rF  r–   r(   r(   r)   Ú"test_all_pages_include_self_strictí  s    þz:TestFirstCommonAncestor.test_all_pages_include_self_strictc                 C   s   |   t ¡ tj ¡  ¡ ¡ d S r’   )r9   r   rÇ   r   Únoner9  r–   r(   r(   r)   Útest_empty_querysetó  s     ÿz+TestFirstCommonAncestor.test_empty_querysetc              	   C   s.   |   tj¡ tj ¡ jdd W 5 Q R X d S rH  )r˜   r   rJ  r   rM  r9  r–   r(   r(   r)   Útest_empty_queryset_strictø  s    z2TestFirstCommonAncestor.test_empty_queryset_strictc              
   C   sJ   |   ¡  tj ¡  ¡ D ].}|  d|j¡ |  d¡ |j W 5 Q R X qd S ©Nr  r6   )	r6  r   r   r=   Údefer_streamfieldsry   Ú__dict__rˆ   r  ©r$   r&   r(   r(   r)   Ú(test_defer_streamfields_without_specificü  s
    z@TestFirstCommonAncestor.test_defer_streamfields_without_specificc              
   C   sP   |   ¡  tj t¡ ¡  ¡ D ].}|  d|j¡ |  	d¡ |j
 W 5 Q R X qd S rP  )r6  r   r   r{   r   rQ  rm   ry   rR  rˆ   r  rS  r(   r(   r)   Ú%test_defer_streamfields_with_specific  s
    z=TestFirstCommonAncestor.test_defer_streamfields_with_specificN)r½   r¾   r¿   r"  rÀ   rÊ   r6  r7  r:  r=  r@  rD  rE  rG  rK  rL  rN  rO  rT  rU  r(   r(   r(   r)   r2  ¡  s"   
	r2  N)'Úior   Zunittestr   Zdjango.contrib.authr   Z"django.contrib.contenttypes.modelsr   Zdjango.corer   Zdjango.db.modelsr   r   Zdjango.testr	   r
   Zwagtail.modelsr   r   r   r   r   Zwagtail.search.queryr   Zwagtail.signalsr   Zwagtail.test.testapp.modelsr   r   r   r   Zwagtail.test.utilsr   r   rÁ   rÌ   rç   r#  r2  r(   r(   r(   r)   Ú<module>   s.       y!k  P<