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 d dlmZmZmZ edd	 ZG d
d deZG dd deZdS )    )contextmanager)checks)TestCase)Page)index)models)TaggedChildPageTaggedGrandchildPage
TaggedPagec                 c   s   | j }|| _ dV  || _ dS )z
    A context manager to allow testing of different search_fields configurations
    without permanently changing the models' search_fields.
    N)search_fields)modelZnew_search_fieldsZold_search_fields r   o/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/search/tests/test_indexed_class.pypatch_search_fields   s    r   c                   @   s   e Zd Zdd Zdd ZdS )TestContentTypeNamesc                 C   s   t j }| |d d S )NZsearchtests_book)r   NovelZ!indexed_get_toplevel_content_typeassertEqualselfnamer   r   r   test_base_content_type_name   s    
z0TestContentTypeNames.test_base_content_type_namec                 C   s   t j }| |d d S )NZ"searchtests_book_searchtests_novel)r   r   Zindexed_get_content_typer   r   r   r   r    test_qualified_content_type_name!   s    
z5TestContentTypeNames.test_qualified_content_type_nameN)__name__
__module____qualname__r   r   r   r   r   r   r      s   r   c                   @   sF   e Zd Zdd ZdddZdd Zdd	 Zd
d Zdd Zdd Z	dS )TestSearchFieldsc                 C   s   t dtjfd|iS )NZ	DummyTyper   )typer   ZIndexed)r   r   r   r   r   make_dummy_type'   s    z TestSearchFields.make_dummy_typeNc                    s"   t  } r fdd|D S |S )zNRun Django checks on any with the 'search' tag used when registering the checkc                    s   g | ]}|j  kr|qS r   id).0warning
warning_idr   r   
<listcomp>.   s     
 z6TestSearchFields.get_checks_result.<locals>.<listcomp>)r   
run_checks)r#   Zchecks_resultr   r"   r   get_checks_result*   s    z"TestSearchFields.get_checks_resultc                 C   s^   |  tjdddtdg}| t| d | t| d | t| d d S )Ntestd   boostZfilter_test      	r   r   SearchFieldZFilterFieldr   lenget_search_fieldsget_searchable_search_fieldsget_filterable_search_fieldsr   clsr   r   r   
test_basic1   s    zTestSearchFields.test_basicc                 C   s   |  tjdddtdg}| t| d | t| d | t| d | d }| |tj | 	|j
 d S )Nr'   r(   r)   r,   r   )r   r   r.   r   r/   r0   r1   r2   ZassertIsInstanceZassertIsNoner*   )r   r4   fieldr   r   r   test_overriding=   s    
z TestSearchFields.test_overridingc                 C   s^   |  tjdddtdg}| t| d | t| d | t| d d S )Nr'   r(   r)   r+   r,   r-   r3   r   r   r   (test_different_field_types_dont_overrideX   s    z9TestSearchFields.test_different_field_types_dont_overridec              	   C   sV   t tjtjjtdg 0 tjdtjddg}tj }| 	|| W 5 Q R X d S )NZfooz4Book.search_fields contains non-existent field 'foo'zwagtailsearch.W004)objr   )
r   r   ZBookr   r   r.   r   Warningcheckr   )r   Zexpected_errorserrorsr   r   r   test_checking_search_fieldse   s     
z,TestSearchFields.test_checking_search_fieldsc              	   C   s   dd t  D }| tttgdd |D  |D ] }| |jd | d|j q2t	tt
jtj $ dd t  D }| g | W 5 Q R X t	tg $ dd t  D }| g | W 5 Q R X dS )	zLRun checks to ensure that when core page fields are missing we get a warningc                 S   s   g | ]}|j d kr|qS zwagtailsearch.W001r   r    errorr   r   r   r$   w   s    
 zOTestSearchFields.test_checking_core_page_fields_are_indexed.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r   )r9   r?   r   r   r   r$   ~   s     z+Core Page fields missing in `search_fields`zEPage model search fields `search_fields = Page.search_fields + [...]`c                 S   s   g | ]}|j d kr|qS r>   r   r?   r   r   r   r$      s   
c                 S   s   g | ]}|j d kr|qS r>   r   r?   r   r   r   r$      s   
N)r   r%   r   r
   r   r	   msgZassertInhintr   r   r   )r   r<   r@   r   r   r   *test_checking_core_page_fields_are_indexeds   s:     
z;TestSearchFields.test_checking_core_page_fields_are_indexed)N)
r   r   r   r   r&   r5   r7   r8   r=   rC   r   r   r   r   r   &   s   
r   N)
contextlibr   Zdjango.corer   Zdjango.testr   Zwagtail.modelsr   Zwagtail.searchr   Zwagtail.test.searchr   Zwagtail.test.testapp.modelsr   r	   r
   r   r   r   r   r   r   r   <module>   s   

