o
    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)modelnew_search_fieldsold_search_fields r   g/var/www/html/ndineBlogger/venv/lib/python3.10/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      t j }| |d d S )Nsearchtests_book)r   Novel!indexed_get_toplevel_content_typeassertEqualselfnamer   r   r   test_base_content_type_name      
z0TestContentTypeNames.test_base_content_type_namec                 C   r   )N"searchtests_book_searchtests_novel)r   r   indexed_get_content_typer   r   r   r   r    test_qualified_content_type_name!   r   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 )N	DummyTyper   )typer   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-   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   boostfilter_test      	r'   r   SearchField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 )Nr2   r3   r4   r8   r   )r'   r   r:   r   r<   r=   r>   r?   assertIsInstanceassertIsNoner5   )r   rA   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 )Nr2   r3   r4   r7   r8   r9   r@   r   r   r   (test_different_field_types_dont_overrideX   s   z9TestSearchFields.test_different_field_types_dont_overridec                 C   sl   t tjtjjtdg  tjdtjddg}tj }| 	|| W d    d S 1 s/w   Y  d S )Nfooz4Book.search_fields contains non-existent field 'foo'zwagtailsearch.W004)objr)   )
r   r   Bookr   r   r:   r   Warningcheckr   )r   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 qt	tt
jtj  dd t  D }| g | W d   n1 sMw   Y  t	tg  dd t  D }| g | W d   dS 1 srw   Y  dS )	zLRun checks to ensure that when core page fields are missing we get a warningc                 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   )rI   rR   r   r   r   r.   ~   s    z+Core Page fields missing in `search_fields`zEPage model search fields `search_fields = Page.search_fields + [...]`c                 S   rP   rQ   r(   rR   r   r   r   r.      
    
Nc                 S   rP   rQ   r(   rR   r   r   r   r.      rT   )r   r/   r   r
   r   r	   msgassertInhintr   r   r   )r   rN   rS   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'   r1   rB   rF   rG   rO   rX   r   r   r   r   r#   &   s    
r#   N)
contextlibr   django.corer   django.testr   wagtail.modelsr   wagtail.searchr   wagtail.test.searchr   wagtail.test.testapp.modelsr   r	   r
   r   r   r#   r   r   r   r   <module>   s    

