o
    h                    @   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                   @   4   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)   g/var/www/html/ndineBlogger/venv/lib/python3.10/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   r1   r   Popular search pickr   uninterestingr   zUninteresting search pick)r   r"   rangeadd_hitr   r    r!   r#   get_most_popularr%   r$   r&   r   r   hits)r(   popularQueryi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 qt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 )Nr1   daysr6   r5   r   surpriser   r7   r   zSurprising search pick)
date_sincer   r2   )r   todayr   r   r"   r9   r:   r   r    r!   r;   r#   r%   r$   r&   r   r   r<   )
r(   TODAYTWO_DAYS_AGOFIVE_DAYS_AGOr=   r>   surpriseQuerymost_popular_queriesr$   surprise_picksr)   r)   r*   test_get_most_popular_sincer   s>   

z0TestSearchPromotions.test_get_most_popular_sinceN)__name__
__module____qualname__r+   r/   r4   r@   rM   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   r0   r   zroot page againSecond search pick)r   r    r!   r   r"   listr   r#   )r(   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)rS   r   r#   )r(   rU   r)   r)   r*   1test_get_search_promotions_with_none_query_string   s   zTTestGetSearchPromotionsTemplateTag.test_get_search_promotions_with_none_query_stringN)rN   rO   rP   rV   rX   r)   r)   r)   r*   rQ      s    rQ   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      |   | _d S rW   loginuserr'   r)   r)   r*   setUp      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 )Nr`   qHellora   query_stringz1Sorry, no promoted results match "<em>Hello</em>")ri   r"   r
   r#   rj   contextassertContainsrn   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.   r`   rq   ra   rs   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"   ri   r
   r#   rj   rt   ru   rn   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 )N2   query r   r   r0   r   )r9   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 )Nr`   pr1   ra   rb   page_obj	r|   ri   r"   r
   r#   rj   rk   rt   numberrn   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 )Nr`   r}   zHello World!ra   rb   r~   r   r   rn   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 )Nr`   r}   i ra   rb   r~   	paginator)
r|   ri   r"   r
   r#   rj   rk   rt   r   	num_pagesrn   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 s$w   Y  t tdD ].}tdt	|   fddtdD } fddtdD }t
j| tj| q1| d | j| W d    d S 1 sww   Y  d S )	Nr`         ry   c                    s*   g | ]}t  |d  d |d| dqS )r1   r   zSearch pick r   )r   .0j)r   r)   r*   
<listcomp>"  s    
zBTestSearchPromotionsIndexView.test_num_queries.<locals>.<listcomp>r6   c                    s$   g | ]}t  t|d  |dqS )rA   )r   r   r<   )r   r   r   r   rF   r)   r*   r   +  s    )r
   r|   ri   r"   assertNumQueriesr   rF   r9   r   rz   r   r    bulk_creater   )r(   rf   r>   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 ssSSSSr`   ra   rb   queries)r|   r   r    r!   r   r"   ri   r
   r#   rj   rk   rt   rs   rn   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   rA   rC   r   r   r0   r   r1   rR   r`   z<td>10</td>T)htmlzwagtailadmin_pages:edit)r   args)r1   a[href=""])r   rF   r9   r   r"   r:   r   r   r    r!   ri   r
   ru   r#   r<   get_souprm   
select_oneassertIsNotNoner$   r%   )	r(   rF   r>   ro   souproot_page_edit_urlhomepage_edit_urlroot_page_edit_link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 ]}|  q+tjj|dddd td}tdD ]}|  qEt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 )Nr`   zyzzyvasr   r   z9no definition found, this is a valid scrabble word thoughr   aardwolf   z?Striped hyena of southeast Africa that feeds chiefly on insectsoptimalrx      zAn oddly popular search term?
suboptimal   zNot as popularz?ordering=-query_stringra   r~   z?ordering=-query_string&p=3z?ordering=query_stringz?ordering=-viewsz?ordering=views&p=3)r|   r
   r   r    r!   r   r"   r9   r:   ri   r#   rj   rt   rs   )r(   rf   r=   r>   ro   r)   r)   r*   test_results_orderingo  sb   



z3TestSearchPromotionsIndexView.test_results_orderingc                 C   ^   d| j _| j   | j jtjjddd | jt	d}| 
|jd | |t	d d S )NFwagtailadminaccess_admincontent_type__app_labelcodenamer`   .  wagtailadmin_homer]   is_superusersaveuser_permissionsaddr   r    r"   ri   r
   r#   rj   assertRedirectsrn   r)   r)   r*   test_get_with_no_permission     
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_searchpromotionr`   ra   rb   wagtailsearchpromotions:addr   r   )r]   r   r   r   r   r   r    r"   ri   r
   r#   rj   rk   r   rm   assertIsNoner   )r(   ro   r   add_urlr)   r)   r*   "test_get_with_edit_permission_only  s$   
z@TestSearchPromotionsIndexView.test_get_with_edit_permission_onlyN)rN   rO   rP   r^   rp   rv   rw   r|   r   r   r   r   r   r   r   r   r   r)   r)   r)   r*   rY      s    		#@rY   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   rZ   rW   r[   r'   r)   r)   r*   r^     r_   z!TestSearchPromotionsAddView.setUpc                 C   sP   | j td}| |jd | |d | tddddddg|j d S )	Nr   ra    wagtailsearchpromotions/add.htmlr`   rd   re   rc   zNew: Promoted search resultrh   rn   r)   r)   r*   rp     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     rc   rr   rs   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   r`   )r   wagtail.create)ri   postr
   r   
assertTruer   r"   r$   filterexistsrS   allr#   lenr   log_registryget_logs_for_instanceaction)r(   	post_dataro   rU   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 ]"}t|}| 
t|d | 
|d jd | 
|d j| j q]d S )Nr   r1   r   r   rc   r   rr   r,   WagtailzThe landing page)rs   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   r`   r   r   )ri   r   r
   r   rS   r   r"   r$   r   order_byr#   r   r   r   r.   r   r   r   r]   r(   r   ro   rU   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   r1   Homepager   rc   r,   r   zA Django-based CMS	rs   r   r   r   r   r   !editors_picks-0-external_link_url"editors_picks-0-external_link_textr   r   r`   r   r.   )Nr,   )r   r"   r$   r!   ri   r   r
   r   r#   setr   values_listr   )r(   r   search_pick_1search_pick_2r   ro   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 )Nrc   r   r   r   rr   r   r   ra   formrs   This field is required.searchpicks_formsetpager   )ri   r   r
   r#   rj   assertFormErrorrt   r   formscleaned_dataidassertFormSetErrorr(   r   ro   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   rc   l   c(	 rr   r   r   ra   r   r   GSelect a valid choice. That choice is not one of the available choices.ri   r   r
   r#   rj   r   rt   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   rc   r,   r   rr   r   r   r`   r.   )
ri   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   )rs   r   r   r   r   ra   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   rc   r,   r   rr   )
rs   r   r   r   r   r   r   r   r   r   r   ra   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   rc   rr   )rs   r   r   r   r   r   r   r   ra   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   rc   notalinkr   rr   r   r   ra   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   rc   r,   )rs   r   r   r   r   r   r   r   ra   r   external_link_textGYou 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   r   )NFr   r   r   r   r   r   r   rn   r)   r)   r*   r   (  r   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   add_searchpromotionr   ra   r   )r]   r   r   r   r   r   r    r"   ri   r
   r#   rj   rk   rn   r)   r)   r*   !test_get_with_add_permission_only7  s   
z=TestSearchPromotionsAddView.test_get_with_add_permission_onlyN)rN   rO   rP   r^   rp   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 )Nrr   r   r   r   r   r1   r   	r\   r]   r   r"   r   r$   r!   r   r   r'   r)   r)   r*   r^   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   ra   !wagtailsearchpromotions/edit.htmlz/admin/searchpicks/%d/r`   rd   re   rc   hello)ri   r"   r
   r   r   r#   rj   rk   r   r]   get_edit_urlr   rl   rm   )r(   ro   
url_finderexpected_urlr)   r)   r*   rp   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 ]"}t|}| t|d | |d jd | |d j| j qtd S )Nrr   r1   r   rc   r   r   Description has changedr   rs   r   r   r   editors_picks-0-idr   r   r   r   editors_picks-1-idr   r   r   r   r  r   r`   r   r   zwagtail.edit)r   r   r   ri   r   r
   r   r   r#   r   r    r"   r   rS   r   r$   r   r   r   r   r   r   r   r]   r   r)   r)   r*   r   n  sJ   
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 )Nrc   r1   r   r   r   r  r   r  r   ra   r   rs   r   r   r   r   )r   r   r   ri   r   r
   r#   rj   r   rt   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 )Nrr   r1   r   rc   r   r   r  i r   r  r  r   ra   r   r   r   r   r   r   ri   r   r
   r   r#   rj   r   rt   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 againr1   r   rc   r   r   r  r   r  r  r   r`   )r   r   r$   r   r   r   r   ri   r   r
   r   r   r"   r#   refresh_from_dbr%   r   )r(   current_picksr   ro   	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 )Nrr   r   r   r1   r   rc   r   r   r  r  r   r`   r  )r#   r   r"   r$   r   r   r   r   ri   r   r
   r   r   r   r    r   r   r)   r)   r*   test_post_reorder  s:   "z.TestSearchPromotionsEditView.test_post_reorderc                 C   s   i ddddddddd| j jd	d
ddddddddd| jjdd
dd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 )!Nrs   rr   r   r1   r   r   r   r  r   rc   r   r   r   r,   r   r   r   r   r  r   r   r   r   zhttps://djangoproject.comr   Djangor   r   r  r   r`   r   )r   r   r   ri   r   r
   r   r   r   r   r"   r$   r   r   r   r)   r)   r*   r   8  sb   	
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 )Nrr   r1   r   rc   r   r   r   r   r  r  r   r`   r  )r   r   r   ri   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 )Nrr   r1   r   r   r   r  r   r  r  r   ra   r   r  r  r   r)   r)   r*   r    s2   z>TestSearchPromotionsEditView.test_post_without_recommendationsc                 C   s   i ddddddddd| j jd	d
ddddddd| jjdd
ddd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 ) Nrs   rr   r   r1   r   r   r   r  r   rc   r   r   r   r   r   r  r  r   r   r   r   r,   r   r   r   r   r  r   ra   r   r  r  r   r)   r)   r*   r    sZ   	
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 )Nrr   r1   r   rc   r   r  r   r,   r   r   )rs   r   r   r   r  r   r   r   r  r   r   r   r   r   r  r   ra   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 )Nrr   r1   r   rc   r   r   r  r  r   r   )rs   r   r   r   r  r   r   r   r   r  r   r   r   r   r   r  r   ra   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 )Nrr   r1   r   rc   r   r   r  r,   r   )rs   r   r   r   r  r   r   r   r   r  r   r   r   r   r  r   ra   r   r
  r  r  r   r)   r)   r*   r    s6   z<TestSearchPromotionsEditView.test_post_missing_external_textc                 C   h   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   r    r"   ri   r
   r   r   r#   rj   r   rn   r)   r)   r*   r   '     
z8TestSearchPromotionsEditView.test_get_with_no_permissionc                 C   r   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   ra   r  r]   r   r   r   r   r   r    r"   ri   r
   r   r   r#   rj   rk   rn   r)   r)   r*   r   8  "   
z?TestSearchPromotionsEditView.test_get_with_edit_permission_onlyN)rN   rO   rP   r^   rp   r   r   r   r   r!  r   r$  r  r  r  r	  r  r   r   r)   r)   r)   r*   r  K  s"    /*$$)'!#!""r  c                   @   r   )TestSearchPromotionsDeleteViewc                 C   sB   |   | _td| _| jjjddd| _| jjjddd| _d S )Nrr   r   r   )r   r   r1   r   r  r'   r)   r)   r*   r^   O  s   
z$TestSearchPromotionsDeleteView.setUpc                 C   s8   | j td| jjfd}| |jd | |d d S )Nwagtailsearchpromotions:deleter   ra   +wagtailsearchpromotions/confirm_delete.html)ri   r"   r
   r   r   r#   rj   rk   rn   r)   r)   r*   rp   [  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   r`   r  )ri   r   r
   r   r   r   r#  r   r    r   r   r   r   rn   r)   r)   r*   r   b  s   z(TestSearchPromotionsDeleteView.test_postc                 C   r%  )	NFr   r   r   r,  r   r   r   r&  rn   r)   r)   r*   r   u  r'  z:TestSearchPromotionsDeleteView.test_get_with_no_permissionc                 C   r(  )NFr   r   r   r   delete_searchpromotionr,  r   ra   r-  r)  rn   r)   r)   r*   r     r*  zATestSearchPromotionsDeleteView.test_get_with_edit_permission_onlyN)rN   rO   rP   r^   rp   r   r   r   r)   r)   r)   r*   r+  N  s    r+  c                   @      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	 qg }tdD ]}td| }|j|d ||j	 q9g }tdD ] }td| }|j|d t
jj|dd	d
d ||j	 qVt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   rA   r   r   zHello rC   zWorld zFoo bar r   Testr    searchpromotions_garbage_collect)stdout)id__in)r   query_id__in)r   nowr   r   r9   r   r"   r:   appendr   r   r    r!   r   call_commandr   r#  r   r   r   r#   r%   )	r(   nowdtold_hit_daterecent_hit_datequery_ids_to_be_deletedr>   rq   recent_query_idspromoted_query_idsr)   r)   r*   test_garbage_collect_command  sZ   z@TestGarbageCollectManagementCommand.test_garbage_collect_commandN)rN   rO   rP   r@  r)   r)   r)   r*   r0        r0  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 rW   )r\   r'   r)   r)   r*   r^     s   zTestQueryChooserView.setUpc                 C   s   | j d|S )Nz#/admin/searchpicks/queries/chooser/)ri   r"   )r(   paramsr)   r)   r*   r"     r_   zTestQueryChooserView.getc                 C   sF   |   }| |jd | |d t|j }| |d d d S )Nra   z4wagtailsearchpromotions/queries/chooser/chooser.htmlstepchooser)r"   r#   rj   rk   jsonloadsrm   decode)r(   ro   response_jsonr)   r)   r*   rp     s   z TestQueryChooserView.test_simplec                 C   s    |  ddi}| |jd d S )Nrq   rr   ra   r"   r#   rj   rn   r)   r)   r*   rv     s   z TestQueryChooserView.test_searchc                 C   s<   |  ddi}| |jd |  ddi}| |jd d S )Nr}   r   ra   i'  i  rJ  rn   r)   r)   r*   r     s   z$TestQueryChooserView.test_paginationN)rN   rO   rP   r^   r"   rp   rv   r   r)   r)   r)   r*   rB    s    	rB  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 )Nrr   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 )Nrr   r   )r   r"   r:   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   rr   )r9   r   r"   r:   r#   r<   r{   r)   r)   r*   test_10_hits  s   zTestHitCounter.test_10_hitsN)rN   rO   rP   rL  rM  rN  r)   r)   r)   r*   rK    s    rK  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*   r^     s   z"TestQueryStringNormalisation.setUpc                 C   s   |  t| jd d S )Nzhello world!)r#   rz   r   r'   r)   r)   r*   test_normalisation
  s   z/TestQueryStringNormalisation.test_normalisationc                 C   *   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   rQ  )N)
HelloWorldzHelloWorld!  Hello  World!  rr   )assertNotEqualr   r   r"   rR  r)   r)   r*   test_different_queries  s   z3TestQueryStringNormalisation.test_different_queriesN)rN   rO   rP   r^   rP  rS  rV  r)   r)   r)   r*   rO    s
    rO  c                   @   r/  )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	  qB| | d | |d td | |d td	 | |d td t d
D ]	}td  qy| | d | |d td | |d td | |d td	 d S )Nr2   zunpopular queryr   zpopular queryr1   r   r   r6   zlittle popular queryr   )r9   r   r"   r:   r;   r#   r%   )r(   r>   popular_queriesr)   r)   r*   test_query_popularity$  s(   z)TestQueryPopularity.test_query_popularityN)rN   rO   rP   rY  r)   r)   r)   r*   rW  #  rA  rW  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   r:   )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 )Nra   z%wagtailadmin/reports/base_report.htmlz-wagtailadmin/reports/base_report_results.htmlrc   zSearch termsre   zmain trc                 S       g | ]}d d | dD qS )c                 S      g | ]}|j  qS r)   textstripr   cellr)   r)   r*   r   k      zBTestQueryHitsReportView.test_simple.<locals>.<listcomp>.<listcomp>zth,tdselectr   trr)   r)   r*   r   k       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#   rj   rk   assertBreadcrumbsrm   r   rf  assertNotContainsassertActiveFilterNotRenderedassertPageTitle)r(   ro   r   trsr)   r)   r*   rp   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   )
r]   r   r   r   r   r   r    r"   r   r
   rn   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rC  ra   )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#   rj   getvaluerH  
splitlines)r(   ro   
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 )Nry  xlsxr{  ra   )filenameSheet1c                 S   s   g | ]	}d d |D qS )c                 S   s   g | ]}|j qS r)   )valuerb  r)   r)   r*   r     s    zGTestQueryHitsReportView.test_xlsx_export.<locals>.<listcomp>.<listcomp>r)   )r   rowr)   r)   r*   r     s    z<TestQueryHitsReportView.test_xlsx_export.<locals>.<listcomp>rj  rk  rl  r2   rn  r1   rp  r   )r"   r#   rj   r|  r   r   rows)r(   ro   workbook_data	worksheet
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- | jd	|id
}| |jd | |j}|d}| dd |D | W d    n1 siw   Y  q/d S )Nrp  rq  rl  rm  rn  ro  )rs   z-query_string_hitsz-_hits)orderingr  r{  ra   zmain tbody trc                 S   r]  )c                 S   r^  r)   r_  rb  r)   r)   r*   r     rd  zDTestQueryHitsReportView.test_ordering.<locals>.<listcomp>.<listcomp>tdre  rg  r)   r)   r*   r     ri  z9TestQueryHitsReportView.test_ordering.<locals>.<listcomp>)itemssubTestr"   r#   rj   r   rm   rf  )r(   casesr  resultsro   r   rw  r)   r)   r*   test_ordering  s<   
z%TestQueryHitsReportView.test_orderingN)rN   rO   rP   url_nameclassmethodr\  rp   rx  r  r  r  r)   r)   r)   r*   rZ  J  s    
rZ  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 foundrC   )	r\   r]   r   r"   	query_hitr   r7  r   r:   r'   r)   r)   r*   r^     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 )Nrq   Foundr{  ra   this will be foundrr  z	Not found)r"   r#   rj   ru   rt  ru  r   rm   rn   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 )Nhit_date_fromr   )daymonthr{  ra   r  rr  )yearr1   hit_date_to)r   replacer"   r#   rj   ru   rt  assertActiveFilterr   rm   r  )r(   rC  ro   r)   r)   r*   test_filter_by_date  s   z-TestFilteredQueryHitsView.test_filter_by_dateN)rN   rO   rP   r  r^   r  r  r)   r)   r)   r*   r    s
    r  )1rF  r   r   r   ior   r   django.contrib.auth.modelsr   django.corer   django.testr	   django.urlsr
   django.utilsr   openpyxlr   wagtail.admin.admin_url_finderr   &wagtail.admin.tests.test_reports_viewsr   (wagtail.contrib.search_promotions.modelsr   r   r   Kwagtail.contrib.search_promotions.templatetags.wagtailsearchpromotions_tagsr   wagtail.log_actionsr   r   wagtail.test.utilsr   !wagtail.test.utils.template_testsr   r   rQ   rY   r   r  r+  r0  rB  rK  rO  rW  rZ  r  r)   r)   r)   r*   <module>   sJ    }  &  v    N9'}