a
    Dg                     @   sB  d dl Z d dlmZ d dlmZ d dlmZ d dl mZ d dlm	Z	 d dl
mZ 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mZ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%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z. G dd de.Z/edddiidG dd deZ0dS )    N)OrderedDict)date)StringIO)mock)settings)
management)
connection)TestCase)override_settings)Tag)InvalidSearchBackendErrorget_search_backendget_search_backends)BaseSearchBackend
FieldErrorFilterFieldErrorDatabaseSearchBackend)fts5_available)
IndexEntry)	MATCH_ALL
MATCH_NONEAndBoostNotOrPhrase	PlainText)models)WagtailTestUtilsc                   @   s*  e Zd ZdgZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Z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-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6dhdi Z7djdk Z8dldm Z9dndo Z:dpdq Z;drds Z<dtdu Z=dvdw Z>dxdy Z?dzd{ Z@d|d} ZAd~d ZBdd ZCdd ZDdd ZEdd ZFdS )BackendTestssearchc                 C   sn   t j D ]*\}}|d | jkr
t|| _|| _ qFq
td| j t	j
   tjd| jt dd d S )NBACKENDz2No WAGTAILSEARCH_BACKENDS entry for the backend %supdate_index2   )backend_namestdout
chunk_size)r   WAGTAILSEARCH_BACKENDSitemsbackend_pathr   backendr%   unittestZSkipTestr   objectsalldeleter   call_commandr   )selfr%   Zbackend_conf r2   a/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/search/tests/test_backends.pysetUp*   s    
zBackendTests.setUpc                 C   s   |  t|t| dS )z
        Checks two results lists are equal while not taking into account the ordering.

        Note: This is different to assertSetEqual in that duplicate results are taken
        into account.
        N)assertListEqualsorted)r1   abr2   r2   r3   assertUnsortedListEqualA   s    z$BackendTests.assertUnsortedListEqualc                 C   s.   | j dtj}| dd |D ddg d S )N
JavaScriptc                 S   s   g | ]
}|j qS r2   title.0rr2   r2   r3   
<listcomp>O       z3BackendTests.test_search_simple.<locals>.<listcomp>JavaScript: The good parts JavaScript: The Definitive Guider+   r!   r   Bookr9   r1   resultsr2   r2   r3   test_search_simpleL   s
    zBackendTests.test_search_simplec                 C   s$   | j dtj}| | d d S )Nr:      )r+   r!   r   rE   assertEqualcountrF   r2   r2   r3   test_search_countS   s    zBackendTests.test_search_countc                 C   s&   | j dtj}| t|t  d S )N )r+   r!   r   rE   assertSetEqualsetrF   r2   r2   r3   test_search_blankW   s    zBackendTests.test_search_blankc                 C   s0   | j ttj}| t|ttjj  d S N)	r+   r!   r   r   rE   rN   rO   r-   r.   rF   r2   r2   r3   test_search_all\   s    zBackendTests.test_search_allc                 C   s"   | j ttj}| t| d S rQ   )r+   r!   r   r   rE   assertFalselistrF   r2   r2   r3   test_search_none`   s    zBackendTests.test_search_nonec                 C   s&   | j dtj}| t|t  d S )NZthrones)r+   r!   r   AuthorrN   rO   rF   r2   r2   r3   4test_search_does_not_return_results_from_wrong_modeld   s    zABackendTests.test_search_does_not_return_results_from_wrong_modelc                 C   sH   t | jjdtjdd}| dd |D ddg | |d jd d S )	NJavaScript Definitiveoroperatorc                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   q   rA   z-BackendTests.test_ranking.<locals>.<listcomp>rB   rC   r   )rT   r+   r!   r   rE   r9   rJ   r<   rF   r2   r2   r3   test_rankingk   s    zBackendTests.test_rankingc                 C   s2   | j dtjd}|D ]}| |jt qd S )Nr:   _scorer+   r!   r   rE   Zannotate_scoreassertIsInstancer]   floatr1   rG   resultr2   r2   r3   test_annotate_scorex   s
    z BackendTests.test_annotate_scorec                 C   s:   | j dtjdd d }|D ]}| |jt q"d S )Nr:   r]   
   r^   ra   r2   r2   r3   test_annotate_score_with_slice   s    z+BackendTests.test_annotate_score_with_slicec                 C   s0   | j jdtjdd}| dd |D dg d S )NrX   andrZ   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@      rA   z9BackendTests.test_search_and_operator.<locals>.<listcomp>rC   rD   rF   r2   r2   r3   test_search_and_operator   s    z%BackendTests.test_search_and_operatorc                 C   s0   | j ttj}| t|ttjj  d S rQ   )	r+   r!   r   r   NovelrN   rO   r-   r.   rF   r2   r2   r3   test_search_on_child_class   s    z'BackendTests.test_search_on_child_classc                 C   s@   | j dtj}| dd |D g d | |d tj d S )NZWesterosc                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@      rA   zJBackendTests.test_search_child_class_field_from_parent.<locals>.<listcomp>)A Game of ThronesA Clash of KingsA Storm of Swordsr   )r+   r!   r   rE   r9   r_   rF   r2   r2   r3   )test_search_child_class_field_from_parent   s    z6BackendTests.test_search_child_class_field_from_parentc                 C   s4   | j jdtjdgdd}| dd |D dg d S )NWesteros Hobbitr<   rY   fieldsr[   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@      rA   z@BackendTests.test_search_on_individual_field.<locals>.<listcomp>
The HobbitrD   rF   r2   r2   r3   test_search_on_individual_field   s    z,BackendTests.test_search_on_individual_fieldc                 C   sJ   |  t, t| jjdtjdgdd W d    n1 s<0    Y  d S )Nrn   unknownrY   ro   assertRaisesr   rT   r+   r!   r   rE   r1   r2   r2   r3   test_search_on_unknown_field   s    z)BackendTests.test_search_on_unknown_fieldc                 C   sJ   |  t, t| jjdtjdgdd W d    n1 s<0    Y  d S )Nrn   number_of_pagesrY   ro   rt   rv   r2   r2   r3   #test_search_on_non_searchable_field   s    z0BackendTests.test_search_on_non_searchable_fieldc                 C   s.   | j dtj}| dd |D g d d S )NBilbo Bagginsc                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@      rA   z>BackendTests.test_search_on_related_fields.<locals>.<listcomp>)rq   The Fellowship of the RingThe Two TowersThe Return of the King)r+   r!   r   rh   r9   rF   r2   r2   r3   test_search_on_related_fields   s
    z*BackendTests.test_search_on_related_fieldsc                 C   sL   t | jdtj}| |d jd | dd |dd  D g d d S )Nrz   r   rq   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@      rA   zGBackendTests.test_search_boosting_on_related_fields.<locals>.<listcomp>   )r{   r|   r}   )rT   r+   r!   r   rh   rJ   r<   r9   rF   r2   r2   r3   &test_search_boosting_on_related_fields   s    z3BackendTests.test_search_boosting_on_related_fieldsc                 C   s.   | j dtj}| dd |D ddg d S )NPythonc                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@      rA   z;BackendTests.test_search_callable_field.<locals>.<listcomp>Learning PythonTwo Scoops of Django 1.11rD   rF   r2   r2   r3   test_search_callable_field   s    z'BackendTests.test_search_callable_fieldc                 C   s$   | j ttj}| t|d d S )Nr   )r+   r!   r   r   ZUnindexedBookrJ   lenrF   r2   r2   r3   test_search_all_unindexed   s    z&BackendTests.test_search_all_unindexedc                 C   s,   | j dtj}| dd |D dg d S )NZPyc                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@      rA   z2BackendTests.test_autocomplete.<locals>.<listcomp>r   r+   autocompleter   rE   r9   rF   r2   r2   r3   test_autocomplete   s    zBackendTests.test_autocompletec                 C   s,   | j dtj}| dd |D dg d S )NGeorgc                 S   s   g | ]
}|j qS r2   namer=   r2   r2   r3   r@      rA   zIBackendTests.test_autocomplete_uses_autocompletefield.<locals>.<listcomp>George R.R. Martinr+   r   r   rV   r9   rF   r2   r2   r3   (test_autocomplete_uses_autocompletefield   s    z5BackendTests.test_autocomplete_uses_autocompletefieldc                 C   s2   | j jdtjdgd}| dd |D dg d S )Nr   r   )rp   c                 S   s   g | ]
}|j qS r2   r   r=   r2   r2   r3   r@     rA   zBBackendTests.test_autocomplete_with_fields_arg.<locals>.<listcomp>r   r   rF   r2   r2   r3   !test_autocomplete_with_fields_arg  s    z.BackendTests.test_autocomplete_with_fields_argc                 C   s,   | j dtj}| dd |D dg d S )NZLearnic                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@     rA   zKBackendTests.test_autocomplete_not_affected_by_stemming.<locals>.<listcomp>r   r   rF   r2   r2   r3   *test_autocomplete_not_affected_by_stemming  s    z7BackendTests.test_autocomplete_not_affected_by_stemmingc                 C   s8   | j ttjjjdd}| dd |D ddg d S )N  rx   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   #  rA   z8BackendTests.test_filter_exact_value.<locals>.<listcomp>r}   The Rust Programming Languager+   r!   r   r   rE   r-   filterr9   rF   r2   r2   r3   test_filter_exact_value  s    z$BackendTests.test_filter_exact_valuec                 C   s6   | j ttjjjdd}| dd |D dg d S )Nr   r   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   -  rA   zNBackendTests.test_filter_exact_value_on_parent_model_field.<locals>.<listcomp>r}   )r+   r!   r   r   rh   r-   r   r9   rF   r2   r2   r3   -test_filter_exact_value_on_parent_model_field'  s    z:BackendTests.test_filter_exact_value_on_parent_model_fieldc                 C   s8   | j ttjjjdd}| dd |D g d d S )Nr   Znumber_of_pages__ltc                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   6  rA   z/BackendTests.test_filter_lt.<locals>.<listcomp>rq   rB   r{   
Foundationr|   r   rF   r2   r2   r3   test_filter_lt0  s    zBackendTests.test_filter_ltc                 C   s8   | j ttjjjdd}| dd |D g d d S )Nr   )Znumber_of_pages__ltec                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   F  rA   z0BackendTests.test_filter_lte.<locals>.<listcomp>)r}   r   rq   rB   r{   r   r|   r   rF   r2   r2   r3   test_filter_lte@  s    zBackendTests.test_filter_ltec                 C   s8   | j ttjjjdd}| dd |D g d d S )Nr   )Znumber_of_pages__gtc                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   X  rA   z/BackendTests.test_filter_gt.<locals>.<listcomp>)rC   r   rk   rj   r   rl   Programming Rustr   rF   r2   r2   r3   test_filter_gtR  s    zBackendTests.test_filter_gtc                 C   s8   | j ttjjjdd}| dd |D g d d S )Nr   )Znumber_of_pages__gtec                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   j  rA   z0BackendTests.test_filter_gte.<locals>.<listcomp>)	r}   r   rC   r   rk   rj   r   rl   r   r   rF   r2   r2   r3   test_filter_gted  s    zBackendTests.test_filter_gtec                 C   s<   | j ttjjjddgd}| dd |D g d d S )Nr     Znumber_of_pages__inc                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   ~  rA   z4BackendTests.test_filter_in_list.<locals>.<listcomp>r}   r   r   r   rF   r2   r2   r3   test_filter_in_listx  s    z BackendTests.test_filter_in_listc                 C   s@   | j ttjjjtddgd}| dd |D g d d S )Nr   r   r   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@     rA   z8BackendTests.test_filter_in_iterable.<locals>.<listcomp>r   )	r+   r!   r   r   rE   r-   r   iterr9   rF   r2   r2   r3   test_filter_in_iterable  s    z$BackendTests.test_filter_in_iterablec                 C   sR   t jjjddjddd}| jtt jjj|d}| dd |D g d	 d S )
Nr   r   rx   T)Zflatr   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@     rA   zDBackendTests.test_filter_in_values_list_subquery.<locals>.<listcomp>r   )	r   rE   r-   r   Zvalues_listr+   r!   r   r9   )r1   valuesrG   r2   r2   r3   #test_filter_in_values_list_subquery  s    z0BackendTests.test_filter_in_values_list_subqueryc                 C   s8   | j ttjjjdd}| dd |D g d d S )NTZdate_of_birth__isnullc                 S   s   g | ]
}|j qS r2   r   r=   r2   r2   r3   r@     rA   z8BackendTests.test_filter_isnull_true.<locals>.<listcomp>)
zDavid Ascherz	Mark LutzzDavid FlanaganzDouglas CrockfordzDaniel Roy GreenfeldzAudrey Roy GreenfeldzCarol NicholszSteve Klabnikz
Jim BlandyzJason Orendorffr+   r!   r   r   rV   r-   r   r9   rF   r2   r2   r3   test_filter_isnull_true  s    z$BackendTests.test_filter_isnull_truec                 C   s8   | j ttjjjdd}| dd |D g d d S )NFr   c                 S   s   g | ]
}|j qS r2   r   r=   r2   r2   r3   r@     rA   z9BackendTests.test_filter_isnull_false.<locals>.<listcomp>)zIsaac Asimovr   zJ. R. R. Tolkienr   rF   r2   r2   r3   test_filter_isnull_false  s    z%BackendTests.test_filter_isnull_falsec                 C   s8   | j ttjjjdd}| dd |D g d d S )NZTh)Ztitle__startswithc                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@     rA   z3BackendTests.test_filter_prefix.<locals>.<listcomp>)rq   r{   r|   r}   r   r   rF   r2   r2   r3   test_filter_prefix  s    zBackendTests.test_filter_prefixc              	   C   sN   | j ttjjjddtjjjtdddd@ }| dd |D d	g d S )
Nr   r   i  rd      )publication_datec                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@     rA   z9BackendTests.test_filter_and_operator.<locals>.<listcomp>r}   )	r+   r!   r   r   rE   r-   r   r   r9   rF   r2   r2   r3   test_filter_and_operator  s    z%BackendTests.test_filter_and_operatorc                 C   sH   | j ttjjjddtjjjddB }| dd |D g d d S )Nr   r   r   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@     rA   z8BackendTests.test_filter_or_operator.<locals>.<listcomp>)r   r}   r   r   rF   r2   r2   r3   test_filter_or_operator  s    z$BackendTests.test_filter_or_operatorc                 C   sL   |  t. t| jttjjj	dd W d    n1 s>0    Y  d S )NZIssac)Zname__startswith)
ru   r   rT   r+   r!   r   r   rV   r-   r   rv   r2   r2   r3   #test_filter_on_non_filterable_field  s    z0BackendTests.test_filter_on_non_filterable_fieldc                 C   s  | j ttjjjtdddd}| t	|d | j ttjjjdd}| t	|d | j ttjjjdd}| t	|d | j ttjjjd	d
}| t	|d | j ttjjjd	d}| t	|d | j ttjjjd	d}| t	|d d S )Ni     r   )Zpublication_date__gt   )Zpublication_date__year__gte   )Zpublication_date__year__gti  )Zpublication_date__year__lte)Zpublication_date__year__ltrI   )Zpublication_date__year)
r+   r!   r   r   rE   r-   r   r   rJ   r   rF   r2   r2   r3   test_search_with_date_filter  s0    z)BackendTests.test_search_with_date_filterc                 C   s:   | j jttjjddd}| dd |D g d d S )Nrx   FZorder_by_relevancec                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   %  rA   z8BackendTests.test_order_by_relevance.<locals>.<listcomp>)r   rq   r|   r{   r}   rj   rk   rl   )r+   r!   r   r   rh   r-   order_byrJ   rF   r2   r2   r3   test_order_by_relevance  s    z$BackendTests.test_order_by_relevancec                 C   sN   |  t0 t| jjttjj	ddd W d    n1 s@0    Y  d S )Nr   Fr   )
ru   r   rT   r+   r!   r   r   rV   r-   r   rv   r2   r2   r3   "test_order_by_non_filterable_field2  s    z/BackendTests.test_order_by_non_filterable_fieldc                 C   sD   | j jttjjddd}| |d jd | |d jd d S )Nrx   Fr   r   r   r   rq   )	r+   r!   r   r   rh   r-   r   rJ   r<   rF   r2   r2   r3   test_single_result>  s    zBackendTests.test_single_resultc                 C   sF   | j jttjjddd}|d d }| dd |D g d d S )Nrx   Fr      c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   T  rA   z+BackendTests.test_limit.<locals>.<listcomp>)r   rq   r|   r+   r!   r   r   rh   r-   r   r5   rF   r2   r2   r3   
test_limitH  s    zBackendTests.test_limitc                 C   sF   | j jttjjddd}|dd  }| dd |D g d d S )Nrx   Fr   r   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   c  rA   z,BackendTests.test_offset.<locals>.<listcomp>)r{   r}   rj   rk   rl   r   rF   r2   r2   r3   test_offsetW  s    zBackendTests.test_offsetc                 C   sF   | j jttjjddd}|dd }| dd |D g d d S )	Nrx   Fr   r   r   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   y  rA   z6BackendTests.test_offset_and_limit.<locals>.<listcomp>)r{   r}   rj   r   rF   r2   r2   r3   test_offset_and_limitm  s    z"BackendTests.test_offset_and_limitc                 C   sP   | j ttjj }| t|g  | j dtjj }| t|g  d S )Nr:   )	r+   r!   r   r   rE   r-   noner5   rT   rF   r2   r2   r3   test_filter_none  s    zBackendTests.test_filter_nonec                 C   s2   | j ttjd}| t|dddd d S )NZprogramming_languagerI   r   )Zjspyrs)r+   r!   r   r   ProgrammingGuidefacetZassertDictEqualdictrF   r2   r2   r3   
test_facet  s    zBackendTests.test_facetc                 C   s   g d}dg}t jjj|| dD ]D}| }|j|v rD|jd |j|v rZ|jd | j| q"| j	t j}|r|
  tjjdd}tjjdd}| jtt jd}| |t|jdfd	|jd
fg d S )N)r   rI   r   r   r   r      rd   )Zid__inZFantasyzScience Fictionr   tagsr   )Nr   r   )r   rE   r-   r   Zget_indexed_instanceidr   addr+   get_index_for_modelrefreshr   getr!   r   r   rJ   r   )r1   ZFANTASY_BOOKSZSCIFI_BOOKSZbookindexZfantasy_tagZ	scifi_tagrG   r2   r2   r3   test_facet_tags  s0    

zBackendTests.test_facet_tagsc                 C   sD   |  t& | jttjd W d    n1 s60    Y  d S )NZfoo)ru   r   r+   r!   r   r   r   r   rv   r2   r2   r3   !test_facet_with_nonexistent_field  s    z.BackendTests.test_facet_with_nonexistent_fieldc                 C   s   t  }| jtj}tdD ]8}tjjjd| tddddd}|	| |
| q|  | jdtj}t  }t|D ]"\}}|
|||d  d	  q|| || d S )
Nrd   zRank %si     d   )r<   r   rx   ZRankr   r   )rO   r+   r   r   rE   ranger-   creater   Zadd_itemr   r   r!   	enumeraterN   )r1   Zsame_rank_objectsr   iobjrG   Zresults_across_pagesr2   r2   r3   test_same_rank_pages  s     

z!BackendTests.test_same_rank_pagesc                 C   s   t jjjdd }| jt j}|r8|| |  |	  | jj
tt jjddd}|d d }| dd |D g d	 d S )
Nr   r;   rx   Fr   r   c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@     rA   z,BackendTests.test_delete.<locals>.<listcomp>)rq   r|   r{   )r   rh   r-   r   firstr+   r   Zdelete_itemr   r/   r!   r   r   rJ   )r1   Z
foundationr   rG   r2   r2   r3   test_delete  s     
zBackendTests.test_deletec                 C   s8   | j tdtjj }| dd |D ddh d S )Nr:   c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   	<setcomp>  rA   z;BackendTests.test_plain_text_single_word.<locals>.<setcomp>rC   rB   r+   r!   r   r   rE   r-   r.   rN   rF   r2   r2   r3   test_plain_text_single_word  s    z(BackendTests.test_plain_text_single_wordc                 C   s6   | j tdtjj }| dd |D t  d S )Nproc                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r     rA   z:BackendTests.test_incomplete_plain_text.<locals>.<setcomp>)	r+   r!   r   r   rE   r-   r.   rN   rO   rF   r2   r2   r3   test_incomplete_plain_text  s    z'BackendTests.test_incomplete_plain_textc                 C   s<   | j tdddtjj }| dd |D ddh d S )NrX   rY   rZ   c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r   	  rA   zABackendTests.test_plain_text_multiple_words_or.<locals>.<setcomp>rC   rB   r   rF   r2   r2   r3   !test_plain_text_multiple_words_or  s    z.BackendTests.test_plain_text_multiple_words_orc                 C   s:   | j tdddtjj }| dd |D dh d S )NzJavaScript Definitive Guiderf   rZ   c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r     rA   zBBackendTests.test_plain_text_multiple_words_and.<locals>.<setcomp>rC   r   rF   r2   r2   r3   "test_plain_text_multiple_words_and  s    

z/BackendTests.test_plain_text_multiple_words_andc                 C   s   | j tdddtjj }| dd |D dh | j tdddtjj }| dd |D dh | j jdtjj dd}| d	d |D dh | j jdtjj dd}| d
d |D dh d S )NGuideANDrZ   c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r     rA   z=BackendTests.test_plain_text_operator_case.<locals>.<setcomp>rC   ZaNdc                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r   "  rA   c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r   )  rA   c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r   0  rA   r   rF   r2   r2   r3   test_plain_text_operator_case  s0    z*BackendTests.test_plain_text_operator_casec                 C   s   |  t. | jtdddtjj  W d    n1 s>0    Y  |  t* | jjdtjj dd W d    n1 s0    Y  d S )Nr   xorrZ   )	ru   
ValueErrorr+   r!   r   r   rE   r-   r.   rv   r2   r2   r3    test_plain_text_invalid_operator3  s    "z-BackendTests.test_plain_text_invalid_operatorc                 C   s   | j tdttddB tjj }| dd |D ddg | j tdttddB tjj }| dd |D ddg d S )	NrX   r   g       @c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   E  rA   z+BackendTests.test_boost.<locals>.<listcomp>rC   g      ?c                 S   s   g | ]
}|j qS r2   r;   r=   r2   r2   r3   r@   T  rA   )	r+   r!   r   r   r   rE   r-   r.   rJ   rF   r2   r2   r3   
test_boost<  s0    

zBackendTests.test_boostc                 C   s*   | j ttjj }| t|d d S )N   )	r+   r!   r   r   rE   r-   r.   rJ   r   rF   r2   r2   r3   test_match_all[  s    zBackendTests.test_match_allc                 C   s|   | j ttdtdgtjj }| dd |D dh | j tdtd@ tjj }| dd |D dh d S )N
javascript
definitivec                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r   e  rA   z(BackendTests.test_and.<locals>.<setcomp>rC   c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r   l  rA   )	r+   r!   r   r   r   rE   r-   r.   rN   rF   r2   r2   r3   test_and_  s    
zBackendTests.test_andc                 C   s   | j ttdtdgtjj }| dd |D ddh | j tdtdB tjj }| dd |D ddh d S )NZhobbitZtowersc                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r   t  rA   z'BackendTests.test_or.<locals>.<setcomp>rq   r|   c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r   {  rA   )	r+   r!   r   r   r   rE   r-   r.   rN   rF   r2   r2   r3   test_oro  s    zBackendTests.test_orc                 C   s   h d}| j ttdtjj }| dd |D | | j td tjj }| dd |D | | j td tjj }| dd |D | d S )N>   r   r   r   r   rq   r|   r{   rk   rj   r   rl   r}   r   c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r     rA   z(BackendTests.test_not.<locals>.<setcomp>c                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r     rA   zjavascript thec                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r     rA   )	r+   r!   r   r   r   rE   r-   r.   rN   )r1   Zall_other_titlesrG   r2   r2   r3   test_not~  s    zBackendTests.test_notc                 C   sZ   | j tdtd @ tdB tdB tdB tjj }| dd |D h d d S )	Nr   r   pythonZrustZtwoc                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r     rA   z:BackendTests.test_operators_combination.<locals>.<setcomp>>   r   r   r   rB   r   r|   r   rF   r2   r2   r3   test_operators_combination  s    
	z'BackendTests.test_operators_combinationc                 C   sh   | j tdtjj }| dd |D dh | j tdtjj }| dd |D dh d S )Nzrust programmingc                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r     rA   z+BackendTests.test_phrase.<locals>.<setcomp>r   zprogramming rustc                 S   s   h | ]
}|j qS r2   r;   r=   r2   r2   r3   r     rA   r   )r+   r!   r   r   rE   r-   r.   rN   rF   r2   r2   r3   test_phrase  s    zBackendTests.test_phrasec                 C   s,   t  }tjdd| j|d | |  d S )Nr#   r   )	verbosityr%   r&   )r   r   r0   r%   rS   getvalue)r1   r&   r2   r2   r3   test_update_index_no_verbosity  s
    
z+BackendTests.test_update_index_no_verbosityN)G__name__
__module____qualname__Zfixturesr4   r9   rH   rL   rP   rR   rU   rW   r\   rc   re   rg   ri   rm   rr   rw   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r2   r2   r3   r    %   s   					
	!
		"%				r    defaultr"    wagtail.search.backends.databaser(   c                   @   s  e Zd Zeddd Zeddd Zeddd Ze	e
jdkd	d
d Ze	e
jdkd	dd Ze	e
jdkd	dd Ze	e
jdkddd Ze	e
jdkddd Ze	e
jdkddd Ze	e
jdkddd Ze	e
jdkddd Ze	e
jdkddd Zd d! Zd"d# Zd$d% Zei d&d'd( Zed)d*id)d*id+d&d,d- Zd.d/ Zed0d*d1d2id&d3d4 Zed0d*d1d2id&d5d6 Zd7S )8TestBackendLoaderz+wagtail.search.backends.database.connectionc                 C   s    d|_ tdd}| |t d S )Nrs   r   r+   vendorr   r_   r   r1   r   dbr2   r2   r3   %test_import_by_name_unknown_db_vendor  s    
z7TestBackendLoader.test_import_by_name_unknown_db_vendorc                 C   s    d|_ tdd}| |t d S )Nrs   r   r   r   r  r2   r2   r3   %test_import_by_path_unknown_db_vendor  s    
z7TestBackendLoader.test_import_by_path_unknown_db_vendorc                 C   s    d|_ tdd}| |t d S )Nrs   .wagtail.search.backends.database.SearchBackendr   r   r  r2   r2   r3   *test_import_by_full_path_unknown_db_vendor  s
    z<TestBackendLoader.test_import_by_full_path_unknown_db_vendorZ
postgresqlz.Only applicable to PostgreSQL database systemsc                 C   s&   ddl m} tdd}| || d S )Nr   PostgresSearchBackendr   r   Z2wagtail.search.backends.database.postgres.postgresr	  r   r_   r1   r	  r  r2   r2   r3   &test_import_by_name_postgres_db_vendor  s    
z8TestBackendLoader.test_import_by_name_postgres_db_vendorc                 C   s&   ddl m} tdd}| || d S )Nr   r  r   r   r
  r  r2   r2   r3   &test_import_by_path_postgres_db_vendor  s    
z8TestBackendLoader.test_import_by_path_postgres_db_vendorc                 C   s&   ddl m} tdd}| || d S )Nr   r  r  r   r
  r  r2   r2   r3   +test_import_by_full_path_postgres_db_vendor  s
    z=TestBackendLoader.test_import_by_full_path_postgres_db_vendorZmysqlz)Only applicable to MySQL database systemsc                 C   s&   ddl m} tdd}| || d S )Nr   MySQLSearchBackendr   r   Z,wagtail.search.backends.database.mysql.mysqlr  r   r_   r1   r  r  r2   r2   r3   #test_import_by_name_mysql_db_vendor  s    
z5TestBackendLoader.test_import_by_name_mysql_db_vendorc                 C   s&   ddl m} tdd}| || d S )Nr   r  r   r   r  r  r2   r2   r3   #test_import_by_path_mysql_db_vendor  s    
z5TestBackendLoader.test_import_by_path_mysql_db_vendorc                 C   s&   ddl m} tdd}| || d S )Nr   r  r  r   r  r  r2   r2   r3   (test_import_by_full_path_mysql_db_vendor  s
    z:TestBackendLoader.test_import_by_full_path_mysql_db_vendorZsqlitez*Only applicable to SQLite database systemsc                 C   sP   t  s*ddlm} tdd}| || n"ddlm} tdd}| || d S )Nr   r   r   r   SQLiteSearchBackendr   )wagtail.search.backends.database.fallbackr   r   r_   Z.wagtail.search.backends.database.sqlite.sqliter  r1   r   r  r  r2   r2   r3   $test_import_by_name_sqlite_db_vendor#  s    

z6TestBackendLoader.test_import_by_name_sqlite_db_vendorc                 C   sP   t  s*ddlm} tdd}| || n"ddlm} tdd}| || d S )Nr   r   r   r   r  r  r  r2   r2   r3   $test_import_by_path_sqlite_db_vendor5  s    

z6TestBackendLoader.test_import_by_path_sqlite_db_vendorc                 C   sP   t  s*ddlm} tdd}| || n"ddlm} tdd}| || d S )Nr   r   r  r   r  r  r  r2   r2   r3   )test_import_by_full_path_sqlite_db_vendorG  s    z;TestBackendLoader.test_import_by_full_path_sqlite_db_vendorc                 C   s   | j ttdd d S )Nz#wagtail.search.backends.doesntexistr   ru   r   r   rv   r2   r2   r3   test_nonexistent_backend_import]  s
    z1TestBackendLoader.test_nonexistent_backend_importc                 C   s   | j ttdd d S )NzI'm not a backend!r   r  rv   r2   r2   r3   test_invalid_backend_importd  s    z-TestBackendLoader.test_invalid_backend_importc                 C   s8   t t }| t|d tt|d ts4|   d S Nr   r   rT   r   rJ   r   
issubclasstyper   Zfailr1   backendsr2   r2   r3   test_get_search_backendsi  s    
z*TestBackendLoader.test_get_search_backendsr   c                 C   s8   t t }| t|d tt|d ts4|   d S r!  r"  r%  r2   r2   r3   0test_get_search_backends_with_no_default_definedp  s    
zBTestBackendLoader.test_get_search_backends_with_no_default_definedr"   r   )r   zanother-backendc                 C   s   t t }| t|d d S )NrI   rT   r   rJ   r   r%  r2   r2   r3   !test_get_search_backends_multiplex  s    
z3TestBackendLoader.test_get_search_backends_multiplec                 C   s"   t tdd}| t|d d S )NTZwith_auto_updater   r)  r%  r2   r2   r3   )test_get_search_backends_with_auto_update  s    z;TestBackendLoader.test_get_search_backends_with_auto_updater   F)r"   ZAUTO_UPDATEc                 C   s"   t tdd}| t|d d S )NTr+  r   r)  r%  r2   r2   r3   2test_get_search_backends_with_auto_update_disabled  s    	zDTestBackendLoader.test_get_search_backends_with_auto_update_disabledc                 C   s   t t }| t|d d S )Nr   r)  r%  r2   r2   r3   5test_get_search_backends_without_auto_update_disabled  s    	
zGTestBackendLoader.test_get_search_backends_without_auto_update_disabledN)r   r   r   r   patchr  r  r  r,   ZskipIfr   r  r  r  r  r  r  r  r  r  r  r  r   r'  r
   r(  r*  r,  r-  r.  r2   r2   r2   r3   r     s   





















r   )1r,   collectionsr   datetimer   ior   r   Zdjango.confr   Zdjango.corer   Z	django.dbr   Zdjango.testr	   Zdjango.test.utilsr
   Ztaggit.modelsr   Zwagtail.search.backendsr   r   r   Zwagtail.search.backends.baser   r   r   r  r   Z-wagtail.search.backends.database.sqlite.utilsr   Zwagtail.search.modelsr   Zwagtail.search.queryr   r   r   r   r   r   r   r   Zwagtail.test.searchr   Zwagtail.test.utilsr   r    r   r2   r2   r2   r3   <module>   s<   (
       *
