o
    h/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   4   t dd}|  t jj|jd}| |jd d S )Ntest_workflownameid)r   saveobjectsgetr    assertEqualr   )selfr   retrieved_workflow r'   [/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/tests/test_workflow.pytest_create_workflow      
z'TestWorkflowModels.test_create_workflowc                 C   r   )N	test_taskr   r   )r   r!   r"   r#   r    r$   r   )r%   r+   retrieved_taskr'   r'   r(   test_create_task&   r*   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task
sort_order)workflow_tasks__workflow)workflow_tasks__task)r   r"   creater   r   assertInfilter)r%   r0   r1   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/url_pathpager0   )
r   r"   r5   r   r#   r   refresh_from_dbr$   workflowpager0   )r%   r0   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_typer0   footext)
r   r"   r5   r   get_for_modelr   r   r$   get_default_workflowget_workflow)r%   r0   rB   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 )Ntest_group_approvalr   )r   r"   r5   groupssetr   allr   r#   specificassertIsInstance)r%   group_approval_taskr1   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   r9   r:   r<   Hello worldhello-worldhellotitleslugcontentinstancer   )r   r"   r5   r   r#   r   r   	add_childr$   rH   
assertTrue	all_pagesr7   r    exists)r%   r0   r@   
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 )Ntest_workflow_1r   test_workflow_2r9   r:   r<   rT   rU   rV   rW   r[   zGoodbye worldzgoodbye-worldgoodbyer   )r   r"   r5   r   r#   r   r   r]   r$   rH   assertFalser_   r7   r    r`   r^   )r%   
workflow_1
workflow_2r@   ra   goodbye_pager'   r'   r(   'test_get_workflow_from_closest_ancestor_   s&    z:TestWorkflowModels.test_get_workflow_from_closest_ancestorN)__name__
__module____qualname__fixturesr)   r-   r8   rA   rJ   rS   rb   rj   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 )Nr9   r:   )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_1test_task_2r.   r/      )r   r"   r5   r   r   )r%   r0   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userrp   rw   rx   r0   )ry   rp   save_revisionr   r"   firststart)r%   r0   rw   rx   r{   rz   r'   r'   r(   start_workflow   s   
z TestPageWorkflows.start_workflowF)WAGTAIL_WORKFLOW_ENABLEDc                 C   s\  |  d | | jjd W d    n1 sw   Y  |  d | | j  W d    n1 s5w   Y  |  d | | jjd W d    n1 sRw   Y  |  d | | jj W d    n1 snw   Y  |  d | | jj W d    n1 sw   Y  |  d | | jj	 W d    d S 1 sw   Y  d S )Nr   F)
assertNumQueriesassertIsrp   has_workflowassertIsNonerH   workflow_in_progresscurrent_workflow_statecurrent_workflow_task_state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   s8  |   }|d }| |j|d  | |j|d  | |jd tjr8| |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 )Nrz   r0   rp   in_progress  r.      r   tzinfor{   rw   )r   r$   r0   content_objectstatusr   USE_TZ
created_atdatetimer
   utcrequested_bycurrent_task_stater1   revisionget_latest_revision
started_atr   finished_atr%   datarz   
task_stater'   r'   r(   test_start_workflow   s6   z%TestPageWorkflows.test_start_workflowT)"WAGTAIL_WORKFLOW_CANCEL_ON_PUBLISHc                 C   <   |   }|d    |d }|  | |jtj d S Nrp   rz   )r   r   publishr>   r$   r   r   STATUS_CANCELLEDr%   r   rz   r'   r'   r(   <test_publishing_cancels_workflow_when_cancel_on_publish_true   s
   zNTestPageWorkflows.test_publishing_cancels_workflow_when_cancel_on_publish_truec                 C   r   r   )r   r   r   r>   r$   r   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   sD   |    | ttf |    W d    d S 1 sw   Y  d S )N)r   assertRaisesr   r   r   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r3| |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 )Nrz   rx   rp   approver{   action_namer   r.   r   r   r   approved)r   r   r1   	on_actionr   r   r$   r   r   r
   r   r   r>   live_revisionr   )r%   r   rz   rx   rp   r   r'   r'   r(   test_approve_workflow   s0   
z'TestPageWorkflows.test_approve_workflow)+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 Nrz   rw   rx   rp   r   r   )r   r   r1   r   r$   r|   r>   r%   r   rz   rw   rx   rp   r   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   )
r   r   r1   r   r$   r|   r>   assertNotEqualr   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 )Nrz   rejectr   )r   r   r1   r   r$   r   STATUS_REJECTEDSTATUS_NEEDS_CHANGESr   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 )Nrz   rx   r{   )r   r   r   r>   r   resumer$   r   r   r1   r^   	is_active)r%   r   rz   rx   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 )Nrz   r   r.   zNot startedr   )r   all_tasks_with_statusr$   r   r   r   status_displayr   r   r>   r   r   r   r   r%   r   rz   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 )Nrz   r   )rz   r   )r   cancelr>   r$   r   r   r   r   r   rf   r"   r7   r   r`   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"   r5   r   r   r$   list	workflowsactive_workflows)r%   r0   r   r1   r'   r'   r(   test_task_workflowsq  s   z%TestPageWorkflows.test_task_workflowsc                 C   sB   |   }|d }| |j |jjd d |  | |j d S )Nrz   r   )r   rf   is_at_final_taskr   r   r>   r^   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 )Nrz   r   r   r.   )rz   z-started_atz-id)r   all_tasks_with_stater$   r   r   r   r   r   r   r>   r   r   r   r   r"   r7   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 )NTuser1
Moderatorsr   test_workflow_foort   r.   r/   r   user2r   )rp   lockedr
   now	locked_atcreate_user	locked_byr!   r   r"   r#   r   r5   r   rL   addr   rf   r7   r    r`   r|   r~   r$   r0   r   r   r>   r   r%   
moderatorsr0   rw   rz   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di |	 |d  | j
  | tjjdi | |  d S )N)base_content_type	object_idrz   r'   )r   rp   get_base_content_typestrpkr$   r   r"   r7   r}   deleter   r`   )r%   cascadesr   queryr'   r'   r(   ,test_workflow_state_cascade_on_object_delete  s   

$z>TestPageWorkflows.test_workflow_state_cascade_on_object_deleteN)T)rk   rl   rm   rn   classmethodrs   ry   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   ro   y   s<    


!

	




ro   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 )NrC   rD   )modelr"   r5   rp   rq   r'   r'   r(   rs     s   z"TestSnippetWorkflows.setUpTestData)rk   rl   rm   rn   r   r   r   rs   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   rt   r.   r/   r   r   )r   r"   r#   r   r5   r   rL   r   r   rp   r|   r~   r   r$   r0   r   r   r   r'   r'   r(   r     s   
zNTestSnippetWorkflowsNotLockable.test_start_workflow_group_approval_task_lockedc                    s   t  jddS )NF)r   )superr   r   	__class__r'   r(   r     s   zLTestSnippetWorkflowsNotLockable.test_workflow_state_cascade_on_object_delete)rk   rl   rm   r   r   r   r   __classcell__r'   r'   r   r(   r     s    r   )(r   django.confr   django.contrib.authr   django.contrib.auth.modelsr   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   django.db.utilsr   django.testr   r	   django.utilsr
   	freezegunr   wagtail.modelsr   r   r   r   r   r   r   r   r   wagtail.test.testapp.modelsr   r   r    wagtail.test.utils.wagtail_testsr   r   ro   r   r   r'   r'   r'   r(   <module>   s&    ,]  [	