a
    Døgá ã                   @   s´  d dl Z d dlmZmZ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 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# G dd„ deƒZ$G dd„ deƒZ%G dd„ de#e!eƒZ&G dd„ de#e!eƒZ'G dd„ de#e!eƒZ(G dd„ de!eƒZ)G dd„ d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.G d'd(„ d(eƒZ/G d)d*„ d*eƒZ0dS )+é    N)ÚdateÚdatetimeÚ	timedelta)ÚBytesIOÚStringIO)Ú
Permission)Ú
management)ÚTestCase)Úreverse)Útimezone)Úload_workbook)ÚAdminURLFinder)ÚBaseReportViewTestCase)ÚQueryÚQueryDailyHitsÚSearchPromotion)Úget_search_promotions)Úregistry)ÚWagtailTestUtils)ÚAdminTemplateTestUtilsc                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestSearchPromotionsc                 C   sP   t jjt d¡dddd |  t d¡j ¡ d¡ |  t d¡j ¡ j	d¡ d S )Nú	root pageé   r   úFirst search promotion©ÚqueryÚpage_idÚ
sort_orderÚdescription)
r   ÚobjectsÚcreater   ÚgetÚassertEqualÚeditors_picksÚcountÚfirstr   ©Úself© r(   úf/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/contrib/search_promotions/tests.pyÚtest_search_pick_create   s    üz,TestSearchPromotions.test_search_pick_createc                 C   sP   t jjt d¡dddd |  t d¡j ¡ d¡ |  t d¡j ¡ j	d¡ d S )Nr   úhttps://wagtail.orgr   r   ©r   Úexternal_link_urlr   r   r   )
r   r   r    r   r!   r"   r#   r$   r%   r-   r&   r(   r(   r)   Útest_search_pick_link_create)   s    üþz1TestSearchPromotions.test_search_pick_link_createc                 C   sž   t jjt d¡dddd t jjt d¡dddd t jjt d¡ddd	d
 |  t d¡j ¡ d¡ |  t d¡j ¡ j	d¡ |  t d¡j 
¡ j	d¡ d S )Nr   r   r   úFirst search pickr   é   zLast search pickr+   zMiddle search pickr,   é   )r   r   r    r   r!   r"   r#   r$   r%   r   Úlastr&   r(   r(   r)   Útest_search_pick_ordering:   s4    üüüþÿz.TestSearchPromotions.test_search_pick_orderingc                 C   sš   t  d¡}tdƒD ]}| ¡  qtjjt  d¡dddd tjjt  d¡ddd	d |  t  ¡  	¡ d¡ t  d¡j
 ¡ }|  |jd¡ |  |jjd¡ d S )
NÚpopularé   r0   r   úPopular search pickr   Zuninterestingr   zUninteresting search pick)r   r!   ÚrangeÚadd_hitr   r   r    r"   Úget_most_popularr$   r#   r%   r   r   Úhits)r'   ÚpopularQueryÚiZpopular_picksr(   r(   r)   Útest_get_most_popularX   s,    

üüþz*TestSearchPromotions.test_get_most_popularc           
      C   sü   t  ¡ }|tdd }|tdd }t d¡}tdƒD ]}|j|d q6t d¡}|j|d |j|d |j|d tjj	t d¡dddd	 tjj	t d¡ddd
d	 tj
|d}|  | ¡ d¡ t d¡j}| ¡ }	|  |	jd
¡ |  |	jjd¡ d S )Nr0   ©Údaysr5   r4   ©r   Zsurpriser   r6   r   zSurprising search pick)Z
date_sincer   r1   )r   Útodayr   r   r!   r7   r8   r   r   r    r9   r"   r$   r#   r%   r   r   r:   )
r'   ZTODAYZTWO_DAYS_AGOZFIVE_DAYS_AGOr;   r<   ZsurpriseQueryZmost_popular_queriesr#   Zsurprise_picksr(   r(   r)   Útest_get_most_popular_sincer   s>    

üüþz0TestSearchPromotions.test_get_most_popular_sinceN)Ú__name__Ú
__module__Ú__qualname__r*   r.   r3   r=   rB   r(   r(   r(   r)   r      s
   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú"TestGetSearchPromotionsTemplateTagc                 C   sR   t jjt d¡dddd}t jjt d¡dddd ttdƒƒ}|  ||g¡ d S )Nr   r   r   r/   r   zroot page againúSecond search pick)r   r   r    r   r!   Úlistr   r"   )r'   ZpickÚsearch_picksr(   r(   r)   Ú'test_get_search_promotions_template_tag™   s    üüzJTestGetSearchPromotionsTemplateTag.test_get_search_promotions_template_tagc                 C   s   t td ƒƒ}|  |g ¡ d S ©N)rH   r   r"   )r'   rI   r(   r(   r)   Ú1test_get_search_promotions_with_none_query_string®   s    zTTestGetSearchPromotionsTemplateTag.test_get_search_promotions_with_none_query_stringN)rC   rD   rE   rJ   rL   r(   r(   r(   r)   rF   ˜   s   rF   c                   @   s|   e Z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 )ÚTestSearchPromotionsIndexViewc                 C   s   |   ¡ | _d S rK   ©ÚloginÚuserr&   r(   r(   r)   ÚsetUp´   s    z#TestSearchPromotionsIndexView.setUpc                 C   sD   | j  tdƒ¡}|  |jd¡ |  |d¡ |  dddœg|j¡ d S )Núwagtailsearchpromotions:indexéÈ   ú"wagtailsearchpromotions/index.htmlÚ úPromoted search results©ÚurlÚlabel©Úclientr!   r
   r"   Ústatus_codeÚassertTemplateUsedÚassertBreadcrumbsItemsRenderedÚcontent©r'   Úresponser(   r(   r)   Útest_simple·   s    
þz)TestSearchPromotionsIndexView.test_simplec                 C   sF   | j  tdƒddi¡}|  |jd¡ |  |jd d¡ |  |d¡ d S )NrR   ÚqÚHellorS   Úquery_stringz1Sorry, no promoted results match "<em>Hello</em>")r[   r!   r
   r"   r\   ÚcontextÚassertContainsr`   r(   r(   r)   Útest_searchÀ   s    ÿþz)TestSearchPromotionsIndexView.test_searchc                 C   s~   t jjt d¡dd t jjt d¡dd | j tdƒddi¡}|  |jd¡ |  |j	d	 d¡ |  
|d
¡ |  
|d¡ d S )Nzsearch promotion queryr   )r   r   r+   )r   r-   rR   rc   rS   re   z.<a href="/admin/pages/1/edit/" class="nolink">zN<a href="https://wagtail.org" class="nolink" target="_blank" rel="noreferrer">)r   r   r    r   r!   r[   r
   r"   r\   rf   rg   r`   r(   r(   r)   Útest_search_with_resultsË   s$    þþÿþz6TestSearchPromotionsIndexView.test_search_with_resultsc                 C   s4   t dƒD ]&}tjjt dt|ƒ ¡dddd qd S )Né2   úquery r   r   r/   r   )r7   r   r   r    r   r!   Ústr©r'   r<   r(   r(   r)   Úmake_search_picksà   s    üz/TestSearchPromotionsIndexView.make_search_picksc                 C   sP   |   ¡  | j tdƒddi¡}|  |jd¡ |  |d¡ |  |jd jd¡ d S )NrR   Úpr0   rS   rT   Úpage_obj©	rn   r[   r!   r
   r"   r\   r]   rf   Únumberr`   r(   r(   r)   Útest_paginationé   s
    z-TestSearchPromotionsIndexView.test_paginationc                 C   sP   |   ¡  | j tdƒddi¡}|  |jd¡ |  |d¡ |  |jd jd¡ d S )NrR   ro   zHello World!rS   rT   rp   r   rq   r`   r(   r(   r)   Útest_pagination_invalidõ   s    ÿz5TestSearchPromotionsIndexView.test_pagination_invalidc                 C   sX   |   ¡  | j tdƒddi¡}|  |jd¡ |  |d¡ |  |jd j|jd j	¡ d S )NrR   ro   iŸ† rS   rT   rp   Z	paginator)
rn   r[   r!   r
   r"   r\   r]   rf   rr   Z	num_pagesr`   r(   r(   r)   Útest_pagination_out_of_range  s    ÿ

þz:TestSearchPromotionsIndexView.test_pagination_out_of_rangec                    sú   t dƒ}|  ¡  | j |¡ |  d¡ | j |¡ W d   ƒ n1 sH0    Y  t ¡ ‰tdƒD ]\}t dt	|ƒ ¡‰ ‡ fdd„tdƒD ƒ}‡ ‡fdd„tdƒD ƒ}t
j |¡ tj |¡ qb|  d¡ | j |¡ W d   ƒ n1 sì0    Y  d S )	NrR   é   é   rk   c                    s*   g | ]"}t ˆ |d  d |d|› d‘qS )r0   r   zSearch pick r   )r   ©Ú.0Új)r   r(   r)   Ú
<listcomp>"  s   ú
üzBTestSearchPromotionsIndexView.test_num_queries.<locals>.<listcomp>r5   c                    s$   g | ]}t ˆ ˆt|d  |d‘qS )r>   )r   r   r:   )r   r   rx   ©r   rA   r(   r)   r{   +  s   ÿ)r
   rn   r[   r!   ZassertNumQueriesr   rA   r7   r   rl   r   r   Zbulk_creater   )r'   rX   r<   Zpromosr:   r(   r|   r)   Útest_num_queries  s$    *
ù	þz.TestSearchPromotionsIndexView.test_num_queriesc                 C   sš   |   ¡  tjjt d¡dddd tjjt d¡dddd | j tdƒ¡}|  |j	d	¡ |  
|d
¡ |  |jd d jd¡ |  |jd d jd¡ d S )Nzaaargh snaker   r   zooh, it's a snaker   zbeloved snakezbeloved snake goes ssSSSSrR   rS   rT   Úqueries)rn   r   r   r    r   r!   r[   r
   r"   r\   r]   rf   re   r`   r(   r(   r)   Ú'test_results_are_ordered_alphabetically7  s$    üüzETestSearchPromotionsIndexView.test_results_are_ordered_alphabeticallyc           	      C   s  t  ¡ }tdƒD ] }t d¡j|t|d d qtjj	t d¡dddd tjj	t d¡d	dd
d | j
 tdƒ¡}| j|ddd |  t d¡jd¡ |  |j¡}tddd}tddd}| d|› d¡}| d|› d¡}|  |¡ |  |¡ |  t d¡j ¡ d	¡ d S )Né
   r   r>   r@   r   r   r/   r   r0   rG   rR   z<td>10</td>T)Úhtmlzwagtailadmin_pages:edit)r   ©Úargs)r0   úa[href="ú"])r   rA   r7   r   r!   r8   r   r   r   r    r[   r
   rg   r"   r:   Úget_soupr_   Ú
select_oneZassertIsNotNoner#   r$   )	r'   rA   r<   ra   ÚsoupZroot_page_edit_urlZhomepage_edit_urlZroot_page_edit_linkZhomepage_edit_linkr(   r(   r)   Útest_multiple_searchpromotionsQ  s4    üü

z<TestSearchPromotionsIndexView.test_multiple_searchpromotionsc                 C   sî  |   ¡  tdƒ}tjjt d¡dddd tjjt d¡ddd	d t d
¡}tdƒD ]}| ¡  qVtjj|dddd t d¡}tdƒD ]}| ¡  qŠtjj|dddd | j	 |d ¡}|  
|jd¡ |  
|jd d jd¡ | j	 |d ¡}|  
|jd¡ |  
|jd d jd¡ | j	 |d ¡}|  
|jd¡ |  
|jd d jd¡ | j	 |d ¡}|  
|jd¡ |  
|jd d jd
¡ |  
|jd d jd¡ | j	 |d ¡}|  
|jd¡ |  
|jd d jd
¡ |  
|jd d jd¡ d S )NrR   Zzyzzyvasr   r   z9no definition found, this is a valid scrabble word thoughr   Zaardwolfé   z?Striped hyena of southeast Africa that feeds chiefly on insectsZoptimalrj   é   zAn oddly popular search term?Z
suboptimalé   zNot as popularz?ordering=-query_stringrS   rp   z?ordering=-query_string&p=3éÿÿÿÿz?ordering=query_stringz?ordering=-viewsz?ordering=views&p=3éþÿÿÿ)rn   r
   r   r   r    r   r!   r7   r8   r[   r"   r\   rf   re   )r'   rX   r;   r<   ra   r(   r(   r)   Útest_results_orderingo  sb    üü

ü

üz3TestSearchPromotionsIndexView.test_results_orderingc                 C   s^   d| j _| j  ¡  | j j tjjddd¡ | j t	dƒ¡}|  
|jd¡ |  |t	dƒ¡ d S )NFÚwagtailadminÚaccess_admin©Zcontent_type__app_labelÚcodenamerR   é.  Úwagtailadmin_home©rP   Úis_superuserÚsaveÚuser_permissionsÚaddr   r   r!   r[   r
   r"   r\   ÚassertRedirectsr`   r(   r(   r)   Útest_get_with_no_permission¯  s    
þÿz9TestSearchPromotionsIndexView.test_get_with_no_permissionc                 C   s”   d| j _| j  ¡  | j j tjjdddtjjddd¡ | j t	dƒ¡}|  
|jd¡ |  |d	¡ |  |j¡}t	d
ƒ}|  | d|› d¡¡ d S )NFr   r‘   r’   ÚwagtailsearchpromotionsÚchange_searchpromotionrR   rS   rT   úwagtailsearchpromotions:addr„   r…   )rP   r—   r˜   r™   rš   r   r   r!   r[   r
   r"   r\   r]   r†   r_   ZassertIsNoner‡   )r'   ra   rˆ   Zadd_urlr(   r(   r)   Ú"test_get_with_edit_permission_only¾  s$    
þþûz@TestSearchPromotionsIndexView.test_get_with_edit_permission_onlyN)rC   rD   rE   rQ   rb   rh   ri   rn   rs   rt   ru   r}   r   r‰   r   rœ   r    r(   r(   r(   r)   rM   ³   s   		#@rM   c                   @   s„   e Z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S ) ÚTestSearchPromotionsAddViewc                 C   s   |   ¡ | _d S rK   rN   r&   r(   r(   r)   rQ   Ø  s    z!TestSearchPromotionsAddView.setUpc                 C   sP   | j  tdƒ¡}|  |jd¡ |  |d¡ |  tdƒddœdddœg|j¡ d S )	NrŸ   rS   ú wagtailsearchpromotions/add.htmlrR   rV   rW   rU   zNew: Promoted search resultrZ   r`   r(   r(   r)   rb   Û  s    þûøz'TestSearchPromotionsAddView.test_simplec              	   C   sÀ   dddddddddœ}| j  tdƒ|¡}|  |td	ƒ¡ |  t d¡jjdd
 	¡ ¡ t
t d¡j ¡ ƒ}|  t|ƒd¡ |  |d jd¡ t |d ¡}|  t|ƒd¡ |  |d jd¡ d S )NÚtestr   r   éè  rU   rd   ©re   úeditors_picks-TOTAL_FORMSúeditors_picks-INITIAL_FORMSúeditors_picks-MAX_NUM_FORMSúeditors_picks-0-DELETEúeditors_picks-0-ORDERúeditors_picks-0-pageúeditors_picks-0-descriptionrŸ   rR   )r   úwagtail.create)r[   Úpostr
   r›   Ú
assertTruer   r!   r#   ÚfilterÚexistsrH   Úallr"   Úlenr   Úlog_registryÚget_logs_for_instanceÚaction)r'   Ú	post_datara   rI   Úlogsr(   r(   r)   Ú	test_postê  s$    ø
z%TestSearchPromotionsAddView.test_postc                 C   s  ddddddddddddd	d
dœ}| j  tdƒ|¡}|  |tdƒ¡ tt d¡j ¡  	d¡ƒ}|  
t|ƒd¡ |  
|d jd¡ |  
|d jd¡ |  
|d jd¡ |  
|d jd
¡ |D ]D}t |¡}|  
t|ƒd¡ |  
|d jd¡ |  
|d j| j¡ qºd S )Nr£   r0   r   r¤   rU   r   rd   r+   ÚWagtailzThe landing page)re   r¦   r§   r¨   r©   rª   r«   r¬   úeditors_picks-1-DELETEúeditors_picks-1-ORDERúeditors_picks-1-pageú!editors_picks-1-external_link_urlú"editors_picks-1-external_link_textúeditors_picks-1-descriptionrŸ   rR   r   r­   )r[   r®   r
   r›   rH   r   r!   r#   r²   Úorder_byr"   r³   r   r   r-   r´   rµ   r¶   rP   ©r'   r·   ra   rI   Úsearch_pickr¸   r(   r(   r)   Útest_with_multiple_picks  s<    òÿ
z4TestSearchPromotionsAddView.test_with_multiple_picksc              
   C   s¢   t  d¡}|jjdddd}|jjdddd}ddddd	dd
dddœ	}| j tdƒ|¡}|  |tdƒ¡ |  t	t  d¡j 
¡  dd¡ƒ|jd	f|jd	fdh¡ d S )Nr£   r   r   ú	Root page©r   r   r   r0   ÚHomepager¤   rU   r+   rº   zA Django-based CMS©	re   r¦   r§   r¨   r©   rª   ú!editors_picks-0-external_link_urlú"editors_picks-0-external_link_textr¬   rŸ   rR   r   r-   )Nr+   )r   r!   r#   r    r[   r®   r
   r›   r"   Úsetr²   Zvalues_listr   )r'   r   Zsearch_pick_1Úsearch_pick_2r·   ra   r(   r(   r)   Ú$test_post_with_existing_query_string.  s<    
ÿÿ÷þÿýúz@TestSearchPromotionsAddView.test_post_with_existing_query_stringc              	   C   sæ   dddddddddœ}| j  tdƒ|¡}|  |jd¡ |  |jd	 d
d¡ |  t|jd jƒd¡ |  |jd jd j	d j
d¡ |  |jd jd j	d d¡ |  |jd ddg ¡ |  |jd dd g ¡ |  |jd d d g ¡ d S )NrU   r   r   r¤   rd   r¥   rŸ   rS   Úformre   úThis field is required.Úsearchpicks_formsetÚpager   )r[   r®   r
   r"   r\   ÚassertFormErrorrf   r³   ÚformsÚcleaned_dataÚidÚassertFormSetError©r'   r·   ra   r(   r(   r)   Ú#test_post_with_invalid_query_stringX  s<    ø
ÿþ
ÿþüz?TestSearchPromotionsAddView.test_post_with_invalid_query_stringc              	   C   s|   dddddddddœ}| j  td	ƒ|¡}|  |jd
¡ |  |jd ddd¡ |  |jd dd g ¡ |  |jd d d g ¡ d S )Nr£   r   r   r¤   rU   l   ÿc(	 rd   r¥   rŸ   rS   rÐ   rÑ   úGSelect a valid choice. That choice is not one of the available choices.©r[   r®   r
   r"   r\   rÖ   rf   r×   r(   r(   r)   Útest_post_with_invalid_page}  s&    ø
üz7TestSearchPromotionsAddView.test_post_with_invalid_pagec              
   C   s\   dddddddddd	œ	}| j  td
ƒ|¡}|  |tdƒ¡ |  t d¡jjdd 	¡ ¡ d S )Nr£   r   r   r¤   rU   r+   rº   rd   rÈ   rŸ   rR   ©r-   )
r[   r®   r
   r›   r¯   r   r!   r#   r°   r±   r×   r(   r(   r)   Útest_post_with_external_link˜  s"    ÷ÿÿz8TestSearchPromotionsAddView.test_post_with_external_linkc                 C   sH   dddddœ}| j  tdƒ|¡}|  |jd¡ |  |jd d d d¡ d S )	Nr£   r   r¤   )re   r¦   r§   r¨   rŸ   rS   rÐ   ú@Please specify at least one recommendation for this search term.rÚ   r×   r(   r(   r)   Ú!test_post_without_recommendations±  s    üüz=TestSearchPromotionsAddView.test_post_without_recommendationsc                 C   sj   ddddddddddd	œ
}| j  td
ƒ|¡}|  |jd¡ |  |jd dd d¡ |  |jd d d g ¡ d S )Nr£   r   r   r¤   rU   r+   rº   rd   )
re   r¦   r§   r¨   r©   rª   r«   rÉ   rÊ   r¬   rŸ   rS   rÐ   ú4Please only select a page OR enter an external link.rÚ   r×   r(   r(   r)   Ú%test_post_with_page_and_external_linkÄ  s(    öüzATestSearchPromotionsAddView.test_post_with_page_and_external_linkc                 C   sd   ddddddddœ}| j  tdƒ|¡}|  |jd	¡ |  |jd
 dd d¡ |  |jd
 d d g ¡ d S )Nr£   r   r   r¤   rU   rd   )re   r¦   r§   r¨   r©   rª   r¬   rŸ   rS   rÐ   ú.You must recommend a page OR an external link.rÚ   r×   r(   r(   r)   Ú test_post_missing_recommendationÞ  s"    ù	üz<TestSearchPromotionsAddView.test_post_missing_recommendationc              
   C   s~   dddddddddd	œ	}| j  td
ƒ|¡}|  |jd¡ |  |jd ddd¡ |  |jd dd g ¡ |  |jd d d g ¡ d S )Nr£   r   r   r¤   rU   Únotalinkrº   rd   rÈ   rŸ   rS   rÐ   r-   úEnter a valid URL.rÚ   r×   r(   r(   r)   Útest_post_invalid_external_linkõ  s(    ÷üz;TestSearchPromotionsAddView.test_post_invalid_external_linkc                 C   sz   ddddddddœ}| j  tdƒ|¡}|  |jd	¡ |  |jd
 ddd¡ |  |jd
 dd g ¡ |  |jd
 d d g ¡ d S )Nr£   r   r   r¤   rU   r+   )re   r¦   r§   r¨   r©   rª   rÉ   rŸ   rS   rÐ   Úexternal_link_textúGYou must enter an external link text if you enter an external link URL.rÚ   r×   r(   r(   r)   Útest_post_missing_external_text  s$    ù	üz;TestSearchPromotionsAddView.test_post_missing_external_textc                 C   s^   d| j _| j  ¡  | j j tjjddd¡ | j t	dƒ¡}|  
|jd¡ |  |t	dƒ¡ d S )NFr   r‘   r’   rŸ   r”   r•   r–   r`   r(   r(   r)   rœ   (  s    
þÿz7TestSearchPromotionsAddView.test_get_with_no_permissionc                 C   sh   d| j _| j  ¡  | j j tjjdddtjjddd¡ | j t	dƒ¡}|  
|jd¡ |  |d	¡ d S )
NFr   r‘   r’   r   Zadd_searchpromotionrŸ   rS   r¢   )rP   r—   r˜   r™   rš   r   r   r!   r[   r
   r"   r\   r]   r`   r(   r(   r)   Ú!test_get_with_add_permission_only7  s    
þþûz=TestSearchPromotionsAddView.test_get_with_add_permission_onlyN)rC   rD   rE   rQ   rb   r¹   rÄ   rÍ   rØ   rÛ   rÝ   rß   rá   rã   ræ   ré   rœ   rê   r(   r(   r(   r)   r¡   ×  s   (*%r¡   c                   @   sŒ   e Z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!S )"ÚTestSearchPromotionsEditViewc                 C   sF   |   ¡ | _t d¡| _| jjjdddd| _| jjjdddd| _d S )Nrd   r   r   rÅ   rÆ   r0   rÇ   ©	rO   rP   r   r!   r   r#   r    rÃ   rÌ   r&   r(   r(   r)   rQ   L  s    
ÿÿz"TestSearchPromotionsEditView.setUpc                 C   s„   | j  td| jjfd¡}|  |jd¡ |  |d¡ t| j	ƒ}d| jj }|  | 
| j¡|¡ |  tdƒddœd	d
dœg|j¡ d S )Núwagtailsearchpromotions:editr‚   rS   ú!wagtailsearchpromotions/edit.htmlz/admin/searchpicks/%d/rR   rV   rW   rU   Zhello)r[   r!   r
   r   rÕ   r"   r\   r]   r   rP   Zget_edit_urlrÃ   r^   r_   )r'   ra   Z
url_finderZexpected_urlr(   r(   r)   rb   X  s     ÿ
þûøz(TestSearchPromotionsEditView.test_simplec                 C   s2  dddd| j jdddd| jjddddd	œ}| j td
| jjfd|¡}|  |tdƒ¡ |  t	j
j| j jdjd¡ tt d¡j ¡  d¡ƒ}|  t|ƒd¡ |  |d jd¡ |  |d jd¡ |  |d jd¡ |  |d jd¡ |D ]D}t |¡}|  t|ƒd¡ |  |d jd¡ |  |d j| j¡ qèd S )Nrd   r0   r¤   rU   r   r   úDescription has changedrÇ   ©re   r¦   r§   r¨   úeditors_picks-0-idr©   rª   r«   r¬   úeditors_picks-1-idr»   r¼   r½   rÀ   rí   r‚   rR   ©rÕ   r   zwagtail.edit)rÃ   rÕ   rÌ   r[   r®   r
   r   r›   r"   r   r   r!   r   rH   r   r#   r²   rÁ   r³   r   r´   rµ   r¶   rP   rÂ   r(   r(   r)   r¹   n  sH    òÿþÿ
z&TestSearchPromotionsEditView.test_postc                 C   sú   dddd| j jdddd| jjdddddœ}| j td	ƒ|¡}|  |jd
¡ |  |j	d dd¡ |  t
|j	d jƒd¡ |  |j	d jd jd jd¡ |  |j	d jd jd d¡ |  |j	d ddg ¡ |  |j	d dd g ¡ |  |j	d d d g ¡ d S )NrU   r0   r¤   r   r   rï   rÇ   rð   rŸ   rS   rÎ   re   rÏ   rÐ   rÑ   r   )rÃ   rÕ   rÌ   r[   r®   r
   r"   r\   rÒ   rf   r³   rÓ   rÔ   rÖ   r×   r(   r(   r)   rØ     sH    òÿþ
ÿþüz@TestSearchPromotionsEditView.test_post_with_invalid_query_stringc                 C   s°   dddd| j jdddd| jjdddd	d
œ}| j td| jjfd|¡}|  |jd¡ |  	|j
d ddd¡ |  	|j
d dd g ¡ |  	|j
d dd g ¡ |  	|j
d d d g ¡ d S )Nrd   r0   r¤   rU   r   r   rï   i‡šŒ rÇ   rð   rí   r‚   rS   rÐ   rÑ   rÙ   ©rÃ   rÕ   rÌ   r[   r®   r
   r   r"   r\   rÖ   rf   r×   r(   r(   r)   rÛ   Ç  s8    òÿüz8TestSearchPromotionsEditView.test_post_with_invalid_pagec                 C   sÈ   t | jj ¡ ƒ}dddd| jjdddd| jjddddd	œ}| j t	d
| jjfd|¡}|  
|t	dƒ¡ t d¡}|  t |j ¡ ƒ|¡ | j ¡  |  | jj|¡ |  | jj ¡ d¡ |  | jjd¡ d S )NzHello againr0   r¤   rU   r   r   rï   rÇ   rð   rí   r‚   rR   )rË   r   r#   r²   rÃ   rÕ   rÌ   r[   r®   r
   r›   r   r!   r"   Zrefresh_from_dbr$   r   )r'   Zcurrent_picksr·   ra   Z	new_queryr(   r(   r)   Útest_post_change_query_stringë  s4    òÿ

z:TestSearchPromotionsEditView.test_post_change_query_stringc                 C   s
  |   t d¡j ¡ d | j¡ |   t d¡j ¡ d | j¡ dddd| jjdddd| jjddddd	œ}| j 	t
d
| jjfd|¡}|  |t
dƒ¡ |   tjj| jjdjd¡ |   tjj| jjdjd¡ |   t d¡j ¡ d | j¡ |   t d¡j ¡ d | j¡ d S )Nrd   r   r   r0   r¤   rU   rÅ   rÇ   rð   rí   r‚   rR   ró   )r"   r   r!   r#   r²   rÃ   rÌ   rÕ   r[   r®   r
   r   r›   r   r   r   r×   r(   r(   r)   Útest_post_reorder  s:    òÿÿÿz.TestSearchPromotionsEditView.test_post_reorderc                 C   sš   dddd| j jddddd| jjdd	d
dddœ}| j td| jjfd|¡}|  |tdƒ¡ |  t	 
d¡jjdd ¡ ¡ |  t	 
d¡jjd
d ¡ ¡ d S )Nrd   r0   r¤   rU   r   r+   rº   rÅ   r   zhttps://djangoproject.comZDjangorÇ   )re   r¦   r§   r¨   rñ   r©   rª   rÉ   rÊ   r¬   rò   r»   r¼   r¾   r¿   rÀ   rí   r‚   rR   rÜ   )rÃ   rÕ   rÌ   r[   r®   r
   r   r›   r¯   r   r!   r#   r°   r±   r×   r(   r(   r)   rÝ   8  s>    ðÿÿÿÿÿz9TestSearchPromotionsEditView.test_post_with_external_linkc                 C   s’   dddd| j jdddd| jjddddd	œ}| j td
| jjfd|¡}|  |tdƒ¡ |  t	j
j| jjd ¡ ¡ |  t	j
j| j jd ¡ ¡ d S )Nrd   r0   r¤   rU   r   r   rÅ   rÇ   rð   rí   r‚   rR   ró   )rÃ   rÕ   rÌ   r[   r®   r
   r   r›   ÚassertFalser   r   r°   r±   r¯   r×   r(   r(   r)   Útest_post_delete_recommendation_  s.    òÿÿz<TestSearchPromotionsEditView.test_post_delete_recommendationc                 C   sn   dddd| j jdddd| jjdddddœ}| j td	| jjfd
|¡}|  |jd¡ |  	|j
d d d d¡ d S )Nrd   r0   r¤   r   r   rï   rÇ   rð   rí   r‚   rS   rÐ   rÞ   rô   r×   r(   r(   r)   rß   €  s2    òÿüz>TestSearchPromotionsEditView.test_post_without_recommendationsc                 C   sž   dddd| j jdddd| jjddddd	d
dœ}| j td| jjfd|¡}|  |jd¡ |  	|j
d dd d¡ |  	|j
d d d g ¡ |  	|j
d dd g ¡ d S )Nrd   r0   r¤   rU   r   r   rï   r+   rº   rÇ   )re   r¦   r§   r¨   rñ   r©   rª   r«   r¬   rò   r»   r¼   r½   r¾   r¿   rÀ   rí   r‚   rS   rÐ   rà   rô   r×   r(   r(   r)   rá   Ÿ  s:    ðÿüzBTestSearchPromotionsEditView.test_post_with_page_and_external_linkc                 C   sš   dddd| j jddd| jjdddd	d
dœ}| j td| jjfd|¡}|  |jd¡ |  	|j
d dd d¡ |  	|j
d d d g ¡ |  	|j
d dd g ¡ d S )Nrd   r0   r¤   rU   r   rï   r   r+   rº   rÇ   )re   r¦   r§   r¨   rñ   r©   rª   r¬   rò   r»   r¼   r¾   r¿   rÀ   rí   r‚   rS   rÐ   râ   rô   r×   r(   r(   r)   rã   Â  s6    òÿüz=TestSearchPromotionsEditView.test_post_missing_recommendationc                 C   sœ   dddd| j jdddd| jjdddd	d
dœ}| j td| jjfd|¡}|  |jd¡ |  	|j
d ddd¡ |  	|j
d dd g ¡ |  	|j
d d d g ¡ d S )Nrd   r0   r¤   rU   r   r   rï   rä   rº   rÇ   )re   r¦   r§   r¨   rñ   r©   rª   r«   r¬   rò   r»   r¼   r¾   r¿   rÀ   rí   r‚   rS   rÐ   r-   rå   rô   r×   r(   r(   r)   ræ   ã  s8    ñÿüz<TestSearchPromotionsEditView.test_post_invalid_external_linkc                 C   sš   dddd| j jdddd| jjdddd	d
œ}| j td| jjfd|¡}|  |jd¡ |  	|j
d ddd¡ |  	|j
d dd g ¡ |  	|j
d d d g ¡ d S )Nrd   r0   r¤   rU   r   r   rï   r+   rÇ   )re   r¦   r§   r¨   rñ   r©   rª   r«   r¬   rò   r»   r¼   r¾   rÀ   rí   r‚   rS   rÐ   rç   rè   rô   r×   r(   r(   r)   ré     s6    òÿüz<TestSearchPromotionsEditView.test_post_missing_external_textc                 C   sh   d| j _| j  ¡  | j j tjjddd¡ | j t	d| j
jfd¡}|  |jd¡ |  |t	dƒ¡ d S )	NFr   r‘   r’   rí   r‚   r”   r•   ©rP   r—   r˜   r™   rš   r   r   r!   r[   r
   r   rÕ   r"   r\   r›   r`   r(   r(   r)   rœ   '  s    
þÿÿz8TestSearchPromotionsEditView.test_get_with_no_permissionc                 C   sr   d| j _| j  ¡  | j j tjjdddtjjddd¡ | j t	d| j
jfd¡}|  |jd	¡ |  |d
¡ d S )NFr   r‘   r’   r   rž   rí   r‚   rS   rî   ©rP   r—   r˜   r™   rš   r   r   r!   r[   r
   r   rÕ   r"   r\   r]   r`   r(   r(   r)   r    8  s"    
þþûÿz?TestSearchPromotionsEditView.test_get_with_edit_permission_onlyN)rC   rD   rE   rQ   rb   r¹   rØ   rÛ   rõ   rö   rÝ   rø   rß   rá   rã   ræ   ré   rœ   r    r(   r(   r(   r)   rë   K  s    /*$$)'!#!""rë   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestSearchPromotionsDeleteViewc                 C   sB   |   ¡ | _t d¡| _| jjjddd| _| jjjddd| _d S )Nrd   r   rÅ   )r   r   r0   rÇ   rì   r&   r(   r(   r)   rQ   O  s    
ÿÿz$TestSearchPromotionsDeleteView.setUpc                 C   s8   | j  td| jjfd¡}|  |jd¡ |  |d¡ d S )Núwagtailsearchpromotions:deleter‚   rS   ú+wagtailsearchpromotions/confirm_delete.html)r[   r!   r
   r   rÕ   r"   r\   r]   r`   r(   r(   r)   rb   [  s
    ÿz*TestSearchPromotionsDeleteView.test_simplec                 C   sf   | j  td| jjfd¡}|  |tdƒ¡ |  tjj	| j
jd ¡ ¡ |  tjj	| jjd ¡ ¡ d S )Nrü   r‚   rR   ró   )r[   r®   r
   r   rÕ   r›   r÷   r   r   r°   rÌ   r±   rÃ   r`   r(   r(   r)   r¹   b  s    ÿÿÿz(TestSearchPromotionsDeleteView.test_postc                 C   sh   d| j _| j  ¡  | j j tjjddd¡ | j t	d| j
jfd¡}|  |jd¡ |  |t	dƒ¡ d S )	NFr   r‘   r’   rü   r‚   r”   r•   rù   r`   r(   r(   r)   rœ   u  s    
þÿÿz:TestSearchPromotionsDeleteView.test_get_with_no_permissionc                 C   sr   d| j _| j  ¡  | j j tjjdddtjjddd¡ | j t	d| j
jfd¡}|  |jd	¡ |  |d
¡ d S )NFr   r‘   r’   r   Zdelete_searchpromotionrü   r‚   rS   rý   rú   r`   r(   r(   r)   r    †  s"    
þþûÿzATestSearchPromotionsDeleteView.test_get_with_edit_permission_onlyN)rC   rD   rE   rQ   rb   r¹   rœ   r    r(   r(   r(   r)   rû   N  s
   rû   c                   @   s   e Zd Zdd„ ZdS )Ú#TestGarbageCollectManagementCommandc           	      C   s   t  ¡ }|tdd  ¡ }|tdd  ¡ }g }tdƒD ],}t d|› ¡}|j|d | |j	¡ q8g }tdƒD ],}t d|› ¡}|j|d | |j	¡ qrg }tdƒD ]@}t d|› ¡}|j|d t
jj|dd	d
d | |j	¡ q¬tjdtƒ d |  tjj|d ¡ ¡ |  tjj||d ¡ ¡ |  tjj|d ¡ d¡ |  tjj||d ¡ d¡ |  tjj|d ¡ d¡ |  tjj||d ¡ d	¡ d S )Né   r>   r   r€   zHello r@   zWorld zFoo bar r   ZTestr   Z searchpromotions_garbage_collect)Ústdout)Zid__in)r   Zquery_id__in)r   Únowr   r   r7   r   r!   r8   ÚappendrÕ   r   r   r    r   Zcall_commandr   r÷   r°   r±   r   r"   r$   )	r'   ZnowdtZold_hit_dateZrecent_hit_dateZquery_ids_to_be_deletedr<   rc   Zrecent_query_idsZpromoted_query_idsr(   r(   r)   Útest_garbage_collect_command  sT    ÿÿÿÿüÿüz@TestGarbageCollectManagementCommand.test_garbage_collect_commandN)rC   rD   rE   r  r(   r(   r(   r)   rþ   œ  s   rþ   c                   @   s8   e Zd Zdd„ Zi fdd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestQueryChooserViewc                 C   s   |   ¡  d S rK   )rO   r&   r(   r(   r)   rQ   Ö  s    zTestQueryChooserView.setUpc                 C   s   | j  d|¡S )Nz#/admin/searchpicks/queries/chooser/)r[   r!   )r'   Úparamsr(   r(   r)   r!   Ù  s    zTestQueryChooserView.getc                 C   sF   |   ¡ }|  |jd¡ |  |d¡ t |j ¡ ¡}|  |d d¡ d S )NrS   z4wagtailsearchpromotions/queries/chooser/chooser.htmlÚstepZchooser)r!   r"   r\   r]   ÚjsonÚloadsr_   Údecode)r'   ra   Zresponse_jsonr(   r(   r)   rb   Ü  s    ÿz TestQueryChooserView.test_simplec                 C   s    |   ddi¡}|  |jd¡ d S )Nrc   rd   rS   ©r!   r"   r\   r`   r(   r(   r)   rh   å  s    z TestQueryChooserView.test_searchc                 C   s<   |   ddi¡}|  |jd¡ |   ddi¡}|  |jd¡ d S )Nro   r   rS   i'  i”  r
  r`   r(   r(   r)   rs   é  s    z$TestQueryChooserView.test_paginationN)rC   rD   rE   rQ   r!   rb   rh   rs   r(   r(   r(   r)   r  Õ  s
   	r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestHitCounterc                 C   s   |   t d¡jd¡ d S )Nrd   r   )r"   r   r!   r:   r&   r(   r(   r)   Útest_no_hitsó  s    zTestHitCounter.test_no_hitsc                 C   s&   t  d¡ ¡  |  t  d¡jd¡ d S )Nrd   r   )r   r!   r8   r"   r:   r&   r(   r(   r)   Útest_hitö  s    zTestHitCounter.test_hitc                 C   s4   t dƒD ]}t d¡ ¡  q|  t d¡jd¡ d S )Nr€   rd   )r7   r   r!   r8   r"   r:   rm   r(   r(   r)   Útest_10_hitsý  s    zTestHitCounter.test_10_hitsN)rC   rD   rE   r  r  r  r(   r(   r(   r)   r  ò  s   r  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestQueryStringNormalisationc                 C   s   t  d¡| _d S )Nz  Hello  World!  )r   r!   r   r&   r(   r(   r)   rQ     s    z"TestQueryStringNormalisation.setUpc                 C   s   |   t| jƒd¡ d S )Nzhello world!)r"   rl   r   r&   r(   r(   r)   Útest_normalisation
  s    z/TestQueryStringNormalisation.test_normalisationc                 C   s*   g d¢}|D ]}|   | jt |¡¡ qd S )N)z  Hello World!zHello World!  zhello  world!z  Hello  world!  )r"   r   r   r!   ©r'   r~   r   r(   r(   r)   Útest_equivalent_queries  s    z4TestQueryStringNormalisation.test_equivalent_queriesc                 C   s*   g d¢}|D ]}|   | jt |¡¡ qd S )N)Z
HelloWorldzHelloWorld!  Hello  World!  rd   )ZassertNotEqualr   r   r!   r  r(   r(   r)   Útest_different_queries  s    z3TestQueryStringNormalisation.test_different_queriesN)rC   rD   rE   rQ   r  r  r  r(   r(   r(   r)   r    s   r  c                   @   s   e Zd Zdd„ ZdS )ÚTestQueryPopularityc                 C   s\  t dƒD ]}t d¡ ¡  qt dƒD ]}t d¡ ¡  q$t ¡ }|  | ¡ d¡ |  |d t d¡¡ |  |d t d¡¡ t dƒD ]}t d	¡ ¡  q„|  | ¡ d¡ |  |d t d¡¡ |  |d t d	¡¡ |  |d t d¡¡ t d
ƒD ]}t d¡ ¡  qò|  | ¡ d¡ |  |d t d¡¡ |  |d t d¡¡ |  |d t d	¡¡ d S )Nr1   zunpopular queryr€   zpopular queryr0   r   r   r5   zlittle popular queryrw   )r7   r   r!   r8   r9   r"   r$   )r'   r<   Zpopular_queriesr(   r(   r)   Útest_query_popularity$  s(    z)TestQueryPopularity.test_query_popularityN)rC   rD   rE   r  r(   r(   r(   r)   r  #  s   r  c                   @   sD   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )ÚTestQueryHitsReportViewú$wagtailsearchpromotions:search_termsc                 C   s`   t  d¡| _| j ¡  | j ¡  | j ¡  t  d¡ t  d¡ ¡  t  d¡}| ¡  | ¡  d S )NzA query with three hitsza query with no hitszA query with one hitzA query with two hits)r   r!   r   r8   )r'   r   r(   r(   r)   ÚsetUpTestDataM  s    




z%TestQueryHitsReportView.setUpTestDatac                 C   s®   |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  dddœg|j¡ |  |j¡}| d¡}|  dd	„ |D ƒd
dgddgddgddgg¡ |  |d¡ |  	|¡ |  
|d¡ d S )NrS   z%wagtailadmin/reports/base_report.htmlz-wagtailadmin/reports/base_report_results.htmlrU   zSearch termsrW   zmain trc                 S   s    g | ]}d d„ |  d¡D ƒ‘qS )c                 S   s   g | ]}|j  ¡ ‘qS r(   ©ÚtextÚstrip©ry   Úcellr(   r(   r)   r{   k  ó    zBTestQueryHitsReportView.test_simple.<locals>.<listcomp>.<listcomp>zth,td©Úselect©ry   Útrr(   r(   r)   r{   k  r  z7TestQueryHitsReportView.test_simple.<locals>.<listcomp>úSearch term(s)ÚViewsúa query with three hitsÚ3úa query with two hitsÚ2úa query with one hitÚ1úThere are no results.zSearch terms - Wagtail)r!   r"   r\   r]   ZassertBreadcrumbsr_   r†   r   ÚassertNotContainsÚassertActiveFilterNotRenderedZassertPageTitle)r'   ra   rˆ   Útrsr(   r(   r)   rb   Y  s0    þ
þ
üþ

z#TestQueryHitsReportView.test_simplec                 C   sH   d| j _| j  ¡  | j j tjjddd¡ |  ¡ }|  |t	dƒ¡ d S )NFr   r‘   r’   r•   )
rP   r—   r˜   r™   rš   r   r   r!   r›   r
   r`   r(   r(   r)   Útest_get_with_no_permissionsx  s    
ÿÿz4TestQueryHitsReportView.test_get_with_no_permissionsc                 C   sB   | j ddid}|  |jd¡ | ¡  ¡  ¡ }|  |g d¢¡ d S )NÚexportÚcsv©r  rS   )zSearch term(s),Viewsza query with three hits,3za query with two hits,2za query with one hit,1)r!   r"   r\   Úgetvaluer	  Ú
splitlines)r'   ra   Z
data_linesr(   r(   r)   Útest_csv_export…  s    þz'TestQueryHitsReportView.test_csv_exportc                 C   sp   | j ddid}|  |jd¡ | ¡ }tt|ƒdd }dd„ |jD ƒ}|  |d	d
gddgddgddgg¡ d S )Nr0  Zxlsxr2  rS   )ÚfilenameZSheet1c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]
}|j ‘qS r(   )Úvaluer  r(   r(   r)   r{   ™  r  zGTestQueryHitsReportView.test_xlsx_export.<locals>.<listcomp>.<listcomp>r(   )ry   Úrowr(   r(   r)   r{   ™  r  z<TestQueryHitsReportView.test_xlsx_export.<locals>.<listcomp>r#  r$  r%  r1   r'  r0   r)  r   )r!   r"   r\   r3  r   r   Úrows)r'   ra   Zworkbook_dataZ	worksheetZ
cell_arrayr(   r(   r)   Útest_xlsx_export”  s    üþz(TestQueryHitsReportView.test_xlsx_exportc              	   C   sâ   ddgddgddggddgddgddggddgddgddggddgddgddggdœ}|  ¡ D ]~\}}| j|dZ | jd	|id
}|  |jd¡ |  |j¡}| d¡}|  dd„ |D ƒ|¡ W d   ƒ q^1 sÒ0    Y  q^d S )Nr)  r*  r%  r&  r'  r(  )re   z-query_stringZ_hitsz-_hits)Úorderingr;  r2  rS   zmain tbody trc                 S   s    g | ]}d d„ |  d¡D ƒ‘qS )c                 S   s   g | ]}|j  ¡ ‘qS r(   r  r  r(   r(   r)   r{   Â  r  zDTestQueryHitsReportView.test_ordering.<locals>.<listcomp>.<listcomp>Útdr  r!  r(   r(   r)   r{   Â  r  z9TestQueryHitsReportView.test_ordering.<locals>.<listcomp>)ÚitemsZsubTestr!   r"   r\   r†   r_   r   )r'   Zcasesr;  Úresultsra   rˆ   r.  r(   r(   r)   Útest_ordering¤  s6    ýýýýð
þz%TestQueryHitsReportView.test_orderingN)rC   rD   rE   Úurl_nameÚclassmethodr  rb   r/  r5  r:  r?  r(   r(   r(   r)   r  J  s   
r  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestFilteredQueryHitsViewr  c                 C   s8   |   ¡ | _t d¡| _t ¡  ¡ | _| jj| jd d S )NzThis will be foundr@   )	rO   rP   r   r!   Z	query_hitr   r  r   r8   r&   r(   r(   r)   rQ   Ê  s    
zTestFilteredQueryHitsView.setUpc                 C   s”   | j ddid}|  |jd¡ |  |d¡ |  |d¡ |  |  |j¡¡ | j ddid}|  |jd¡ |  |d¡ |  |d¡ |  |  |j¡¡ d S )Nrc   ÚFoundr2  rS   úthis will be foundr+  z	Not found)r!   r"   r\   rg   r,  r-  r†   r_   r`   r(   r(   r)   Útest_search_by_query_stringÐ  s    z5TestFilteredQueryHitsView.test_search_by_query_stringc                 C   sÊ   d| j jdddi}| j|d}|  |jd¡ |  |d¡ |  |d¡ |  |  |j	¡d|d ¡ | j j| j j
d d|d< | j j| j j
d	 d|d
< | j|d}|  |jd¡ |  |d¡ |  |d¡ d S )NZhit_date_fromr   )ÚdayÚmonthr2  rS   rD  r+  )Úyearr0   Zhit_date_to)r   Úreplacer!   r"   r\   rg   r,  ZassertActiveFilterr†   r_   rH  )r'   r  ra   r(   r(   r)   Útest_filter_by_dateÝ  s    ÿÿz-TestFilteredQueryHitsView.test_filter_by_dateN)rC   rD   rE   r@  rQ   rE  rJ  r(   r(   r(   r)   rB  Ç  s   rB  )1r  r   r   r   Úior   r   Zdjango.contrib.auth.modelsr   Zdjango.corer   Zdjango.testr	   Zdjango.urlsr
   Zdjango.utilsr   Zopenpyxlr   Zwagtail.admin.admin_url_finderr   Z&wagtail.admin.tests.test_reports_viewsr   Z(wagtail.contrib.search_promotions.modelsr   r   r   ZKwagtail.contrib.search_promotions.templatetags.wagtailsearchpromotions_tagsr   Zwagtail.log_actionsr   r´   Zwagtail.test.utilsr   Z!wagtail.test.utils.template_testsr   r   rF   rM   r¡   rë   rû   rþ   r  r  r  r  r  rB  r(   r(   r(   r)   Ú<module>   sH   }  &  v    N9'}