a
    Dųg/W  ć                   @   s
  d dl 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 d dlmZmZ d d	l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 d dlmZm Z m!Z! d dl"m#Z# G dd deZ$G dd de#eZ%G dd de%Z&G dd de&Z'dS )é    N)Śsettings)Śget_user_model)ŚGroup)ŚContentType)ŚValidationError)ŚIntegrityError)ŚTestCaseŚoverride_settings)Śtimezone)Śfreeze_time)	ŚGroupApprovalTaskŚPageŚTaskŚ	TaskStateŚWorkflowŚWorkflowContentTypeŚWorkflowPageŚWorkflowStateŚWorkflowTask)ŚFullFeaturedSnippetŚModeratedModelŚ
SimplePage)ŚWagtailTestUtilsc                   @   sR   e Zd Zdg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 )ŚTestWorkflowModelsś	test.jsonc                 C   s4   t dd}| ”  t jj|jd}|  |jd” d S )NŚtest_workflow©Śname©Śid)r   ŚsaveŚobjectsŚgetr   ŚassertEqualr   )Śselfr   Zretrieved_workflow© r%   śZ/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/tests/test_workflow.pyŚtest_create_workflow   s    
z'TestWorkflowModels.test_create_workflowc                 C   s4   t dd}| ”  t jj|jd}|  |jd” d S )NŚ	test_taskr   r   )r   r    r!   r"   r   r#   r   )r$   r(   Zretrieved_taskr%   r%   r&   Śtest_create_task&   s    
z#TestWorkflowModels.test_create_taskc                 C   s^   t jjdd}tjjdd}tjj||dd |  |tjj|d” |  |t jj|d” d S )Nr   r   r(   é   ©ŚworkflowŚtaskZ
sort_order)Zworkflow_tasks__workflow)Zworkflow_tasks__task)r   r!   Ścreater   r   ZassertInŚfilter)r$   r,   r-   r%   r%   r&   Śtest_add_task_to_workflow-   s
    z,TestWorkflowModels.test_add_task_to_workflowc                 C   sH   t jjdd}tjjdd}tjj||d | ”  |  |jj	|” d S )Nr   r   ś/home/©Zurl_path©Śpager,   )
r   r!   r.   r   r"   r   Śrefresh_from_dbr#   Zworkflowpager,   )r$   r,   Śhomepager%   r%   r&   Śtest_add_workflow_to_page4   s
    z,TestWorkflowModels.test_add_workflow_to_pagec                 C   s\   t jjdd}tj t”}tjj||d tjjdd}|  t ” |” |  | 	” |” d S )Nr   r   )Ścontent_typer,   Śfoo©Śtext)
r   r!   r.   r   Zget_for_modelr   r   r#   Zget_default_workflowŚget_workflow)r$   r,   r8   Zsnippetr%   r%   r&   Śtest_add_workflow_to_snippet<   s    z/TestWorkflowModels.test_add_workflow_to_snippetc                 C   sD   t jjdd}|j tj ” ” tjjdd}|j	}|  
|t ” d S )NZtest_group_approvalr   )r   r!   r.   ŚgroupsŚsetr   Śallr   r"   ZspecificZassertIsInstance)r$   Zgroup_approval_taskr-   Zspecific_taskr%   r%   r&   Śtest_get_specific_taskI   s    ’z)TestWorkflowModels.test_get_specific_taskc                 C   sv   t jjdd}tjjdd}tjj||d tdddd	}|j|d
 |  | 	” |” |  
| ” j|jd ” ” d S )Nr   r   r1   r2   r3   śHello worldśhello-worldŚhello©ŚtitleZslugŚcontent©Śinstancer   )r   r!   r.   r   r"   r   r   Ś	add_childr#   r<   Ś
assertTrueŚ	all_pagesr/   r   Śexists)r$   r,   r6   Ś
hello_pager%   r%   r&   Śtest_get_workflow_from_parentS   s    ’z0TestWorkflowModels.test_get_workflow_from_parentc                 C   s  t jjdd}t jjdd}tjjdd}tjj||d tddd	d
}|j|d tjj||d tdddd
}|j|d |  | 	” |” |  | 	” |” |  
| ” j|jd ” ” |  
| ” j|jd ” ” |  | ” j|jd ” ” |  | ” j|jd ” ” d S )NZtest_workflow_1r   Ztest_workflow_2r1   r2   r3   rB   rC   rD   rE   rH   zGoodbye worldzgoodbye-worldZgoodbyer   )r   r!   r.   r   r"   r   r   rJ   r#   r<   ŚassertFalserL   r/   r   rM   rK   )r$   Z
workflow_1Z
workflow_2r6   rN   Zgoodbye_pager%   r%   r&   Ś'test_get_workflow_from_closest_ancestor_   s&    ’’z:TestWorkflowModels.test_get_workflow_from_closest_ancestorN)Ś__name__Ś
__module__Ś__qualname__Śfixturesr'   r)   r0   r7   r=   rA   rO   rQ   r%   r%   r%   r&   r      s   
r   c                   @   sś   e Zd ZdgZedd Zdd Zdd Zedd	d
d Z	e
ddd Zedddd Zedddd Zdd Ze
ddd Zedddd Zedd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d1d.d/Zd0S )2ŚTestPageWorkflowsr   c                 C   s   t jjdd| _d S )Nr1   r2   )r   r!   r"   Śobject©Śclsr%   r%   r&   ŚsetUpTestData|   s    zTestPageWorkflows.setUpTestDatac                 C   sX   t jjdd}tjjdd}tjjdd}tjj||dd tjj||dd |||fS )Nr   r   Śtest_task_1Ztest_task_2r*   r+   é   )r   r!   r.   r   r   )r$   r,   Śtask_1Śtask_2r%   r%   r&   Ścreate_workflow_and_tasks   s    z+TestPageWorkflows.create_workflow_and_tasksc                 C   sF   |   ” \}}}| j ”  t j ” }| | j|”}||| j|||dS )N)Śworkflow_stateŚuserrW   r]   r^   r,   )r_   rW   Śsave_revisionr   r!   ŚfirstŚstart)r$   r,   r]   r^   ra   r`   r%   r%   r&   Śstart_workflow   s    
śz TestPageWorkflows.start_workflowF)ZWAGTAIL_WORKFLOW_ENABLEDc                 C   s^  |   d”  |  | jjd” W d    n1 s00    Y  |   d”  |  | j ” ” W d    n1 sj0    Y  |   d”  |  | jjd” W d    n1 s¤0    Y  |   d” |  | jj” W d    n1 sÜ0    Y  |   d” |  | jj” W d    n1 s0    Y  |   d” |  | jj	” W d    n1 sP0    Y  d S )Nr   F)
ZassertNumQueriesŚassertIsrW   Zhas_workflowŚassertIsNoner<   Zworkflow_in_progressZcurrent_workflow_stateZcurrent_workflow_task_stateZcurrent_workflow_task©r$   r%   r%   r&   Ś7test_workflow_methods_generate_no_queries_when_disabled   s    ...,.zITestPageWorkflows.test_workflow_methods_generate_no_queries_when_disabledz2017-01-01 12:00:00c                 C   s:  |   ” }|d }|  |j|d ” |  |j|d ” |  |jd” tjrp|  |jtjddddddtj	j
d	” n|  |jt dddddd”” |  |j|d
 ” |j}|  |j|d ” |  |jd” |  |j|d  ” ” tjr|  |jtjddddddtj	j
d	” n|  |jt dddddd”” |  |j” d S )Nr`   r,   rW   Śin_progresséį  r*   é   r   ©Śtzinfora   r]   )re   r#   r,   Ścontent_objectŚstatusr   ŚUSE_TZZ
created_atŚdatetimer
   ŚutcZrequested_byŚcurrent_task_stater-   ŚrevisionŚget_latest_revisionZ
started_atrg   Śfinished_at©r$   Śdatar`   Ś
task_stater%   r%   r&   Śtest_start_workflowŖ   s6    ž’ž’z%TestPageWorkflows.test_start_workflowT)Z"WAGTAIL_WORKFLOW_CANCEL_ON_PUBLISHc                 C   s<   |   ” }|d  ”  ”  |d }| ”  |  |jtj” d S ©NrW   r`   )re   rv   Śpublishr5   r#   rp   r   ŚSTATUS_CANCELLED©r$   ry   r`   r%   r%   r&   Ś<test_publishing_cancels_workflow_when_cancel_on_publish_trueĢ   s
    zNTestPageWorkflows.test_publishing_cancels_workflow_when_cancel_on_publish_truec                 C   s<   |   ” }|d  ”  ”  |d }| ”  |  |jtj” d S r|   )re   rv   r}   r5   r#   rp   r   ŚSTATUS_IN_PROGRESSr   r%   r%   r&   ŚEtest_publishing_does_not_cancel_workflow_when_cancel_on_publish_falseŌ   s
    zWTestPageWorkflows.test_publishing_does_not_cancel_workflow_when_cancel_on_publish_falsec                 C   sB   |   ”  |  ttf” |   ”  W d    n1 s40    Y  d S )N)re   ŚassertRaisesr   r   rh   r%   r%   r&   Ś7test_error_when_starting_multiple_in_progress_workflowsŽ   s    zITestPageWorkflows.test_error_when_starting_multiple_in_progress_workflowsc                 C   są   |   ” }|d }|d }|d }|j}|jj|d dd tjrf|  |jtjddddd	d	tj	j
d
” n|  |jt ddddd	d	”” |  |jd” |  |jj|” |j|jd dd |  |jd” | ”  |  |j|jj” d S )Nr`   r^   rW   Śapprove©ra   Śaction_namerk   r*   rl   r   rm   Zapproved)re   rt   r-   Ś	on_actionr   rq   r#   rw   rr   r
   rs   rp   r5   Zlive_revisionru   )r$   ry   r`   r^   rW   rz   r%   r%   r&   Śtest_approve_workflowä   s0    ž’’
’z'TestPageWorkflows.test_approve_workflow)Z+WAGTAIL_WORKFLOW_REQUIRE_REAPPROVAL_ON_EDITc                 C   s   |   ” }|d }|d }|d }|d }|j}|jj|d dd |  |jj|” | ”  | ”  |j}|jj|d dd | ”  |j}|  |j|” d S ©Nr`   r]   r^   rW   r   r   )re   rt   r-   r   r#   rb   r5   ©r$   ry   r`   r]   r^   rW   rz   r%   r%   r&   Ś.test_workflow_resets_when_new_revision_created  s    z@TestPageWorkflows.test_workflow_resets_when_new_revision_createdc                 C   sØ   |   ” }|d }|d }|d }|d }|j}|jj|d dd |  |jj|” | ”  | ”  |j}|jj|d dd | ”  |j}|  |j|” |  |j|j	” d S r   )
re   rt   r-   r   r#   rb   r5   ZassertNotEqualrp   ŚSTATUS_APPROVEDr   r%   r%   r&   ŚOtest_workflow_does_not_reset_when_new_revision_created_if_reapproval_turned_off  s     zaTestPageWorkflows.test_workflow_does_not_reset_when_new_revision_created_if_reapproval_turned_offc                 C   sL   |   ” }|d }|j}|jj|d dd |  |j|j” |  |j|j” d S )Nr`   Śrejectr   )re   rt   r-   r   r#   rp   ŚSTATUS_REJECTEDZSTATUS_NEEDS_CHANGESrx   r%   r%   r&   Śtest_reject_workflow*  s    z&TestPageWorkflows.test_reject_workflowc                 C   s   |   ” }|d }|d }|jjd d | ”  |jjd d | ”  |jd d |  |j|j” |  |jj|jj” |  |jj	|” |  
|j” d S )Nr`   r^   ©ra   )re   rt   r   r5   r   Śresumer#   rp   r   r-   rK   Ś	is_active)r$   ry   r`   r^   r%   r%   r&   Śtest_resume_workflow4  s    žz&TestPageWorkflows.test_resume_workflowc                 C   sŚ   |   ” }|d }| ” }|  |d jtj” |  |d jd” |jjd d | 	”  |jj
d d | 	”  | ” }|  |d jtj” |  |d jtj” |jd d | ” }|  |d jtj” |  |d jtj” d S )Nr`   r   r*   zNot startedr   )re   Zall_tasks_with_statusr#   rp   r   r   Zstatus_displayrt   r   r5   r   r   r   r   ©r$   ry   r`   Ztasksr%   r%   r&   Ś&test_tasks_with_status_on_resubmissionG  s     z8TestPageWorkflows.test_tasks_with_status_on_resubmissionc                 C   sr   |   ” }|d }|jd d | ”  |  |jtj” |  |jjtj” |  	tj
j|tjd ” ” |  	|j” d S )Nr`   r   )r`   rp   )re   Ścancelr5   r#   rp   r   r~   rt   r   rP   r!   r/   r   rM   r   r   r%   r%   r&   Śtest_cancel_workflow`  s    
’’’z&TestPageWorkflows.test_cancel_workflowc                 C   s~   t jjdd}t jjddd}tjjdd}tjj||dd tjj||dd |  t|j||g” |  t|j|g” d S )	Nr   r   Śdisabled_workflowF)r   Śactiver(   r*   r+   )	r   r!   r.   r   r   r#   ŚlistZ	workflowsZactive_workflows)r$   r,   r   r-   r%   r%   r&   Śtest_task_workflowsq  s    ’z%TestPageWorkflows.test_task_workflowsc                 C   sB   |   ” }|d }|  |j” |jjd d | ”  |  |j” d S )Nr`   r   )re   rP   Zis_at_final_taskrt   r   r5   rK   r   r%   r%   r&   Śtest_is_at_final_task~  s    z'TestPageWorkflows.test_is_at_final_taskc                 C   sś   |   ” }|d }| ” }|  |d jjtj” |jjd d | 	”  |jj
d d | 	”  | ” }|  |d jjtj” |  |d jjtj” |jd d | ” }|  |d jjtj” |  |d jjtj” |  |d jtjj|d dd”d ” d S )Nr`   r   r   r*   )r`   z-started_atz-id)re   Zall_tasks_with_stater#   rz   rp   r   r   rt   r   r5   r   r   r   r   r!   r/   Zorder_byr   r%   r%   r&   Śtest_tasks_with_state  s.    ’žžz'TestPageWorkflows.test_tasks_with_statec                 C   s  d| j _t ” | j _|  d”| j _| j  ”  tj	j
dd}tj	jdd}tj	jdd}|j |” tj	j||dd |  | j jjj|jd	 ” ” | j  ”  | | j |  d
””}|  |j|” |  |j| j ” |  |jd” | j  ”  |  | j j” |  | j j” |  | j j” d S )NTZuser1Ś
Moderatorsr   Śtest_workflow_foor[   r*   r+   r   Śuser2rj   )rW   Ślockedr
   ŚnowZ	locked_atŚcreate_userZ	locked_byr    r   r!   r"   r   r.   r   r>   Śaddr   rP   r/   r   rM   rb   rd   r#   r,   ro   rp   r5   rg   ©r$   Z
moderatorsr,   r]   r`   r%   r%   r&   Ś.test_start_workflow_group_approval_task_locked„  s&    


z@TestPageWorkflows.test_start_workflow_group_approval_task_lockedc                 C   sp   |   ” }| j ” t| jjd}|  tjjf i |¤ 	” |d ” | j 
”  |  tjjf i |¤ ” | ” d S )N)Zbase_content_typeZ	object_idr`   )re   rW   Zget_base_content_typeŚstrŚpkr#   r   r!   r/   rc   Śdeleterf   rM   )r$   Ścascadesry   Śqueryr%   r%   r&   Ś,test_workflow_state_cascade_on_object_deleteÄ  s    
žž
z>TestPageWorkflows.test_workflow_state_cascade_on_object_deleteN)T)rR   rS   rT   rU   ŚclassmethodrZ   r_   re   r	   ri   r   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   rØ   r®   r%   r%   r%   r&   rV   y   s:   


!

	




rV   c                   @   s    e Zd ZdZeZedd ZdS )ŚTestSnippetWorkflowsNc                 C   s   | j jjdd| _d S )Nr9   r:   )Śmodelr!   r.   rW   rX   r%   r%   r&   rZ   Ö  s    z"TestSnippetWorkflows.setUpTestData)rR   rS   rT   rU   r   r±   rÆ   rZ   r%   r%   r%   r&   r°   Ņ  s   r°   c                       s(   e Zd ZeZdd Z fddZ  ZS )ŚTestSnippetWorkflowsNotLockablec                 C   s   t jjdd}tjjdd}tjjdd}|j |” tjj||dd | j	 
”  | | j	|  d””}|  |j|” |  |j| j	” |  |jd” d S )	Nr    r   r”   r[   r*   r+   r¢   rj   )r   r!   r"   r   r.   r   r>   r¦   r   rW   rb   rd   r„   r#   r,   ro   rp   r§   r%   r%   r&   rØ   Ž  s    
zNTestSnippetWorkflowsNotLockable.test_start_workflow_group_approval_task_lockedc                    s   t  jddS )NF)r¬   )Śsuperr®   rh   ©Ś	__class__r%   r&   r®   š  s    zLTestSnippetWorkflowsNotLockable.test_workflow_state_cascade_on_object_delete)rR   rS   rT   r   r±   rØ   r®   Ś__classcell__r%   r%   r“   r&   r²   Ū  s   r²   )(rr   Zdjango.confr   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   Z"django.contrib.contenttypes.modelsr   Zdjango.core.exceptionsr   Zdjango.db.utilsr   Zdjango.testr   r	   Zdjango.utilsr
   Z	freezegunr   Zwagtail.modelsr   r   r   r   r   r   r   r   r   Zwagtail.test.testapp.modelsr   r   r   Z wagtail.test.utils.wagtail_testsr   r   rV   r°   r²   r%   r%   r%   r&   Ś<module>   s$   ,]  [	