U
    |hH                     @   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                   @   sd   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S )TestCreateOrUpdateForObjectc              
   C   s`  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 | 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 )Nz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)r   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 r@   j/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/tests/test_reference_index.pysetUp   s|    
      



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_objectr7   values_listr>   r?   r@   r@   rA   testb   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_typerF   Z
hero_image)rM   rN   Z	object_idrC   rD   rE   rF   Zcontent_path_hashr(   rC   rD   rE   rF   r,   r-   r"   r.   r/   r&   r'   )r   r0   r9   Z_get_base_content_typer7   r   r1   r3   r=   r2   r5   Z_get_content_path_hashZcreate_or_update_for_objectZ
assertTruefilterr)   existsassertFalserG   rH   rI   rJ   r<   r4   r8   r6   )r?   Zreference_to_keepZreference_to_remover@   r@   rA   test_updatel   sf    

   



z'TestCreateOrUpdateForObject.test_updatec              	   C   sD   t jj| jjd}|  | tt	| j
dddd| j d S )N)r=   rC   rD   rE   rF   )r   r0   r9   r7   r=   saverG   rH   r   rI   rJ   r>   )r?   pager@   r@   rA   1test_saving_base_model_does_not_remove_references   s       zMTestCreateOrUpdateForObject.test_saving_base_model_does_not_remove_referencesc                 C   s:   t d| jj d}|  t| j}| | d d S )Nz0<p><a linktype="page" id="%d">event page</a></p>)contentr   )r   r7   r)   rS   r   get_references_toassertEqualcount)r?   objrefsr@   r@   rA   test_null_parental_key   s    z2TestCreateOrUpdateForObject.test_null_parental_keyc                    sH   t  }t fdd|_ j|_|  t j} |	 d d S )Nc                      s    j S )N)r7   r@   rK   r@   rA   <lambda>       zDTestCreateOrUpdateForObject.test_lazy_parental_key.<locals>.<lambda>r"   )
r   r   rT   r:   Z	link_pagerS   r   rW   rX   rY   )r?   Zevent_page_related_linkr[   r@   rK   rA   test_lazy_parental_key   s    z2TestCreateOrUpdateForObject.test_lazy_parental_keyc                 C   sV   t d| jd}| jj|d t dd d}| jj|d t| j}| | d d S )Ngeneric snippet pager   Zsnippet_content_objectr*   r"   )r   r7   r:   r;   r   rW   rX   rY   r?   page1page2r[   r@   r@   rA   test_generic_foreign_key   s      z4TestCreateOrUpdateForObject.test_generic_foreign_keyc                 C   sV   t d| jd}| jj|d t dd d}| jj|d t| j}| | d d S )Nr`   ra   r*   r   )r   r7   r:   r;   r   rW   rX   rY   rb   r@   r@   rA   +test_model_index_ignore_generic_foreign_key   s      zGTestCreateOrUpdateForObject.test_model_index_ignore_generic_foreign_keyc                 C   s`   t j| j}td|d}| jj|d tdd d}| jj|d t|}| 	|
 d d S )Nr`   )r   Zsnippet_content_type_nonindexedr*   r   )r   r0   r1   r7   r   r:   r;   r   rW   rX   rY   )r?   rN   rc   rd   r[   r@   r@   rA   1test_model_field_index_ignore_generic_foreign_key   s      
zMTestCreateOrUpdateForObject.test_model_field_index_ignore_generic_foreign_keyc                 C   s(   t  }tjdd|d | |  d S )Nrebuild_references_indexr   )	verbositystdout)r   r   call_commandrQ   getvaluer?   rj   r@   r@   rA   *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rj   z 3  wagtail.images.models.Imagez) 4  wagtail.test.testapp.models.EventPage)r   r   rk   ZassertInrl   rm   r@   r@   rA   test_show_references_index   s    z6TestCreateOrUpdateForObject.test_show_references_indexN)__name__
__module____qualname__rB   rL   rR   rU   r\   r_   re   rf   rg   rn   rp   r@   r@   r@   rA   r      s   D
>		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 )Nrh   ro   )r   rk   r   )clsr@   r@   rA   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_advertzAn advertisement)textzA UUID advertisementz<p>Link to <a id="z " linktype="page">a page</a></p>zMy imager   zMy documentzon_delete=CASCADE)rz   Zon_delete_cascadezOn delete cascadez0the various on delete model will also be deletedzon_delete=PROTECT)rz   on_delete_protectzOn delete protectzprevents deletionzon_delete=RESTRICT)rz   Zon_delete_restrictzOn delete restrictzmay prevent deletionzon_delete=SET_NULL)rz   Zon_delete_set_nullzOn delete set nullzwill unset the referencezon_delete=SET_DEFAULT)rz   on_delete_set_defaultzOn delete set defaultz2will be set to the default various on delete modelzon_delete=SET)rz   Zon_delete_setzOn delete setz@will be set to a various on delete model specified by the systemzon_delete=DO_NOTHING)rz   Zon_delete_do_nothingzOn delete do nothingzwill do nothingZGenericForeignKey)rz   Zcontent_objectzContent objectzRichTextField model field)rz   	rich_textz	Rich textzdeep RichTextBlockr}   )rz   rw   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   _meta	get_fieldZstream_blockZchild_blocksr   r0   r3   r~   r   Zadvert_uuidr   firstrT   r)   r   r   r$   r	   r
   r   r   r   r   cases)r?   fieldrx   ry   Z	page_linkr@   r@   rA   rB     s    








! 
 
zTestDescribeOnDelete.setUpc           
   
   C   s   | j D ]\}}}}| j|d d d|kr4d |d< tjjf |}t| }|d \}}|d }	| |j	d|k | 
| d | 
|| | 
t|d | 
|	 | | 
|	 | |  W 5 Q R X qd S )Nrz   )rL   r|   r   r{   r"   )r   ZsubTestr   r0   r3   r   rW   group_by_source_objectZassertIsZis_protectedrX   rY   lendescribe_source_fielddescribe_on_deletedelete)
r?   Zinit_kwargsZreferred_objectZfield_descriptionZon_delete_descriptionrZ   usageZreferrer
references	referencer@   r@   rA   (test_describe_source_field_and_on_delete  s,    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   r0   r   r   rW   r   rX   rY   r   r   )r?   r~   r   _r   r   r@   r@   rA   5test_describe_source_field_and_on_delete_parental_key  s    
zJTestDescribeOnDelete.test_describe_source_field_and_on_delete_parental_keyN)	rq   rr   rs   Zfixturesclassmethodrv   rB   r   r   r@   r@   r@   rA   rt     s   
 )rt   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   rt   r@   r@   r@   rA   <module>   s   0 l