U
    |h                     @   s\   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ G dd de	Zd	S )
    )date)StringIO)
management)	MATCH_ALL)BackendTests)modelsc                   @   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 )"%ElasticsearchCommonSearchBackendTestsc                 C   s   | j dtj}t| d S )Nz   )backendsearchr   Booklistselfresults r   w/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/search/tests/elasticsearch_common_tests.pytest_search_with_spaces_only   s    zBElasticsearchCommonSearchBackendTests.test_search_with_spaces_onlyc              	   C   sD   ddl m} | |$ t| jdtjjj	dd W 5 Q R X dS )zR
        Not all lookup types are supported by the Elasticsearch backends
        r   FilterErrorHellozh(ea)llo)Ztitle__iregexN)
wagtail.search.backends.baser   assertRaisesr   r	   r
   r   r   objectsfilter)r   r   r   r   r   (test_filter_with_unsupported_lookup_type   s     zNElasticsearchCommonSearchBackendTests.test_filter_with_unsupported_lookup_typec                 C   s.   | j dtj}| dd |D ddg d S )NJavac                 S   s   g | ]
}|j qS r   title.0rr   r   r   
<listcomp>&   s     zMElasticsearchCommonSearchBackendTests.test_partial_search.<locals>.<listcomp> JavaScript: The Definitive GuideJavaScript: The good partsr	   autocompleter   r   assertUnsortedListEqualr   r   r   r   test_partial_search"   s
    z9ElasticsearchCommonSearchBackendTests.test_partial_searchc                 C   s*   | j dtj}| dd |D g  d S )Nr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r!   -   s     zVElasticsearchCommonSearchBackendTests.test_disabled_partial_search.<locals>.<listcomp>r	   r
   r   r   r&   r   r   r   r   test_disabled_partial_search*   s    zBElasticsearchCommonSearchBackendTests.test_disabled_partial_searchc                 C   s.   | j dtj}| dd |D ddg d S )N
JavaScriptc                 S   s   g | ]
}|j qS r   r   r   r   r   r   r!   5   s     zfElasticsearchCommonSearchBackendTests.test_disabled_partial_search_with_whole_term.<locals>.<listcomp>r"   r#   r(   r   r   r   r   ,test_disabled_partial_search_with_whole_term/   s
    zRElasticsearchCommonSearchBackendTests.test_disabled_partial_search_with_whole_termc                 C   s0   | j dtj}| dd |D dddg d S )NZWesc                 S   s   g | ]
}|j qS r   r   r   r   r   r   r!   >   s     zSElasticsearchCommonSearchBackendTests.test_child_partial_search.<locals>.<listcomp>zA Game of ThroneszA Storm of SwordszA Clash of Kingsr$   r   r   r   r   test_child_partial_search9   s
    z?ElasticsearchCommonSearchBackendTests.test_child_partial_searchc                 C   sh   t jjjdtddddd}| jt j}|| |  | j	dt j}| 
dd	 |D dg d S )
Nu   Ĥéllø  
         r   Zpublication_dateZnumber_of_pagesr   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r!   M   s     zLElasticsearchCommonSearchBackendTests.test_ascii_folding.<locals>.<listcomp>)r   r   r   creater   r	   get_index_for_modeladd_itemrefreshr%   r&   r   bookindexr   r   r   r   test_ascii_foldingB   s     
 
z8ElasticsearchCommonSearchBackendTests.test_ascii_foldingc                 C   sV   | j dtj}| dd |D ddg | j dtj}| dd |D t  d S )	Nr*   c                 S   s   g | ]
}|j qS r   r   r   r   r   r   r!   T   s     zMElasticsearchCommonSearchBackendTests.test_query_analyser.<locals>.<listcomp>r"   r#   Z	JavaBeansc                 S   s   h | ]
}|j qS r   r   r   r   r   r   	<setcomp>Z   s     zLElasticsearchCommonSearchBackendTests.test_query_analyser.<locals>.<setcomp>)r	   r
   r   r   r&   assertSetEqualsetr   r   r   r   test_query_analyserO   s    z9ElasticsearchCommonSearchBackendTests.test_query_analyserc                 C   sh   t jjjdtddddd}| jt j}|| |  | j	dt j}| 
dd	 |D dg d
S )z
        This tests that punctuation characters are treated the same
        way in both indexing and querying.

        See: https://github.com/wagtail/wagtail/issues/937
        z&Harry Potter and the Half-Blood Princei        i_  r1   z
Half-Bloodc                 S   s   g | ]
}|j qS r   r   r   r   r   r   r!   o   s     zQElasticsearchCommonSearchBackendTests.test_search_with_hyphen.<locals>.<listcomp>N)r   r   r   r2   r   r	   r3   r4   r5   r
   r&   r6   r   r   r   test_search_with_hyphen\   s    

z=ElasticsearchCommonSearchBackendTests.test_search_with_hyphenc                 C   s6   | j jdtjddgd}| dd |D ddg d S )	Nr*   andr   )operatorfieldsc                 S   s   g | ]
}|j qS r   r   r   r   r   r   r!   {   s     z]ElasticsearchCommonSearchBackendTests.test_and_operator_with_single_field.<locals>.<listcomp>r"   r#   r(   r   r   r   r   #test_and_operator_with_single_fieldu   s       zIElasticsearchCommonSearchBackendTests.test_and_operator_with_single_fieldc                 C   s<   t jd| jdt d | jttj}| 	t
|t
  d S )NZupdate_indexT)backend_nameZschema_onlystdout)r   Zcall_commandrE   r   r	   r
   r   r   r   r;   r<   r   r   r   r   %test_update_index_command_schema_only   s    zKElasticsearchCommonSearchBackendTests.test_update_index_command_schema_onlyc                 C   s$   | j ttj}| t|d d S )N   )r	   r
   r   r   r   assertEquallenr   r   r   r   test_more_than_ten_results   s    z@ElasticsearchCommonSearchBackendTests.test_more_than_ten_resultsc              	   C   s   g }t dD ],}|tjjjd| tddd|d q| jtj}|	tj| |
  | jttj}| t|d d S )N   Book r-   r.      r1      rangeappendr   r   r   r2   r   r	   r3   Z	add_itemsr5   r
   r   rI   rJ   r   booksir8   r   r   r   r   "test_more_than_one_hundred_results   s    
zHElasticsearchCommonSearchBackendTests.test_more_than_one_hundred_resultsc              	   C   s   g }t dD ],}|tjjjd| tddd|d q| jtj}|	tj| |
  | jttjdd }| t|d d S )	NrL   rM   r-   r.   rN   r1   x   n   rP   rS   r   r   r   (test_slice_more_than_one_hundred_results   s    
zNElasticsearchCommonSearchBackendTests.test_slice_more_than_one_hundred_resultsc              	   C   s   g }t dD ],}|tjjjd| tddd|d q| jtj}|	tj| |
  | jttjdd  }| t|d d S )	NrL   rM   r-   r.   rN   r1   rX   6   rP   rS   r   r   r   test_slice_to_next_page   s    
z=ElasticsearchCommonSearchBackendTests.test_slice_to_next_pagec              	   C   sD   ddl m} tjjjdd}| | | jt	| W 5 Q R X d S )Nr   r   r0   )Zpublication_date__month)
r   r   r   r   r   r   r   r	   r
   r   )r   r   Zin_janr   r   r   0test_cannot_filter_on_date_parts_other_than_year   s    zVElasticsearchCommonSearchBackendTests.test_cannot_filter_on_date_parts_other_than_yearN)__name__
__module____qualname__r   r   r'   r)   r+   r,   r9   r=   r@   rD   rG   rK   rV   rY   r[   r\   r   r   r   r   r      s    	
	
r   N)datetimer   ior   Zdjango.corer   Zwagtail.search.queryr   Z"wagtail.search.tests.test_backendsr   Zwagtail.test.searchr   r   r   r   r   r   <module>   s   