o
    hM                     @   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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 d dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ G dd deZ%G dd deZ&dS )    )StringIO)ContentType)
management)TestCase)SimpleLazyObject)StreamValueStructValue)get_document_model)get_test_document_file)get_image_model)get_test_image_file)PageReferenceIndex)RichText)
AdvertAdvertWithCustomUUIDPrimaryKey	EventPageEventPageCarouselItemEventPageRelatedLinkGenericSnippetNoFieldIndexPageGenericSnippetNoIndexPageGenericSnippetPageModelWithNullableParentalKeyVariousOnDeleteModelc                   @   sl   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S )TestCreateOrUpdateForObjectc              
   C   s  | j ddf t }tj|| _|jjdt d| _|jjdt d| _	|jjdt d| _
tddd	d
dd| jd| _td| j	ddtd| j
ddtd| j	ddg| j_tjjdd| _| jj| jd W d    n1 sow   Y  | jjt| jjddf| jjt| j	jdd| jjjddj df| jjt| j
jdd| jjjddj df| jjt| j	jdd| jjjddj dfh| _d S )NTexecutezTest feed imagetitlefilezTest image 1zTest image 2z
Event pagez
event-pagezthe moonpublicfreez
2001-01-01)r   sluglocationaudiencecost	date_from
feed_image1234567   )captionimage
sort_order7654321   abcdefg   idinstancer'   carousel_items.item.imagecarousel_items.r,   .image)captureOnCommitCallbacksr   r   objectsget_for_modelimage_content_typecreater   test_feed_imagetest_image_1test_image_2r   
event_pager   carousel_itemsr   get	root_page	add_childr2   strpkexpected_references)selfimage_model rK   b/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/tests/test_reference_index.pysetUp   st   
+




z!TestCreateOrUpdateForObject.setUpc              	   C   s*   |  tt| jdddd| j d S )Nto_content_typeto_object_id
model_pathcontent_path)assertSetEqualsetr   get_references_for_objectrA   values_listrH   rI   rK   rK   rL   testc   s   z TestCreateOrUpdateForObject.testc                 C   sd  t jjt | jtj| jdd}t jjt | jtj| j| jj| j	| j
jddt dd}t | j | t jj|jd  | t jj|jd  | tt | jdddd	| j	jt| jjddf| j	jt| j
jd
d| jjjddj df| j	jt| jjd
d| jjjddj df| j	jt| j
jd
d| jjjddj dfh d S )Nr'   )base_content_typecontent_typerQ   
hero_image)rX   rY   	object_idrN   rO   rP   rQ   content_path_hashr1   rN   rO   rP   rQ   r5   r6   r)   r7   r8   r.   r0   )r   r:   rC   _get_base_content_typerA   r   r;   r=   rG   r<   r?   _get_content_path_hashcreate_or_update_for_object
assertTruefilterr2   existsassertFalserR   rS   rT   rU   rF   r>   rB   r@   )rI   reference_to_keepreference_to_removerK   rK   rL   test_updatem   s`   





z'TestCreateOrUpdateForObject.test_updatec              	   C   sp   | j dd tjj| jjd}|  W d    n1 sw   Y  | tt	
| jdddd| j d S )NTr   )rG   rN   rO   rP   rQ   )r9   r   r:   rC   rA   rG   saverR   rS   r   rT   rU   rH   )rI   pagerK   rK   rL   1test_saving_base_model_does_not_remove_references   s   
zMTestCreateOrUpdateForObject.test_saving_base_model_does_not_remove_referencesc                 C   sf   | j dd td| jj d}|  W d    n1 sw   Y  t| j}| | d d S )NTr   z0<p><a linktype="page" id="%d">event page</a></p>)contentr   )	r9   r   rA   r2   rg   r   get_references_toassertEqualcount)rI   objrefsrK   rK   rL   test_null_parental_key   s   
	z2TestCreateOrUpdateForObject.test_null_parental_keyc                    st    j dd t }t fdd|_ j|_|  W d    n1 s%w   Y  t j} 	|
 d d S )NTr   c                      s    j S )N)rA   rK   rV   rK   rL   <lambda>   s    zDTestCreateOrUpdateForObject.test_lazy_parental_key.<locals>.<lambda>r)   )r9   r   r   rh   rD   	link_pagerg   r   rk   rl   rm   )rI   event_page_related_linkro   rK   rV   rL   test_lazy_parental_key   s   
z2TestCreateOrUpdateForObject.test_lazy_parental_keyc                 C      | j dd# td| jd}| jj|d tdd d}| jj|d W d    n1 s,w   Y  t| j}| | d d S )NTr   generic snippet pager   snippet_content_objectr3   r)   )	r9   r   rA   rD   rE   r   rk   rl   rm   rI   page1page2ro   rK   rK   rL   test_generic_foreign_key   s   
z4TestCreateOrUpdateForObject.test_generic_foreign_keyc                 C   ru   )NTr   rv   rw   r3   r   )	r9   r   rA   rD   rE   r   rk   rl   rm   ry   rK   rK   rL   +test_model_index_ignore_generic_foreign_key   s   zGTestCreateOrUpdateForObject.test_model_index_ignore_generic_foreign_keyc                 C   s   | j dd) tj| j}td|d}| jj|d tdd d}| jj|d W d    n1 s2w   Y  t	|}| 
| d d S )NTr   rv   )r   snippet_content_type_nonindexedr3   r   )r9   r   r:   r;   rA   r   rD   rE   r   rk   rl   rm   )rI   rY   rz   r{   ro   rK   rK   rL   1test_model_field_index_ignore_generic_foreign_key   s   
zMTestCreateOrUpdateForObject.test_model_field_index_ignore_generic_foreign_keyc                 C   sz   t | j}| | d | jdd tjjd| jd W d    n1 s(w   Y  t | j}| | d d S )Nr   Tr   An advertisement)textrh   r)   )	r   rk   rA   rl   rm   r9   r   r:   r=   )rI   ro   rK   rK   rL    test_model_with_uuid_primary_key   s   z<TestCreateOrUpdateForObject.test_model_with_uuid_primary_keyc                 C   s(   t  }tjdd|d | |  d S )Nrebuild_references_indexr   )	verbositystdout)r   r   call_commandrc   getvaluerI   r   rK   rK   rL   *test_rebuild_references_index_no_verbosity
  s   zFTestCreateOrUpdateForObject.test_rebuild_references_index_no_verbosityc                 C   s8   t  }tjd|d | d|  | d|  d S )Nshow_references_indexr   z 3  wagtail.images.models.Imagez) 4  wagtail.test.testapp.models.EventPage)r   r   r   assertInr   r   rK   rK   rL   test_show_references_index  s   z6TestCreateOrUpdateForObject.test_show_references_indexN)__name__
__module____qualname__rM   rW   rf   ri   rp   rt   r|   r}   r   r   r   r   rK   rK   rK   rL   r      s    E
>
	r   c                   @   s6   e Zd ZdgZedd Zdd Zdd Zdd	 Zd
S )TestDescribeOnDeletez	test.jsonc                 C   s   t jdt d d S )Nr   r   )r   r   r   )clsrK   rK   rL   setUpTestData   s   z"TestDescribeOnDelete.setUpTestDatac                 C   s  t jd}|jjd }|jd }tjjdd| _t	jjdd| _
tj | _d| jj d}t jjd	t d
| _t jjdt d
| _d| jd| jddfd| jd| jddfd| jd| jddfd| jd| jddfd| jd| jddfd | jd!| jd"d#fd$| jd%| jd&d'fd(| j
d)| j
d*dfd+|d,| jd-dfd.t|jdt|d/t|fgfgd0| jd1dfd2t|jdt|dt|d3| jfd4gfgfgd0| jd5dfd6t|jd7| jfgd0| jd8dfd9t|jd:| jfgd0| jd;dfg| _d S )<Nstream_fieldadvertisement_contentcaptioned_advertr   )r   zA UUID advertisementz<p>Link to <a id="z " linktype="page">a page</a></p>zMy imager   zMy documentzon_delete=CASCADE)r   on_delete_cascadezOn delete cascadez0the various on delete model will also be deletedzon_delete=PROTECT)r   on_delete_protectzOn delete protectzprevents deletionzon_delete=RESTRICT)r   on_delete_restrictzOn delete restrictzmay prevent deletionzon_delete=SET_NULL)r   on_delete_set_nullzOn delete set nullzwill unset the referencezon_delete=SET_DEFAULT)r   on_delete_set_defaultzOn delete set defaultz2will be set to the default various on delete modelzon_delete=SET)r   on_delete_setzOn delete setz@will be set to a various on delete model specified by the systemzon_delete=DO_NOTHING)r   on_delete_do_nothingzOn delete do nothingzwill do nothingGenericForeignKey)r   content_objectzContent objectzRichTextField model field)r   	rich_textz	Rich textzdeep RichTextBlockr   )r   r   u4   Stream field → Advertisement content → Rich textzdeep SnippetChooserBlockadvert)r*   z	Deep textu;   Stream field → Advertisement content → Captioned advertImageChooserBlockr+   u   Stream field → ImageDocumentChooserBlockdocumentu   Stream field → Document)r   _meta	get_fieldstream_blockchild_blocksr   r:   r=   r   r   advert_uuidr   firstrh   r2   r   r   r+   r	   r
   r   r   r   r   cases)rI   fieldr   r   	page_linkrK   rK   rL   rM   $  s   








!
zTestDescribeOnDelete.setUpc           
   
   C   s  | j D ]\}}}}| j|d ds d|vrd |d< | jdd tjjd	i |}W d    n1 s4w   Y  t| }|d \}}|d }	| 	|j
d|v  | | d | || | t|d | |	 | | |	 | |  W d    n1 sw   Y  qd S )
Nr   )rW   r   Tr   r   r   r)   rK   )r   subTestr9   r   r:   r=   r   rk   group_by_source_objectassertIsis_protectedrl   rm   lendescribe_source_fielddescribe_on_deletedelete)
rI   init_kwargsreferred_objectfield_descriptionon_delete_descriptionrn   usagereferrer
references	referencerK   rK   rL   (test_describe_source_field_and_on_delete  s:   
z=TestDescribeOnDelete.test_describe_source_field_and_on_deletec                 C   sb   t j }t| }| | d |D ]\}}|d }| | d | |	 d qd S )Nr.   r   r   z)the advert placement will also be deleted)
r   r:   r   r   rk   r   rl   rm   r   r   )rI   r   r   _r   r   rK   rK   rL   5test_describe_source_field_and_on_delete_parental_key  s   
zJTestDescribeOnDelete.test_describe_source_field_and_on_delete_parental_keyN)	r   r   r   fixturesclassmethodr   rM   r   r   rK   rK   rK   rL   r     s    
 )r   N)'ior   "django.contrib.contenttypes.modelsr   django.corer   django.testr   django.utils.functionalr   wagtail.blocksr   r   wagtail.documentsr	   wagtail.documents.tests.utilsr
   wagtail.imagesr   wagtail.images.tests.utilsr   wagtail.modelsr   r   wagtail.rich_textr   wagtail.test.testapp.modelsr   r   r   r   r   r   r   r   r   r   r   r   rK   rK   rK   rL   <module>   s"    0  