a
    Dge                     @   s  d dl Z 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 d d	l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 d dlmZ d dlm Z m!Z! d dl"m#Z# G dd de#eZ$G dd deZ%dd Z&G dd de#eZ'dS )    N)settings)get_user_model)ContentType)ValidationError)DjangoJSONEncoder)TestCase)timezone)freeze_time)LogActionRegistry)registry)PagePageLogEntryPageViewRestrictionTaskWorkflowWorkflowTask)ModelLogEntry)FullFeaturedSnippet
SimplePage)WagtailTestUtilsc                   @   sL   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S )TestAuditLogManagerc                 C   sr   | j dddd| _tjjdd| _| jjtddd	| jd
d| _t	jj
dd| _t	jj
dd| _tjt	| _d S )NZadministratorzadministrator@email.compassword)usernameemailr      )pkzSimple pagesimpleHellotitleslugcontentownerinstancez	snippet 1)textz	snippet 2)Zcreate_superuseruserr   objectsgetpage	add_childr   simple_pager   create	snippet_1	snippet_2r   get_for_modelsnippet_content_typeself r3   [/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/tests/test_audit_log.pysetUp   s     
zTestAuditLogManager.setUpc                 C   sz   t  }t|& tjj| jd| jd}W d    n1 s<0    Y  | |j	| jj	 | |j| j | |j
| d S Nwagtail.edit)r&   )r   nowr	   r   r'   
log_actionr)   r&   assertEqualcontent_type	timestampr2   r8   entryr3   r3   r4   test_log_action_for_page/   s    

$z,TestAuditLogManager.test_log_action_for_pagec                 C   sx   t  }t|& tjj| jd| jd}W d    n1 s<0    Y  | |j	| j
 | |j| j | |j| d S r6   )r   r8   r	   r   r'   r9   r-   r&   r:   r;   r0   r<   r=   r3   r3   r4   test_log_action_for_snippet;   s    

$z/TestAuditLogManager.test_log_action_for_snippetc                 C   s`   t j| jd t j| jd t jt}| | d | 	t
|t
t jj| jd d S )Nr7      r)   )r   r'   r9   r)   r+   r/   r   r:   countassertListEquallistfilterr2   entriesr3   r3   r4   test_get_for_page_modelG   s    z+TestAuditLogManager.test_get_for_page_modelc                 C   s`   t j| jd t j| jd t jt}| | d | 	t
|t
t jj| jd d S )Nr7   rA   )r;   )r   r'   r9   r-   r.   r/   r   r:   rC   rD   rE   rF   r0   rG   r3   r3   r4   test_get_for_snippet_modelQ   s    z.TestAuditLogManager.test_get_for_snippet_modelc                 C   s   |  tj| j d d S )Nr   )r:   r   r'   Zget_for_userr&   rC   r1   r3   r3   r4   test_get_for_user\   s    z%TestAuditLogManager.test_get_for_userc                 C   s   t j| jd t j| jd | jjtddd| jdd}t j|d t j| j}t	t jj
| jd}| | d | t	|| t| j}| | d | t	|| d S )	Nr7   zSimple page 2Zsimple2r   r   r#   rB   rA   )r   r'   r9   r)   r+   r*   r   r&   for_instancerE   rF   r:   rC   rD   log_registryget_logs_for_instance)r2   Zother_simple_pagerH   expected_entriesr3   r3   r4   test_get_for_page_instancea   s    
z.TestAuditLogManager.test_get_for_page_instancec                 C   s   t j| jd t j| jd t j| j}tt jj| j| jj	d}| 
| d | t|| t| j}| 
| d | t|| d S )Nr7   )r;   Z	object_idr   )r   r'   r9   r-   r.   rL   rE   rF   r0   r   r:   rC   rD   rM   rN   )r2   rH   rO   r3   r3   r4   test_get_for_snippet_instancev   s    
z1TestAuditLogManager.test_get_for_snippet_instanceN)__name__
__module____qualname__r5   r?   r@   rI   rJ   rK   rP   rQ   r3   r3   r3   r4   r      s   
r   c                   @   s   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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 )0TestAuditLogc                 C   s<   t jjdd| _| jjtddddd| _tj 	  d S )Nr   idZHomepageZhome2hellor   r    r!   r#   )
r   r'   r(   	root_pager*   r   	home_pager   alldeleter1   r3   r3   r4   r5      s
    zTestAuditLog.setUpc                 C   s   |  tj d | jjtddddd}|  tj d tjd }|  |j	d	 |  |j
|j |  |j|j |  |j|  d S )
Nr   r   zmy-pageZworldrY   r#   r   r   wagtail.create)r:   r   r'   rC   r[   r*   r   Zorder_bylastactionZpage_idrW   r;   labelZget_admin_display_title)r2   r)   	log_entryr3   r3   r4   test_page_create   s    zTestAuditLog.test_page_createc                 C   sJ   d| j _| j   | j jdd}| |j | tjjdd	 d d S )NT	the-aliasZupdate_slugwagtail.publishr`   r   )
r[   livesavecreate_alias
assertTruer:   r   r'   rF   rC   )r2   aliasr3   r3   r4   ?test_alias_create_from_published_page_doesnt_log_publish_action   s    
zLTestAuditLog.test_alias_create_from_published_page_doesnt_log_publish_actionc                 C   s   | j   | tj d | j jdd | tj d | tjjdd d | j jdd | tjjdd d d S )Nr   Tr9   r   r7   rg   wagtail.revert)r[   save_revisionr:   r   r'   rC   rF   r1   r3   r3   r4   test_page_edit   s    
zTestAuditLog.test_page_editc                 C   sB   | j  }|  | tj d | tjjdd d d S )Nr   rf   rg   )r[   rp   publishr:   r   r'   rC   rF   r2   revisionr3   r3   r4   test_page_publish   s    
zTestAuditLog.test_page_publishc                 C   s>   | j jdd | j  }|  | tjjdd d d S )Nrd   re   rf   rg   r   )	r[   rj   rp   rr   r:   r   r'   rF   rC   rs   r3   r3   r4   (test_page_publish_doesnt_log_for_aliases   s    
z5TestAuditLog.test_page_publish_doesnt_log_for_aliasesc                 C   s   | j  }d| j _| j   |  | tjjdd	 d | tjjdd	 d | j  }d| j _| j   |  | tj	 d | tjjdd	 d	 | tjjdd	 d d S )
Nz	Old titlerf   rg   r   zwagtail.renamer   z	New title   rA   )
r[   rp   r   ri   rr   r:   r   r'   rF   rC   rs   r3   r3   r4   test_page_rename   s*    



zTestAuditLog.test_page_renamec                 C   s:   | j   | tj d | tjjdd d d S )Nr   wagtail.unpublishrg   )r[   	unpublishr:   r   r'   rC   rF   r1   r3   r3   r4   test_page_unpublish   s
    
z TestAuditLog.test_page_unpublishc                 C   s6   | j jdd | j   | tjjdd d d S )Nrd   re   ry   rg   r   )r[   rj   rz   r:   r   r'   rF   rC   r1   r3   r3   r4   *test_page_unpublish_doesnt_log_for_aliases   s
    
z7TestAuditLog.test_page_unpublish_doesnt_log_for_aliasesc                 C   sB   | j  }| j   | j jd|d | tjjdd d d S )NTr9   previous_revisionro   rg   r   )r[   rp   r:   r   r'   rF   rC   )r2   	revision1r3   r3   r4   test_revision_revert   s    

z!TestAuditLog.test_revision_revertc                 C   s   t j  t jdd }tjr8t|}t|t jj}n|}|| j	_
| j	 }|  tjjdd}| | d | |d jd d |j | |d jd d tj|td	dd
  d S )Nr   dayswagtail.publish.schedulerg   r   rt   rW   
go_live_atcls)datetimer8   	timedeltar   USE_TZr   
make_aware	localtimeutcr[   r   rp   rr   r   r'   rF   r:   rC   datarW   jsondumpsr   r2   r   Zexpected_go_live_atrt   Zlog_entriesr3   r3   r4   test_revision_schedule_publish   s    

z+TestAuditLog.test_revision_schedule_publishc                 C   s   | j  }| j  }tjr<ttj tjdd | j _	ntj tjdd | j _	| j jd|d}|j
|d | ttjjddddd	g d S )
Nr   r   Tr}   )r~   r`   Zflatr   ro   )r[   rp   r   r   r   r   r   r8   r   r   rr   rD   rE   r   r'   values_list)r2   r   Z	revision2Zschedule_revisionr3   r3   r4   test_revision_schedule_revert  s&    


z*TestAuditLog.test_revision_schedule_revertc                 C   s   t j  t jdd }tjr8t|}t|t jj}n|}|| j	_
| j	 }|  d |_|jdgd tjjdd}| | d | |d jd d	 |j | |d jd d
 tj|tddd  | |d jd d  d S )Nr   r   approved_go_live_at)Zupdate_fieldszwagtail.schedule.cancelrg   r   rt   rW   r   r   r   Zhas_live_version)r   r8   r   r   r   r   r   r   r   r[   r   rp   rr   r   ri   r   r'   rF   r:   rC   r   rW   r   r   r   rk   r   r3   r3   r4   test_revision_cancel_schedule-  s$    

z*TestAuditLog.test_revision_cancel_schedulec                 C   s>   | j jdd | j jdd | tjjddgd d d S )Nzwagtail.lockrn   zwagtail.unlock)Z
action__inrA   )r[   ri   r:   r   r'   rF   rC   r1   r3   r3   r4   test_page_lock_unlockF  s    z"TestAuditLog.test_page_lock_unlockc                 C   s8   | j jdddd | ttjjdddg d d S )	NAbout uszabout-us)r   r    )Zupdate_attrsr`   Tr   )rf   zwagtail.copyr^   )r[   copyrD   rE   r   r'   r   r1   r3   r3   r4   test_page_copyQ  s
    zTestAuditLog.test_page_copyc                 C   s   | j jtddddd}| j jtddddd t j }|j| j |dd	 | tjj	d
|d
 d | tjj	d|d
 d d S )NzChild 1zchild-1rX   rY   r#   zChild 2zchild-2
last-child)r&   poswagtail.reorderr`   r&   r   wagtail.mover   )rZ   r*   r   r   r'   firstmover:   r   rF   rC   )r2   Z	section_1r&   r3   r3   r4   test_page_reorderY  s    zTestAuditLog.test_page_reorderc                 C   sr   | j jtddddd}t j }|j| jd|d | t	jj
d|d	 d
 | t	jj
d|d	 d d S )Nr   ZaboutrX   rY   r#   r   )r   r&   r   r   r   r   r   )rZ   r*   r   r   r'   r   r   r[   r:   r   rF   rC   )r2   sectionr&   r3   r3   r4   test_page_moven  s    zTestAuditLog.test_page_movec                 C   s   | j jtddddd | j jtddddd}|jtdd	ddd | j   | tjjd
d d | t	tjjd
dj
dddh d d S )NZChildz
child-pagerX   rY   r#   zAnother childzchild-page-2Z
Grandchildzgrandchild-pagezwagtail.deleterg      ra   Tr   >   zGrandchild (simple page)zChild (simple page)zHomepage (simple page)zAnother child (simple page))r[   r*   r   r]   r:   r   r'   rF   rC   setr   )r2   childr3   r3   r4   test_page_delete  s2    
zTestAuditLog.test_page_deletec           
      C   s  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 | j  t j }|	| j|}t
jjdd	}| | d | |d
 jd|j|j|j|j|jjj|jjjddi dD ]}| | |j}|jj|d |dd |  t
jjd| d	}	| |	 d | |	d
 j|j|j|j|j|jj|jjd|jjj|jjjdddd | |	d
 jd W d    q1 s0    Y  qd S )Ntest_workflownametest_task_1test_task_2r   workflowtaskZ
sort_orderrA   wagtail.workflow.startrg   r   r   rW   r   rW   r   statustask_state_idnextapproverejectThis is my commentr&   action_namecommentwagtail.workflow.rW   r   r   r   r   r   r   r   )r   r'   r,   r   r   r[   rp   r   r   startr   rF   r:   rC   r   rW   r   r   current_task_state_idcurrent_task_stater   subTest	on_actionrefresh_from_dbr   )
r2   r   task_1task_2r&   workflow_stateworkflow_entryr`   
task_stater>   r3   r3   r4   test_workflow_actions  sh    
z"TestAuditLog.test_workflow_actionsc                 C   s  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 tjjdd	d
}|  t j }|	||}t
jjdd}| | d | |d jd|j|j|j|j|jjj|jjjddi dD ]}| | |j}	|	jj|	d |dd |  t
jjd| d}
| |
 d | |
d j|j|j|	j|	j|	jj|	jjd|jjj|jjjdddd | |
d jd W d    q1 s0    Y  qd S )Nr   r   r   r   r   r   rA   InitialFr%   rh   r   rg   r   r   r   r   r   r   r   r   r   r   )r   r'   r,   r   r   r   rp   r   r   r   r   rF   r:   rC   r   rW   r   r   r   r   r   r   r   r   r   )r2   r   r   r   snippetr&   r   r   r`   r   r>   r3   r3   r4   test_snippet_workflow_actions  sn    z*TestAuditLog.test_snippet_workflow_actionsc                 C   s   t jjdd}tjjdd}tjj||dd | tjjdd  | j	
  t j }|| j	|}t j }|j}|jj|d dd	 | tjjddj| d S )
Nr   r   r   r   r   rf   rg   r   r&   r   )r   r'   r,   r   r   assertFalser   rF   existsr[   rp   r   r   r   r_   r   r   r   r:   r(   r&   )r2   r   r   r&   r   	publisherr   r3   r3   r4   .test_workflow_completions_logs_publishing_user'  s    
z;TestAuditLog.test_workflow_completions_logs_publishing_userc                 C   s   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	d
}|
  t j }|||}t j }|j}|jj|d dd | tjjddj| d S )Nr   r   r   r   r   rf   rg   r   Fr   r   r   )r   r'   r,   r   r   r   r   rF   r   r   rp   r   r   r   r_   r   r   r   r:   r(   r&   )r2   r   r   r   r&   r   r   r   r3   r3   r4   6test_snippet_workflow_completions_logs_publishing_user:  s     zCTestAuditLog.test_snippet_workflow_completions_logs_publishing_userc                 C   sX   t jj| jd}| tjjdd d t j|_	|
  | tjjdd d d S )NrB   zwagtail.view_restriction.createrg   r   zwagtail.view_restriction.edit)r   r'   r,   r[   r:   r   rF   rC   ZPASSWORDZrestriction_typeri   )r2   Zrestrictionr3   r3   r4   test_page_privacyP  s    zTestAuditLog.test_page_privacyN)rR   rS   rT   r5   rc   rm   rq   ru   rv   rx   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r3   r3   r4   rU      s.   			#ADrU   c                 C   s   |  dddS )Ntest.custom_actionCustom actionTested!)Zregister_action)actionsr3   r3   r4   	test_hook`  s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestAuditLogHooksc                 C   s   t jjdd| _d S )NrA   rV   )r   r'   r(   rZ   r1   r3   r3   r4   r5   e  s    zTestAuditLogHooks.setUpc                 C   s   t  }| |d d S )Nr^   )r
   rk   action_exists)r2   log_actionsr3   r3   r4   test_register_log_actions_hookh  s    z0TestAuditLogHooks.test_register_log_actions_hookc                 C   sV   |  t"}tjj| jdd W d    n1 s20    Y  | |jjddgi d S )Nr   rg   r`   z<The log action 'test.custom_action' has not been registered.)	assertRaisesr   r   r'   r9   rZ   r:   	exceptionZmessage_dict)r2   er3   r3   r4   test_action_must_be_registeredl  s    0z0TestAuditLogHooks.test_action_must_be_registeredc                 C   s   t jj| jdd}t jjdd |  t }| |jd | 	|
d | dtP t }| |
d | |||d | |dd W d    n1 s0    Y  d S )Nr^   rg   r   zUnknown test.custom_actionZregister_log_actionsr   r   )r   r'   r9   rZ   updater   r
   r:   messager   r   register_hookr   rk   Zget_formatterZformat_messageZget_action_label)r2   rb   r   r3   r3   r4   test_action_format_message{  s$    
z,TestAuditLogHooks.test_action_format_messageN)rR   rS   rT   r5   r   r   r   r3   r3   r3   r4   r   d  s   r   )(r   r   Zdjango.confr   Zdjango.contrib.authr   Z"django.contrib.contenttypes.modelsr   Zdjango.core.exceptionsr   Zdjango.core.serializers.jsonr   Zdjango.testr   Zdjango.utilsr   Z	freezegunr	   Zwagtail.log_actionsr
   r   rM   Zwagtail.modelsr   r   r   r   r   r   Zwagtail.models.audit_logr   Zwagtail.test.testapp.modelsr   r   Zwagtail.test.utilsr   r   rU   r   r   r3   r3   r3   r4   <module>   s,    n   Y