a
    Døg#  ã                   @   sl   d dl 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
 d dlmZmZmZmZ G dd„ deƒZdS )	é    N)ÚContentType)ÚTestCase)Úfreeze_time)ÚPageÚRevisionÚget_default_page_content_type)ÚFullFeaturedSnippetÚRevisableGrandChildModelÚRevisableModelÚ
SimplePagec                   @   s„   e Zd Zedd„ ƒZe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edƒdd„ ƒZdd„ ZdS )ÚTestRevisableModelc                 C   s"   t jjdd| _tj t ¡| _d S )NÚfoo©Útext)r
   ÚobjectsÚcreateÚinstancer   Úget_for_modelÚcontent_type)Úcls© r   ú`/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/tests/test_revision_model.pyÚsetUpTestData   s    z TestRevisableModel.setUpTestDatac                 C   s,   t jjdd}tdddd}|j|d |S )Nz/home/)Zurl_pathzHello worldzhello-worldÚhello)ÚtitleZslugÚcontent©r   )r   r   Úgetr   Z	add_child)r   ZhomepageÚ
hello_pager   r   r   Úcreate_page   s    ÿzTestRevisableModel.create_pagec                 C   sj   d| j _| j  ¡ }| j j ¡ }| j  ¡  |  ||¡ |  | j j|¡ |  |jd d¡ |  | j jd¡ d S )NÚupdatedr   r   )	r   r   Úsave_revisionÚ	revisionsÚfirstÚrefresh_from_dbÚassertEqualZlatest_revisionr   ©ÚselfÚrevisionÚrevision_from_dbr   r   r   Útest_can_save_revision   s    

z)TestRevisableModel.test_can_save_revisionc                 C   s„   d| j _| j  ¡  d| j _| j  ¡ }| j  ¡  |  d¡ | j  ¡ }W d   ƒ n1 sX0    Y  |  ||¡ |  |jd d¡ d S )Nr    zupdated twiceé   r   )r   r   r!   r$   ZassertNumQueriesZget_latest_revisionr%   r   r&   r   r   r   Útest_get_latest_revision_exists-   s    


(z2TestRevisableModel.test_get_latest_revision_existsc                 C   s‚   d| j _| j  ¡ }tjj| j| j| j jd ¡ }|  	||¡ |  	| j  
¡ | j¡ |  	| j  ¡ | j¡ |  	tj | j ¡ ¡ |¡ d S )Nr    ©Úbase_content_typer   Ú	object_id)r   r   r!   r   r   Úfilterr   Úpkr#   r%   Úget_base_content_typeÚget_content_typeÚfor_instancer&   r   r   r   Ú%test_content_type_without_inheritance;   s    
ý
z8TestRevisableModel.test_content_type_without_inheritancec                 C   sæ   t jjdd}d|_| ¡ }| j}tj t ¡}tjj	|||j
d ¡ }|  ||¡ |  | ¡ |¡ |  | ¡ |¡ |  |t¡ |  |t ¡ |  tj |¡ ¡ |¡ tjj|j
d}|  |t¡ |  |t ¡ |  tj |¡ ¡ |¡ d S )NÚtestr   ztest updatedr-   ©r1   )r	   r   r   r   r!   r   r   r   r   r0   r1   r#   r%   r2   r3   ÚassertIsInstancer
   r4   r   ÚassertNotIsInstance)r'   r   r(   r.   r   r)   Úbase_instancer   r   r   Ú"test_content_type_with_inheritanceL   s(    ý
z5TestRevisableModel.test_content_type_with_inheritancec                 C   sà   |   ¡ }d|_| ¡ }tƒ }tj t¡}tjj	|||j
d ¡ }|  ||¡ |  | ¡ |¡ |  | ¡ |¡ |  |t¡ |  |t¡ |  tj |¡ ¡ |¡ tjj|j
d}|  |t¡ |  |t¡ |  tj |¡ ¡ |¡ d S )NzUpdated worldr-   r7   )r   r   r!   r   r   r   r   r   r   r0   r1   r#   r%   r2   r3   r8   r   r4   r   r9   )r'   r   r(   r.   r   r)   r:   r   r   r   Ú test_content_type_for_page_modeli   s(    ý
z3TestRevisableModel.test_content_type_for_page_modelc                 C   s^   d| j _| j  ¡  | j  ¡  | j j ¡ }| ¡ }|  |t¡ |  	|jd¡ |  	| j jd¡ d S )Nr    r   )
r   r   r!   r$   r"   r#   Ú	as_objectr8   r
   r%   )r'   r(   r   r   r   r   Útest_as_object†   s    

z!TestRevisableModel.test_as_objectc                 C   s\   |   ¡ }d|_| ¡  | ¡  |j ¡ }| ¡ }|  |t¡ |  	|jd¡ |  	|jd¡ d S )Nr    r   )
r   r   r!   r$   r"   r#   r=   r8   r   r%   )r'   r   r(   r   r   r   r   Útest_as_object_with_page“   s    
z+TestRevisableModel.test_as_object_with_pagec                 C   sb   | j  ¡ }|  | ¡ ¡ | j  ¡ }|  | ¡ ¡ |  | ¡ ¡ |  |j|j¡ |  |j|j¡ d S ©N)r   r!   Ú
assertTrueÚis_latest_revisionÚassertFalseÚ
assertLessÚ
created_atÚid©r'   r#   Úsecondr   r   r   Ú2test_is_latest_revision_newer_creation_date_and_id    s    

zETestRevisableModel.test_is_latest_revision_newer_creation_date_and_idc                 C   s~   | j  ¡ }|  | ¡ ¡ | j  ¡ }|jtjdd |_| ¡  |  | ¡ ¡ |  | ¡ ¡ |  	|j|j¡ |  
|j|j¡ d S )Né	   )Údays)r   r!   rA   rB   rE   ÚdatetimeÚ	timedeltaÚsaverC   ZassertGreaterrD   rF   rG   r   r   r   Ú4test_is_latest_revision_newer_creation_date_older_id¬   s    

zGTestRevisableModel.test_is_latest_revision_newer_creation_date_older_idz
2023-01-19c                 C   sb   | j  ¡ }|  | ¡ ¡ | j  ¡ }|  | ¡ ¡ |  | ¡ ¡ |  |j|j¡ |  |j|j¡ d S r@   )	r   r!   rA   rB   rC   r%   rE   rD   rF   rG   r   r   r   Ú+test_is_latest_revision_same_creation_dates»   s    

z>TestRevisableModel.test_is_latest_revision_same_creation_datesc              	   C   sÎ   |   ¡ }tjjdd}|df|df| jdfg}|D ]–\}}| j|dr | ¡ }| ¡ t|j	ƒdœ}|  
tjjf i |¤Ž ¡ |¡ | ¡  |  tjjf i |¤Ž ¡ | ¡ W d   ƒ q21 s¾0    Y  q2d S )Nr   r   TFr   )r.   r/   )r   r   r   r   r   ZsubTestr!   r2   Ústrr1   r%   r   r0   r#   ÚdeleteZassertIsÚexists)r'   ÚpageZfull_featured_snippetZcasesr   Zcascadesr(   Úqueryr   r   r   Ú&test_revision_cascade_on_object_deleteÈ   s    úþz9TestRevisableModel.test_revision_cascade_on_object_deleteN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r*   r,   r5   r;   r<   r>   r?   rI   rO   r   rP   rV   r   r   r   r   r      s    


r   )rL   Z"django.contrib.contenttypes.modelsr   Zdjango.testr   Z	freezegunr   Zwagtail.modelsr   r   r   Zwagtail.test.testapp.modelsr   r	   r
   r   r   r   r   r   r   Ú<module>   s   