o
    h                     @   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|| _|| _ n	q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%   unittestSkipTestr   objectsalldeleter   call_commandr   )selfr%   backend_conf r4   b/var/www/html/ndineBlogger/venv/lib/python3.10/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)r2   abr4   r4   r5   assertUnsortedListEqualA   s   z$BackendTests.assertUnsortedListEqualc                 C   .   | j dtj}| dd |D ddg d S )N
JavaScriptc                 S      g | ]}|j qS r4   title.0rr4   r4   r5   
<listcomp>O       z3BackendTests.test_search_simple.<locals>.<listcomp>JavaScript: The good parts JavaScript: The Definitive Guider+   r!   r   Bookr;   r2   resultsr4   r4   r5   test_search_simpleL   s
   zBackendTests.test_search_simplec                 C   s$   | j dtj}| | d d S )Nr=      )r+   r!   r   rI   assertEqualcountrJ   r4   r4   r5   test_search_countS   s   zBackendTests.test_search_countc                 C   &   | j dtj}| t|t  d S )N )r+   r!   r   rI   assertSetEqualsetrJ   r4   r4   r5   test_search_blankW   s   zBackendTests.test_search_blankc                 C   0   | j ttj}| t|ttjj  d S N)	r+   r!   r   r   rI   rS   rT   r.   r/   rJ   r4   r4   r5   test_search_all\   s    zBackendTests.test_search_allc                 C   s"   | j ttj}| t| d S rW   )r+   r!   r   r   rI   assertFalselistrJ   r4   r4   r5   test_search_none`   s   zBackendTests.test_search_nonec                 C   rQ   )Nthrones)r+   r!   r   AuthorrS   rT   rJ   r4   r4   r5   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   r>   r4   r?   rA   r4   r4   r5   rD   q   rE   z-BackendTests.test_ranking.<locals>.<listcomp>rF   rG   r   )rZ   r+   r!   r   rI   r;   rN   r@   rJ   r4   r4   r5   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   rI   annotate_scoreassertIsInstancerd   floatr2   rK   resultr4   r4   r5   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=   rd   
   re   ri   r4   r4   r5   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 )Nr_   andra   c                 S   r>   r4   r?   rA   r4   r4   r5   rD      rE   z9BackendTests.test_search_and_operator.<locals>.<listcomp>rG   rH   rJ   r4   r4   r5   test_search_and_operator   s   z%BackendTests.test_search_and_operatorc                 C   rV   rW   )	r+   r!   r   r   NovelrS   rT   r.   r/   rJ   r4   r4   r5   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 )NWesterosc                 S   r>   r4   r?   rA   r4   r4   r5   rD      rE   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   rI   r;   rg   rJ   r4   r4   r5   )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@   r`   fieldsrb   c                 S   r>   r4   r?   rA   r4   r4   r5   rD      rE   z@BackendTests.test_search_on_individual_field.<locals>.<listcomp>
The HobbitrH   rJ   r4   r4   r5   test_search_on_individual_field   s   z,BackendTests.test_search_on_individual_fieldc                 C   L   |  t t| jjdtjdgdd W d    d S 1 sw   Y  d S )Nrw   unknownr`   rx   assertRaisesr   rZ   r+   r!   r   rI   r2   r4   r4   r5   test_search_on_unknown_field   s   "z)BackendTests.test_search_on_unknown_fieldc                 C   r|   )Nrw   number_of_pagesr`   rx   r~   r   r4   r4   r5   #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   r>   r4   r?   rA   r4   r4   r5   rD      rE   z>BackendTests.test_search_on_related_fields.<locals>.<listcomp>)rz   The Fellowship of the RingThe Two TowersThe Return of the King)r+   r!   r   rp   r;   rJ   r4   r4   r5   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 )Nr   r   rz   c                 S   r>   r4   r?   rA   r4   r4   r5   rD      rE   zGBackendTests.test_search_boosting_on_related_fields.<locals>.<listcomp>   )r   r   r   )rZ   r+   r!   r   rp   rN   r@   r;   rJ   r4   r4   r5   &test_search_boosting_on_related_fields   s   z3BackendTests.test_search_boosting_on_related_fieldsc                 C   r<   )NPythonc                 S   r>   r4   r?   rA   r4   r4   r5   rD      rE   z;BackendTests.test_search_callable_field.<locals>.<listcomp>Learning PythonTwo Scoops of Django 1.11rH   rJ   r4   r4   r5   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   UnindexedBookrN   lenrJ   r4   r4   r5   test_search_all_unindexed   s   z&BackendTests.test_search_all_unindexedc                 C   ,   | j dtj}| dd |D dg d S )NPyc                 S   r>   r4   r?   rA   r4   r4   r5   rD      rE   z2BackendTests.test_autocomplete.<locals>.<listcomp>r   r+   autocompleter   rI   r;   rJ   r4   r4   r5   test_autocomplete   s   zBackendTests.test_autocompletec                 C   r   )NGeorgc                 S   r>   r4   namerA   r4   r4   r5   rD      rE   zIBackendTests.test_autocomplete_uses_autocompletefield.<locals>.<listcomp>George R.R. Martinr+   r   r   r]   r;   rJ   r4   r4   r5   (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   )ry   c                 S   r>   r4   r   rA   r4   r4   r5   rD     rE   zBBackendTests.test_autocomplete_with_fields_arg.<locals>.<listcomp>r   r   rJ   r4   r4   r5   !test_autocomplete_with_fields_arg  s   z.BackendTests.test_autocomplete_with_fields_argc                 C   r   )NLearnic                 S   r>   r4   r?   rA   r4   r4   r5   rD     rE   zKBackendTests.test_autocomplete_not_affected_by_stemming.<locals>.<listcomp>r   r   rJ   r4   r4   r5   *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  r   c                 S   r>   r4   r?   rA   r4   r4   r5   rD   #  rE   z8BackendTests.test_filter_exact_value.<locals>.<listcomp>r   The Rust Programming Languager+   r!   r   r   rI   r.   filterr;   rJ   r4   r4   r5   test_filter_exact_value     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   r>   r4   r?   rA   r4   r4   r5   rD   -  rE   zNBackendTests.test_filter_exact_value_on_parent_model_field.<locals>.<listcomp>r   )r+   r!   r   r   rp   r.   r   r;   rJ   r4   r4   r5   -test_filter_exact_value_on_parent_model_field'  s   z:BackendTests.test_filter_exact_value_on_parent_model_fieldc                 C   8   | j ttjjjdd}| dd |D g d d S )Nr   number_of_pages__ltc                 S   r>   r4   r?   rA   r4   r4   r5   rD   6  rE   z/BackendTests.test_filter_lt.<locals>.<listcomp>rz   rF   r   
Foundationr   r   rJ   r4   r4   r5   test_filter_lt0  r   zBackendTests.test_filter_ltc                 C   r   )Nr   )number_of_pages__ltec                 S   r>   r4   r?   rA   r4   r4   r5   rD   F  rE   z0BackendTests.test_filter_lte.<locals>.<listcomp>)r   r   rz   rF   r   r   r   r   rJ   r4   r4   r5   test_filter_lte@  r   zBackendTests.test_filter_ltec                 C   r   )Nr   )number_of_pages__gtc                 S   r>   r4   r?   rA   r4   r4   r5   rD   X  rE   z/BackendTests.test_filter_gt.<locals>.<listcomp>)rG   r   rt   rs   r   ru   Programming Rustr   rJ   r4   r4   r5   test_filter_gtR  r   zBackendTests.test_filter_gtc                 C   r   )Nr   )number_of_pages__gtec                 S   r>   r4   r?   rA   r4   r4   r5   rD   j  rE   z0BackendTests.test_filter_gte.<locals>.<listcomp>)	r   r   rG   r   rt   rs   r   ru   r   r   rJ   r4   r4   r5   test_filter_gted  r   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     number_of_pages__inc                 S   r>   r4   r?   rA   r4   r4   r5   rD   ~  rE   z4BackendTests.test_filter_in_list.<locals>.<listcomp>r   r   r   r   rJ   r4   r4   r5   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   r>   r4   r?   rA   r4   r4   r5   rD     rE   z8BackendTests.test_filter_in_iterable.<locals>.<listcomp>r   )	r+   r!   r   r   rI   r.   r   iterr;   rJ   r4   r4   r5   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   r   T)flatr   c                 S   r>   r4   r?   rA   r4   r4   r5   rD     rE   zDBackendTests.test_filter_in_values_list_subquery.<locals>.<listcomp>r   )	r   rI   r.   r   values_listr+   r!   r   r;   )r2   valuesrK   r4   r4   r5   #test_filter_in_values_list_subquery  s   z0BackendTests.test_filter_in_values_list_subqueryc                 C   r   )NTdate_of_birth__isnullc                 S   r>   r4   r   rA   r4   r4   r5   rD     rE   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   r]   r.   r   r;   rJ   r4   r4   r5   test_filter_isnull_true     z$BackendTests.test_filter_isnull_truec                 C   r   )NFr   c                 S   r>   r4   r   rA   r4   r4   r5   rD     rE   z9BackendTests.test_filter_isnull_false.<locals>.<listcomp>)zIsaac Asimovr   zJ. R. R. Tolkienr   rJ   r4   r4   r5   test_filter_isnull_false  r   z%BackendTests.test_filter_isnull_falsec                 C   r   )NTh)title__startswithc                 S   r>   r4   r?   rA   r4   r4   r5   rD     rE   z3BackendTests.test_filter_prefix.<locals>.<listcomp>)rz   r   r   r   r   r   rJ   r4   r4   r5   test_filter_prefix  r   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  rl      )publication_datec                 S   r>   r4   r?   rA   r4   r4   r5   rD     rE   z9BackendTests.test_filter_and_operator.<locals>.<listcomp>r   )	r+   r!   r   r   rI   r.   r   r   r;   rJ   r4   r4   r5   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   r>   r4   r?   rA   r4   r4   r5   rD     rE   z8BackendTests.test_filter_or_operator.<locals>.<listcomp>)r   r   r   r   rJ   r4   r4   r5   test_filter_or_operator  s   z$BackendTests.test_filter_or_operatorc                 C   sN   |  t t| jttjjj	dd W d    d S 1 s w   Y  d S )NIssac)name__startswith)
r   r   rZ   r+   r!   r   r   r]   r.   r   r   r4   r4   r5   #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   )publication_date__gt   )publication_date__year__gte   )publication_date__year__gti  )publication_date__year__lte)publication_date__year__ltrM   )publication_date__year)
r+   r!   r   r   rI   r.   r   r   rN   r   rJ   r4   r4   r5   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 )Nr   Forder_by_relevancec                 S   r>   r4   r?   rA   r4   r4   r5   rD   %  rE   z8BackendTests.test_order_by_relevance.<locals>.<listcomp>)r   rz   r   r   r   rs   rt   ru   )r+   r!   r   r   rp   r.   order_byrN   rJ   r4   r4   r5   test_order_by_relevance  s   z$BackendTests.test_order_by_relevancec                 C   sP   |  t t| jjttjj	ddd W d    d S 1 s!w   Y  d S )Nr   Fr   )
r   r   rZ   r+   r!   r   r   r]   r.   r   r   r4   r4   r5   "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 )Nr   Fr   r   r   r   rz   )	r+   r!   r   r   rp   r.   r   rN   r@   rJ   r4   r4   r5   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 )Nr   Fr      c                 S   r>   r4   r?   rA   r4   r4   r5   rD   T  rE   z+BackendTests.test_limit.<locals>.<listcomp>)r   rz   r   r+   r!   r   r   rp   r.   r   r7   rJ   r4   r4   r5   
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 )Nr   Fr   r   c                 S   r>   r4   r?   rA   r4   r4   r5   rD   c  rE   z,BackendTests.test_offset.<locals>.<listcomp>)r   r   rs   rt   ru   r   rJ   r4   r4   r5   test_offsetW     zBackendTests.test_offsetc                 C   sF   | j jttjjddd}|dd }| dd |D g d d S )	Nr   Fr   r   r   c                 S   r>   r4   r?   rA   r4   r4   r5   rD   y  rE   z6BackendTests.test_offset_and_limit.<locals>.<listcomp>)r   r   rs   r   rJ   r4   r4   r5   test_offset_and_limitm  r   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   rI   r.   noner7   rZ   rJ   r4   r4   r5   test_filter_none  s   zBackendTests.test_filter_nonec                 C   s2   | j ttjd}| t|dddd d S )Nprogramming_languagerM   r   )jspyrs)r+   r!   r   r   ProgrammingGuidefacetassertDictEqualdictrJ   r4   r4   r5   
test_facet  s   zBackendTests.test_facetc                 C   s   g d}dg}t jjj|| dD ]"}| }|j|v r"|jd |j|v r-|jd | j| q| j	t j}|rA|
  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   rM   r   r   r   r      rl   )id__inFantasyzScience Fictionr   tagsr   )Nr   r   )r   rI   r.   r   get_indexed_instanceidr   addr+   get_index_for_modelrefreshr   getr!   r   r   rN   r   )r2   FANTASY_BOOKSSCIFI_BOOKSbookindexfantasy_tag	scifi_tagrK   r4   r4   r5   test_facet_tags  s0   

zBackendTests.test_facet_tagsc                 C   sF   |  t | jttjd W d    d S 1 sw   Y  d S )Nfoo)r   r   r+   r!   r   r   r   r   r   r4   r4   r5   !test_facet_with_nonexistent_field  s   "z.BackendTests.test_facet_with_nonexistent_fieldc                 C   s   t  }| jtj}tdD ]}tjjjd| tddddd}|	| |
| q|  | jdtj}t  }t|D ]\}}|
|||d  d	  q>| || d S )
Nrl   zRank %si     d   )r@   r   r   Rankr   r   )rT   r+   r   r   rI   ranger.   creater   add_itemr   r   r!   	enumeraterS   )r2   same_rank_objectsr   iobjrK   results_across_pagesr4   r4   r5   test_same_rank_pages  s    

z!BackendTests.test_same_rank_pagesc                 C   s   t jjjdd }| jt j}|r|| |  |	  | jj
tt jjddd}|d d }| dd |D g d	 d S )
Nr   r?   r   Fr   r   c                 S   r>   r4   r?   rA   r4   r4   r5   rD     rE   z,BackendTests.test_delete.<locals>.<listcomp>)rz   r   r   )r   rp   r.   r   firstr+   r   delete_itemr   r0   r!   r   r   rN   )r2   
foundationr   rK   r4   r4   r5   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      h | ]}|j qS r4   r?   rA   r4   r4   r5   	<setcomp>  rE   z;BackendTests.test_plain_text_single_word.<locals>.<setcomp>rG   rF   r+   r!   r   r   rI   r.   r/   rS   rJ   r4   r4   r5   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   r  r4   r?   rA   r4   r4   r5   r    rE   z:BackendTests.test_incomplete_plain_text.<locals>.<setcomp>)	r+   r!   r   r   rI   r.   r/   rS   rT   rJ   r4   r4   r5   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 )Nr_   r`   ra   c                 S   r  r4   r?   rA   r4   r4   r5   r  	  rE   zABackendTests.test_plain_text_multiple_words_or.<locals>.<setcomp>rG   rF   r  rJ   r4   r4   r5   !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 Guidern   ra   c                 S   r  r4   r?   rA   r4   r4   r5   r    rE   zBBackendTests.test_plain_text_multiple_words_and.<locals>.<setcomp>rG   r  rJ   r4   r4   r5   "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ANDra   c                 S   r  r4   r?   rA   r4   r4   r5   r    rE   z=BackendTests.test_plain_text_operator_case.<locals>.<setcomp>rG   aNdc                 S   r  r4   r?   rA   r4   r4   r5   r  "  rE   c                 S   r  r4   r?   rA   r4   r4   r5   r  )  rE   c                 S   r  r4   r?   rA   r4   r4   r5   r  0  rE   r  rJ   r4   r4   r5   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w   Y  |  t | jjdtjj dd W d    d S 1 sBw   Y  d S )Nr  xorra   )	r   
ValueErrorr+   r!   r   r   rI   r.   r/   r   r4   r4   r5    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 )	Nr_   r   g       @c                 S   r>   r4   r?   rA   r4   r4   r5   rD   E  rE   z+BackendTests.test_boost.<locals>.<listcomp>rG   g      ?c                 S   r>   r4   r?   rA   r4   r4   r5   rD   T  rE   )	r+   r!   r   r   r   rI   r.   r/   rN   rJ   r4   r4   r5   
test_boost<  s0   

zBackendTests.test_boostc                 C   s*   | j ttjj }| t|d d S )N   )	r+   r!   r   r   rI   r.   r/   rN   r   rJ   r4   r4   r5   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   r  r4   r?   rA   r4   r4   r5   r  e  rE   z(BackendTests.test_and.<locals>.<setcomp>rG   c                 S   r  r4   r?   rA   r4   r4   r5   r  l  rE   )	r+   r!   r   r   r   rI   r.   r/   rS   rJ   r4   r4   r5   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 )Nhobbittowersc                 S   r  r4   r?   rA   r4   r4   r5   r  t  rE   z'BackendTests.test_or.<locals>.<setcomp>rz   r   c                 S   r  r4   r?   rA   r4   r4   r5   r  {  rE   )	r+   r!   r   r   r   rI   r.   r/   rS   rJ   r4   r4   r5   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   rz   r   r   rt   r   rs   ru   r   r   r   r   r&  c                 S   r  r4   r?   rA   r4   r4   r5   r    rE   z(BackendTests.test_not.<locals>.<setcomp>c                 S   r  r4   r?   rA   r4   r4   r5   r    rE   zjavascript thec                 S   r  r4   r?   rA   r4   r4   r5   r    rE   )	r+   r!   r   r   r   rI   r.   r/   rS   )r2   all_other_titlesrK   r4   r4   r5   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'  pythonrusttwoc                 S   r  r4   r?   rA   r4   r4   r5   r    rE   z:BackendTests.test_operators_combination.<locals>.<setcomp>>   r   r   r   r   rF   r   r  rJ   r4   r4   r5   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   r  r4   r?   rA   r4   r4   r5   r    rE   z+BackendTests.test_phrase.<locals>.<setcomp>r   zprogramming rustc                 S   r  r4   r?   rA   r4   r4   r5   r    rE   r   )r+   r!   r   r   rI   r.   r/   rS   rJ   r4   r4   r5   test_phrase  s   zBackendTests.test_phrasec                 C   s,   t  }tjdd| j|d | |  d S )Nr#   r   )	verbosityr%   r&   )r   r   r1   r%   rY   getvalue)r2   r&   r4   r4   r5   test_update_index_no_verbosity  s
   
z+BackendTests.test_update_index_no_verbosityN)G__name__
__module____qualname__fixturesr6   r;   rL   rP   rU   rX   r[   r^   rc   rk   rm   ro   rq   rv   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-  r1  r2  r5  r4   r4   r4   r5   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       d|_ tdd}| |t d S )Nr}   r:  r+   vendorr   rg   r   r2   r   dbr4   r4   r5   %test_import_by_name_unknown_db_vendor     
z7TestBackendLoader.test_import_by_name_unknown_db_vendorc                 C   r>  )Nr}   r;  r?  r@  rB  r4   r4   r5   %test_import_by_path_unknown_db_vendor  rE  z7TestBackendLoader.test_import_by_path_unknown_db_vendorc                 C   r>  )Nr}   .wagtail.search.backends.database.SearchBackendr?  r@  rB  r4   r4   r5   *test_import_by_full_path_unknown_db_vendor  s
   z<TestBackendLoader.test_import_by_full_path_unknown_db_vendor
postgresqlz.Only applicable to PostgreSQL database systemsc                 C   &   ddl m} tdd}| || d S )Nr   PostgresSearchBackendr:  r?  2wagtail.search.backends.database.postgres.postgresrL  r   rg   r2   rL  rC  r4   r4   r5   &test_import_by_name_postgres_db_vendor     
z8TestBackendLoader.test_import_by_name_postgres_db_vendorc                 C   rJ  )Nr   rK  r;  r?  rM  rO  r4   r4   r5   &test_import_by_path_postgres_db_vendor  rQ  z8TestBackendLoader.test_import_by_path_postgres_db_vendorc                 C   rJ  )Nr   rK  rG  r?  rM  rO  r4   r4   r5   +test_import_by_full_path_postgres_db_vendor  s
   z=TestBackendLoader.test_import_by_full_path_postgres_db_vendormysqlz)Only applicable to MySQL database systemsc                 C   rJ  )Nr   MySQLSearchBackendr:  r?  ,wagtail.search.backends.database.mysql.mysqlrV  r   rg   r2   rV  rC  r4   r4   r5   #test_import_by_name_mysql_db_vendor     
z5TestBackendLoader.test_import_by_name_mysql_db_vendorc                 C   rJ  )Nr   rU  r;  r?  rW  rY  r4   r4   r5   #test_import_by_path_mysql_db_vendor  r[  z5TestBackendLoader.test_import_by_path_mysql_db_vendorc                 C   rJ  )Nr   rU  rG  r?  rW  rY  r4   r4   r5   (test_import_by_full_path_mysql_db_vendor  s
   z:TestBackendLoader.test_import_by_full_path_mysql_db_vendorsqlitez*Only applicable to SQLite database systemsc                 C   R   t  sddlm} tdd}| || d S ddlm} tdd}| || d S )Nr   r   r:  r?  SQLiteSearchBackendr   )wagtail.search.backends.database.fallbackr   r   rg   .wagtail.search.backends.database.sqlite.sqlitera  r2   r   rC  ra  r4   r4   r5   $test_import_by_name_sqlite_db_vendor#     

z6TestBackendLoader.test_import_by_name_sqlite_db_vendorc                 C   r_  )Nr   r   r;  r?  r`  rb  re  r4   r4   r5   $test_import_by_path_sqlite_db_vendor5  rg  z6TestBackendLoader.test_import_by_path_sqlite_db_vendorc                 C   r_  )Nr   r   rG  r?  r`  rb  re  r4   r4   r5   )test_import_by_full_path_sqlite_db_vendorG  s   z;TestBackendLoader.test_import_by_full_path_sqlite_db_vendorc                 C      | j ttdd d S )Nz#wagtail.search.backends.doesntexistr?  r   r   r   r   r4   r4   r5   test_nonexistent_backend_import]  s
   
z1TestBackendLoader.test_nonexistent_backend_importc                 C   rj  )NzI'm not a backend!r?  rk  r   r4   r4   r5   test_invalid_backend_importd  s   
z-TestBackendLoader.test_invalid_backend_importc                 C   <   t t }| t|d tt|d ts|   d S d S Nr   r   rZ   r   rN   r   
issubclasstyper   failr2   backendsr4   r4   r5   test_get_search_backendsi  s
   
z*TestBackendLoader.test_get_search_backendsr<  c                 C   rn  ro  rp  rt  r4   r4   r5   0test_get_search_backends_with_no_default_definedp  s
   
zBTestBackendLoader.test_get_search_backends_with_no_default_definedr"   r;  )r:  zanother-backendc                 C      t t }| t|d d S )NrM   rZ   r   rN   r   rt  r4   r4   r5   !test_get_search_backends_multiplex  s   
z3TestBackendLoader.test_get_search_backends_multiplec                 C   "   t tdd}| t|d d S )NTwith_auto_updater   ry  rt  r4   r4   r5   )test_get_search_backends_with_auto_update  s   z;TestBackendLoader.test_get_search_backends_with_auto_updater:  F)r"   AUTO_UPDATEc                 C   r{  )NTr|  r   ry  rt  r4   r4   r5   2test_get_search_backends_with_auto_update_disabled  s   	zDTestBackendLoader.test_get_search_backends_with_auto_update_disabledc                 C   rx  )Nr   ry  rt  r4   r4   r5   5test_get_search_backends_without_auto_update_disabled  s   
	zGTestBackendLoader.test_get_search_backends_without_auto_update_disabledN)r6  r7  r8  r   patchrD  rF  rH  r,   skipIfr   rA  rP  rR  rS  rZ  r\  r]  rf  rh  ri  rl  rm  rv  r
   rw  rz  r~  r  r  r4   r4   r4   r5   r=    s    







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