o
    hpL                     @   s8  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
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mZ d dlmZmZ d dlmZ d dlm Z  G dd dee
Z!G dd de!Z"G dd de"Z#G dd de!Z$G dd de$Z%G dd de e!Z&G dd de!Z'dS )    N)settings)quote)
Permission)ContentType)TestCaseoverride_settings)reversetimezonelocalize)freeze_time)get_user_display_name)WorkflowWorkflowContentTypeWorkflowState)FullFeaturedSnippetModeratedModel)WagtailTestUtils)AdminTemplateTestUtilsc                   @   s.   e Zd ZeZdd Zedd ZdddZdS )	BaseWorkflowsTestCasec                 C   s^   |   | _| jjjdd| _| j   tj	| j| _
tj | _tjj| j
| jd d S )NI'm a full-featured snippet!text)content_typeworkflow)loginusermodelobjectscreateobjectsave_revisionpublishr   get_for_modelr   r   firstr   r   self r(   e/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/snippets/tests/test_workflows.pysetUp!   s   

zBaseWorkflowsTestCase.setUpc                 C   s
   | j jjS N)r   _metaverbose_namer&   r(   r(   r)   
model_name.   s   
z BaseWorkflowsTestCase.model_nameNc                 C   s0   |d ur|nt | jjg}t| jj||dS )Nargs)r   r!   pkr   snippet_viewsetget_url_name)r'   namer0   r(   r(   r)   get_url2   s   zBaseWorkflowsTestCase.get_urlr+   )	__name__
__module____qualname__r   r   r*   propertyr.   r5   r(   r(   r(   r)   r      s    
r   c                   @   >   e Zd Zdd Zdd Zdd Zeddd	d
 Zdd ZdS )TestCreateViewc                 C   s   | j | ddS Naddr(   clientgetr5   r&   r(   r(   r)   r@   8      zTestCreateView.getc                 C   s   | j | dd|S r<   r?   postr5   r'   	post_datar(   r(   r)   rC   ;   s   zTestCreateView.postc                 C   *   |   }| |jd | j|ddd d S N   z`<button type="submit" name="action-submit" value="Submit to Moderators approval" class="button">   )countr@   assertEqualstatus_codeassertContainsr'   responser(   r(   r)   test_get_workflow_buttons_shown>      
z.TestCreateView.test_get_workflow_buttons_shownFWAGTAIL_WORKFLOW_ENABLEDc                 C   &   |   }| |jd | |d d S NrH   zname="action-submit"r@   rL   rM   assertNotContainsrO   r(   r(   r)   :test_get_workflow_buttons_not_shown_when_workflow_disabledG      zITestCreateView.test_get_workflow_buttons_not_shown_when_workflow_disabledc                 C   s   |  ddd}| jjjdd}| || dd | || j | |jd | 	|j
 | 	|j | |jjtj | |jjd | |jj|j d S )NzNewly createdSubmitr   zaction-submitr   listr(   )rC   r   r   r@   assertRedirectsr5   assertIsInstancerL   r   assertFalselivefirst_published_atcurrent_workflow_statestatusr   STATUS_IN_PROGRESSlatest_revision
object_strcurrent_workflow_task_staterevision)r'   rP   r!   r(   r(   r)   test_post_submit_for_moderationM   s    z.TestCreateView.test_post_submit_for_moderationN	r6   r7   r8   r@   rC   rQ   r   rY   rj   r(   r(   r(   r)   r;   7       	
r;   c                   @      e Zd ZeZdS )TestCreateViewNotLockableNr6   r7   r8   r   r   r(   r(   r(   r)   rn   i       rn   c                   @   r:   )TestEditViewc                 C   s   | j | dS Neditr>   r&   r(   r(   r)   r@   n   s   zTestEditView.getc                 C   s   | j | d|S rr   rB   rD   r(   r(   r)   rC   q   rA   zTestEditView.postc                 C   rF   rG   rK   rO   r(   r(   r)   rQ   t   rR   z,TestEditView.test_get_workflow_buttons_shownFrS   c                 C   rU   rV   rW   rO   r(   r(   r)   rY   }   rZ   zGTestEditView.test_get_workflow_buttons_not_shown_when_workflow_disabledc                 C   s   |  ddd}| j  | || dd | | j| j | | jjd | 	| jj
 | 	| jj | 	| jj | | jjjtj | | jjjd | | jjj| jj d S )NEdited!r[   r\   r]   r(   r   )rC   r!   refresh_from_dbr^   r5   r_   r   rL   r   
assertTruera   rb   has_unpublished_changesrc   rd   r   re   rf   rg   rh   ri   rO   r(   r(   r)   rj      s"   
z,TestEditView.test_post_submit_for_moderationNrk   r(   r(   r(   r)   rq   m   rl   rq   c                   @   rm   )TestEditViewNotLockableNro   r(   r(   r(   r)   rx      rp   rx   c                       s^   e Zd Zejdddg Z fddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Z  ZS )TestWorkflowHistorySnippetsz/admin/snippets/)labelurlc                    s\  t    tddddddtddddddtddddddtdddd	ddtddd
dddg| _tjrOdd | jD | jd d < dd | jD | _n	dd | jD | _| d| _t	| j| _
t	| j| _d| j_t| jd  | j  W d    n1 sw   Y  t| jd  | j| j| j| _W d    d S 1 sw   Y  d S )Ni  rI   
   r                        c                 S   s   g | ]}t j|tj jd qS )r	   )r
   
make_awaredatetimeutc.0	timestampr(   r(   r)   
<listcomp>   s    z-TestWorkflowHistory.setUp.<locals>.<listcomp>c                 S   s   g | ]
}t t|d qS c)r   r
   	localtimer   r(   r(   r)   r      s    c                 S   s   g | ]}t |d qS r   r   r   r(   r(   r)   r      s    
	moderatorrt   )superr*   r   
timestampsr   USE_TZlocalized_timestampscreate_superuserr   r   moderator_namer   	user_namer!   r   r   r"   r   startworkflow_stater&   	__class__r(   r)   r*      s6   

"zTestWorkflowHistory.setUpc                 C   s   | j | d}| |jd | |d | || d | || dt| jj	| j
jf | |d | |d | |d d S )	Nworkflow_historyrH   z1wagtailadmin/shared/workflow_history/listing.htmlrs   workflow_history_detailModerators approvalIn progresstest@email.com)r?   r@   r5   rL   rM   assertTemplateUsedrN   r   r!   r1   r   idrO   r(   r(   r)   test_get_index   s    	z"TestWorkflowHistory.test_get_indexc                 C   sR   d| j _| j jtjjddd | j   | j| 	d}| 
|td d S )NFwagtailadminaccess_admincontent_type__app_labelcodenamer   wagtailadmin_home)r   is_superuseruser_permissionsr=   r   r   r@   saver?   r5   r^   r   rO   r(   r(   r)   #test_get_index_with_bad_permissions   s   
z7TestWorkflowHistory.test_get_index_with_bad_permissionsc           	   	   C   s  | j j}t| jd  |jj|| jdd W d    n1 s w   Y  | j   t| jd  | jj	| j
d | j j| j
d W d    n1 sLw   Y  | j   | dt| jj| j jf}| j| | d | j|}W d    n1 sw   Y  | |jd | |d	 | || d
 | || d | |d | |d | |j}|d}| | dd |dD }| |dd| j d| jd  gd| j d| jd  dgg |d}| | dd |dD }| || jd dg| jd d| j g| jd dg| jd dgg | |d | |d | |d | |d  | jd!d"d#d$d%| d
t| jd%| dd&d%d'd(t| jd)g}|  ||j d S )*Nr   rejectr   action_namer   r   r      rH   0wagtailadmin/shared/workflow_history/detail.htmlrs   r   <div class="w-tabs" data-tabs><div class="tab-content">#tab-tasks tablec                 S       g | ]}d d | dD qS )c                 S      g | ]	}|j d ddqS  T)	separatorstripget_textr   tdr(   r(   r)   r         BTestWorkflowHistory.test_get_detail.<locals>.<listcomp>.<listcomp>r   selectr   trr(   r(   r)   r         z7TestWorkflowHistory.test_get_detail.<locals>.<listcomp>r   Initial RevisionRejected by  at 
Edited by r   #tab-timeline tablec                 S   r   )c                 S   r   r   r   r   r(   r(   r)   r   ,  r   r   r   r   r   r(   r(   r)   r   +  r   Edited Moderators approval Rejected by rI   Workflow startedr   rt   r   r   r]   r(   r/   zFull-featured snippets)r|   r{   zWorkflow history zWorkflow progress)r|   r{   sublabel)!r   current_task_stater   r   task	on_actionr   ru   r!   r"   r   resumer5   r   r1   r   r?   r@   assertNumQueriesrL   rM   r   rN   get_soupcontent
select_oneassertIsNotNoner   r   r   r   strassertBreadcrumbsItemsRendered)	r'   
task_stater|   rP   souptaskscellstimelineitemsr(   r(   r)   test_get_detail   s   






z#TestWorkflowHistory.test_get_detailc              
   C   s  | j j}t| jd  |jj|| jdd W d    n1 s w   Y  | j   t| jd  | jj	| j
d | j j| j
d W d    n1 sLw   Y  | j   t| jd  | j j}|jj|| jdd W d    n1 svw   Y  | j   | dt| jj| j jf}| j| | d	 | j|}W d    n1 sw   Y  | |jd
 | |d | || d | || d | |d | |d | |j}|d}| | dd |dD }| |dd| j d| jd  gd| j d| jd  d| j d| jd  gg |d}| | dd |dD }| || jd dg| jd d| j g| jd dg| jd d| j g| jd d g| jd! dgg | |d" | |d# | |d$ | |d% | |d& d S )'Nr   r   r   r   r   r   approver      rH   r   rs   r   r   r   r   c                 S   r   )c                 S   r   r   r   r   r(   r(   r)   r     r   LTestWorkflowHistory.test_get_detail_completed.<locals>.<listcomp>.<listcomp>r   r   r   r(   r(   r)   r     r   zATestWorkflowHistory.test_get_detail_completed.<locals>.<listcomp>r   r   r   r   r   zApproved by r   c                 S   r   )c                 S   r   r   r   r   r(   r(   r)   r     r   r   r   r   r   r(   r(   r)   r     r   zWorkflow completed Approvedz Moderators approval Approved by r   r   rI   r   r   rt   r   zWorkflow completedr   r   ) r   r   r   r   r   r   r   ru   r!   r"   r   r   r5   r   r1   r   r?   r@   r   rL   rM   r   rN   r   r   r   r   r   r   r   r   rX   )r'   r   r|   rP   r   r   r   r   r(   r(   r)   test_get_detail_completedb  s   








!z-TestWorkflowHistory.test_get_detail_completedc                 C   sd   d| j _| j jtjjddd | j   | j| 	dt
| jj| jjf}| |td d S )NFr   r   r   r   r   )r   r   r   r=   r   r   r@   r   r?   r5   r   r!   r1   r   r   r^   r   rO   r(   r(   r)   $test_get_detail_with_bad_permissions  s   
z8TestWorkflowHistory.test_get_detail_with_bad_permissionsc                 C   sB   | j jjdd | j| dt| jjf}| j	|ddd d S )NzCan be better)commenthistoryz*<div>Comment: <em>Can be better</em></div>T)html)
r   r   r   r?   r@   r5   r   r!   r1   rN   rO   r(   r(   r)    test_get_history_renders_comment  s   
z4TestWorkflowHistory.test_get_history_renders_comment)r6   r7   r8   r   base_breadcrumb_itemsr*   r   r   r   r   r   r   __classcell__r(   r(   r   r)   ry      s    "tory   c                       s6   e Zd Z fddZdd Zedddd Z  ZS )	TestConfirmWorkflowCancellationc                    s4   t    d| j_| j  | j| j| j| _d S )Nrt   )	r   r*   r!   r   r"   r   r   r   r   r&   r   r(   r)   r*     s   

z%TestConfirmWorkflowCancellation.setUpc                 C   sH   | j | d}| |jd | |d | |d | |d d S )Nconfirm_workflow_cancellationrH   7wagtailadmin/generic/confirm_workflow_cancellation.htmlzGPublishing this full-featured snippet will cancel the current workflow.z;Would you still like to publish this full-featured snippet?)r?   r@   r5   rL   rM   r   rN   rO   r(   r(   r)   &test_get_confirm_workflow_cancellation  s   zFTestConfirmWorkflowCancellation.test_get_confirm_workflow_cancellationF)"WAGTAIL_WORKFLOW_CANCEL_ON_PUBLISHc                 C   sF   | j | d}| |jd | |d | |j ddi d S )Nr   rH   r   stepno_confirmation_needed)	r?   r@   r5   rL   rM   assertTemplateNotUsedassertJSONEqualr   decoderO   r(   r(   r)   <test_get_confirm_workflow_cancellation_with_disabled_setting  s   z\TestConfirmWorkflowCancellation.test_get_confirm_workflow_cancellation_with_disabled_setting)r6   r7   r8   r*   r   r   r   r   r(   r(   r   r)   r     s
    r   )(r   django.confr   django.contrib.admin.utilsr   django.contrib.auth.modelsr   "django.contrib.contenttypes.modelsr   django.testr   r   django.urlsr   django.utilsr
   django.utils.formatsr   	freezegunr   wagtail.admin.utilsr   wagtail.modelsr   r   r   wagtail.test.testapp.modelsr   r   wagtail.test.utilsr   !wagtail.test.utils.template_testsr   r   r;   rn   rq   rx   ry   r   r(   r(   r(   r)   <module>   s0    23  O