a
    DgM                     @   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 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 s0    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   ZsluglocationZaudienceZcostZ	date_from
feed_imageZ1234567   )captionimage
sort_orderZ7654321   Z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_childr+   strpkexpected_references)selfZimage_model rC   a/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/tests/test_reference_index.pysetUp   sr    
.



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_objectr:   values_listrA   rB   rC   rC   rD   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_typerI   Z
hero_image)rP   rQ   Z	object_idrF   rG   rH   rI   Zcontent_path_hashr*   rF   rG   rH   rI   r.   r/   r$   r0   r1   r(   r)   )r   r3   r<   Z_get_base_content_typer:   r   r4   r6   r@   r5   r8   Z_get_content_path_hashZcreate_or_update_for_object
assertTruefilterr+   existsassertFalserJ   rK   rL   rM   r?   r7   r;   r9   )rB   Zreference_to_keepZreference_to_removerC   rC   rD   test_updatem   s`    





z'TestCreateOrUpdateForObject.test_updatec              	   C   sp   | j dd* tjj| jjd}|  W d    n1 s<0    Y  | tt	
| jdddd| j d S )NTr   )r@   rF   rG   rH   rI   )r2   r   r3   r<   r:   r@   saverJ   rK   r   rL   rM   rA   )rB   pagerC   rC   rD   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<0    Y  t| j}| | d d S )NTr   z0<p><a linktype="page" id="%d">event page</a></p>)contentr   )	r2   r   r:   r+   rW   r   get_references_toassertEqualcount)rB   objrefsrC   rC   rD   test_null_parental_key   s    &z2TestCreateOrUpdateForObject.test_null_parental_keyc                    st    j dd8 t }t fdd|_ j|_|  W d    n1 sJ0    Y  t j} 	|
 d d S )NTr   c                      s    j S )N)r:   rC   rN   rC   rD   <lambda>       zDTestCreateOrUpdateForObject.test_lazy_parental_key.<locals>.<lambda>r$   )r2   r   r   rX   r=   Z	link_pagerW   r   r[   r\   r]   )rB   Zevent_page_related_linkr_   rC   rN   rD   test_lazy_parental_key   s    &z2TestCreateOrUpdateForObject.test_lazy_parental_keyc                 C   s   | j ddF td| jd}| jj|d tdd d}| jj|d W d    n1 sX0    Y  t| j}| | d d S )NTr   generic snippet pager   Zsnippet_content_objectr,   r$   )	r2   r   r:   r=   r>   r   r[   r\   r]   rB   page1page2r_   rC   rC   rD   test_generic_foreign_key   s    ,z4TestCreateOrUpdateForObject.test_generic_foreign_keyc                 C   s   | j ddF td| jd}| jj|d tdd d}| jj|d W d    n1 sX0    Y  t| j}| | d d S )NTr   rd   re   r,   r   )	r2   r   r:   r=   r>   r   r[   r\   r]   rf   rC   rC   rD   +test_model_index_ignore_generic_foreign_key   s    ,zGTestCreateOrUpdateForObject.test_model_index_ignore_generic_foreign_keyc                 C   s   | j ddR tj| j}td|d}| jj|d tdd d}| jj|d W d    n1 sd0    Y  t	|}| 
| d d S )NTr   rd   )r   Zsnippet_content_type_nonindexedr,   r   )r2   r   r3   r4   r:   r   r=   r>   r   r[   r\   r]   )rB   rQ   rg   rh   r_   rC   rC   rD   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 sP0    Y  t | j}| | d d S )Nr   Tr   An advertisement)textrX   r$   )	r   r[   r:   r\   r]   r2   r   r3   r6   )rB   r_   rC   rC   rD    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_commandrU   getvaluerB   rq   rC   rC   rD   *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 )NZshow_references_indexrq   z 3  wagtail.images.models.Imagez) 4  wagtail.test.testapp.models.EventPage)r   r   rr   ZassertInrs   rt   rC   rC   rD   test_show_references_index  s    z6TestCreateOrUpdateForObject.test_show_references_indexN)__name__
__module____qualname__rE   rO   rV   rY   r`   rc   ri   rj   rk   rn   ru   rw   rC   rC   rC   rD   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 )Nro   rv   )r   rr   r   )clsrC   rC   rD   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_advertrl   )rm   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)rm   Zon_delete_cascadezOn delete cascadez0the various on delete model will also be deletedzon_delete=PROTECT)rm   on_delete_protectzOn delete protectzprevents deletionzon_delete=RESTRICT)rm   Zon_delete_restrictzOn delete restrictzmay prevent deletionzon_delete=SET_NULL)rm   Zon_delete_set_nullzOn delete set nullzwill unset the referencezon_delete=SET_DEFAULT)rm   on_delete_set_defaultzOn delete set defaultz2will be set to the default various on delete modelzon_delete=SET)rm   Zon_delete_setzOn delete setz@will be set to a various on delete model specified by the systemzon_delete=DO_NOTHING)rm   Zon_delete_do_nothingzOn delete do nothingzwill do nothingZGenericForeignKey)rm   Zcontent_objectzContent objectzRichTextField model field)rm   	rich_textz	Rich textzdeep RichTextBlockr   )rm   r~   u4   Stream field → Advertisement content → Rich textzdeep SnippetChooserBlockadvert)r%   z	Deep textu;   Stream field → Advertisement content → Captioned advertZImageChooserBlockr&   u   Stream field → ImageZDocumentChooserBlockdocumentu   Stream field → Document)r   Z_meta	get_fieldZstream_blockZchild_blocksr   r3   r6   r   r   Zadvert_uuidr   firstrX   r+   r   r   r&   r	   r
   r   r   r   r   cases)rB   fieldr   r   Z	page_linkrC   rC   rD   rE   $  s    








!zTestDescribeOnDelete.setUpc           
   
   C   s"  | j D ]\}}}}| j|d d d|vr6d |d< | jdd" tjjf i |}W d    n1 sj0    Y  t| }|d \}}|d }	| 	|j
d|v  | | d | || | t|d | |	 | | |	 | |  W d    q1 s0    Y  qd S )	Nrm   )rO   r   Tr   r   r   r$   )r   ZsubTestr2   r   r3   r6   r   r[   group_by_source_objectZassertIsZis_protectedr\   r]   lendescribe_source_fielddescribe_on_deletedelete)
rB   Zinit_kwargsZreferred_objectZfield_descriptionZon_delete_descriptionr^   usageZreferrer
references	referencerC   rC   rD   (test_describe_source_field_and_on_delete  s.    0z=TestDescribeOnDelete.test_describe_source_field_and_on_deletec                 C   sb   t j }t| }| | d |D ]0\}}|d }| | d | |	 d q,d S )Nr(   r   r   z)the advert placement will also be deleted)
r   r3   r   r   r[   r   r\   r]   r   r   )rB   r   r   _r   r   rC   rC   rD   5test_describe_source_field_and_on_delete_parental_key  s    
zJTestDescribeOnDelete.test_describe_source_field_and_on_delete_parental_keyN)	rx   ry   rz   Zfixturesclassmethodr}   rE   r   r   rC   rC   rC   rD   r{     s   
 )r{   N)'ior   Z"django.contrib.contenttypes.modelsr   Zdjango.corer   Zdjango.testr   Zdjango.utils.functionalr   Zwagtail.blocksr   r   Zwagtail.documentsr	   Zwagtail.documents.tests.utilsr
   Zwagtail.imagesr   Zwagtail.images.tests.utilsr   Zwagtail.modelsr   r   Zwagtail.rich_textr   Zwagtail.test.testapp.modelsr   r   r   r   r   r   r   r   r   r   r   r{   rC   rC   rC   rD   <module>   s    0  