U
    {ha                     @   s  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mZ d d
lmZ d dlmZ G dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZ dS )    )settings)get_user_model)Group
Permission)TestCase)reverse)freeze_time)versioned_static)Page)DefaultStreamPage	EventPageFormClassAdditionalFieldPage
SecretPage)WagtailTestUtils)local_datetimec                   @   sZ   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
eddd ZdS )TestRevisions	test.jsonc                 C   s   t jjdd| _d| j_d| j_d| j_| j | _t	ddd| j_
| j  d	| j_d
| j_d| j_| j | _t	ddd| j_
| j  |   d S N/home/events/christmas/Zurl_pathLast Christmas
2013-12-25Q<p>Last Christmas I gave you my heart, but the very next day you gave it away</p>        This Christmas
2014-12-25H<p>This year, to save me from tears, I'll give it to someone special</p>  r   objectsgetchristmas_eventtitle	date_frombodysave_revisionlast_christmas_revisionr   
created_atsavethis_christmas_revisionloginself r/   p/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/tests/pages/test_revisions.pysetUp   s     

zTestRevisions.setUpc                 C   s<   | j td| jjfd}td| jjfd}| || d S )Nz"wagtailadmin_pages:revisions_indexargswagtailadmin_pages:history)clientr"   r   r#   idassertRedirects)r.   responseZhistory_urlr/   r/   r0   test_get_revisions_index/   s      z&TestRevisions.test_get_revisions_indexc                 C   s$   t d| jj| jjfd}| j|S )Nz!wagtailadmin_pages:revisions_viewr2   )r   r#   r6   r(   r5   r"   )r.   last_christmas_preview_urlr/   r/   r0   request_preview_revision:   s
    z&TestRevisions.request_preview_revisionc                 C   sL   |   }| |jd | |d | |d | |td| jjfd d S )N   "Last Christmas I gave you my heartzEdit this pagewagtailadmin_pages:editr2   )r;   assertEqualstatus_codeassertContainsr   r#   r6   r.   r8   r/   r/   r0   test_preview_revisionA   s    z#TestRevisions.test_preview_revisionc                 C   sd   | j dddd}|jtjjdddd | j|d	 |  }| |j	d
 | |d t
d d S )NZ
admin_onlyzadmin_only@email.compassword)usernameemailrD   access_adminwagtailadminZadmin)codenameZ	app_labelmodel)user.  ZLocationZwagtailadmin_home)create_useruser_permissionsaddr   r!   Zget_by_natural_keyr,   r;   r?   r@   r   )r.   Zadmin_only_userr8   r/   r/   r0   Atest_preview_revision_with_no_page_permissions_redirects_to_adminO   s         zOTestRevisions.test_preview_revision_with_no_page_permissions_redirects_to_adminc                 C   s`   t jjdd}tjjdd}|jj|jd t jjdd}| | | 	 }| 
|jd d S )	Nzsaint-patrick)slugSite-wide editorsname)Zpage_idzsiteeditor@example.com)rF   rL   )r
   r!   r"   r   Zpage_permissionsupdater6   r   r,   r;   r?   r@   )r.   Zst_patricksZeditors_groupeditorr8   r/   r/   r0   2test_preview_revision_forbidden_without_permission_   s    
z@TestRevisions.test_preview_revision_forbidden_without_permissionc                 C   s   t d| jj| jjfd}| j|}| |jd | |d | |d | |d d| jj }| || | |d | |d	 d S )
N#wagtailadmin_pages:revisions_revertr2   r<   zEditing Event pagez/You are viewing a previous version of this pager=   z2<input type="hidden" name="revision" value="%d" />zReplace current draftzPublish this version	r   r#   r6   r(   r5   r"   r?   r@   rA   )r.   r:   r8   Zrevision_fieldr/   r/   r0   test_revert_revisionl   s     z"TestRevisions.test_revert_revisionz2014-12-20 12:00:00c                 C   s   t jrd| j_nd| j_| jjdd}|jdd td| jj|jfd}| j	td| jjfd}| 
|jd t jr|d	}nd
}| |d|  | || d S )Nz2014-12-26T12:00:00.000Zz2014-12-26T12:00:00T)Z
log_action'wagtailadmin_pages:revisions_unscheduler2   r4   r<   zDec. 26, 2014, 9 p.m.zDec. 26, 2014, noonz!Page scheduled for publishing at )r   ZUSE_TZr#   Z
go_live_atr'   publishr   r6   r5   r"   r?   r@   rA   )r.   r+   Zthis_christmas_unschedule_urlr8   Zexpected_date_stringr/   r/   r0   test_scheduled_revision   s*    
 z%TestRevisions.test_scheduled_revisionN)__name__
__module____qualname__fixturesr1   r9   r;   rC   rP   rW   rZ   r   r]   r/   r/   r/   r0   r      s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestStreamRevisionsc                 C   sh   t jjdd| _tddd| _| jj| jd d| j_| j | _	t
dd	d
| j	_| j	  |   d S )N   r6   zA DefaultStreamPageza-defaultstreampage)r$   rQ   instancezAn Updated DefaultStreamPagei     
   )r
   r!   r"   	root_pager   	test_page	add_childr$   r'   first_revisionr   r)   r*   r,   r-   r/   r/   r0   r1      s    
zTestStreamRevisions.setUpc                 C   s|   t d| jj| jjfd}| j|}| |jd |j	 }t
d}t
d}| d| d| | jd| d	|d
d d S )NrX   r2   r<   z"wagtailadmin/js/telepath/blocks.jsz'wagtailadmin/css/panels/streamfield.cssz<script src="z"></script>z<link href="z" media="all" rel="stylesheet">T)Zallow_extra_attrs)r   rj   r6   rl   r5   r"   r?   r@   contentdecoder	   ZassertTagInHTML)r.   Ztest_page_revert_urlr8   htmlZ	blocks_jsZstreamfield_cssr/   r/   r0   rZ      s    

z(TestStreamRevisions.test_revert_revisionN)r^   r_   r`   r1   rZ   r/   r/   r/   r0   rb      s   rb   c                   @   s:   e Zd ZdgZdd Zdd Zdd Zdd	 Zd
d ZdS )TestCompareRevisionsr   c                 C   s   t jjdd| _d| j_d| j_d| j_| j | _t	ddd| j_
| j  d	| j_d
| j_d| j_| j | _t	ddd| j_
| j  |   d S r   r    r-   r/   r/   r0   r1      s     

zTestCompareRevisions.setUpc                 C   sL   t d| jj| jj| jjfd}| j|}| |jd | j	|ddd d S )N$wagtailadmin_pages:revisions_comparer2   r<   <span class="deletion">Last Christmas I gave you my heart, but the very next day you gave it away</span><span class="addition">This year, to save me from tears, I&#39;ll give it to someone special</span>Tro   )
r   r#   r6   r(   r+   r5   r"   r?   r@   rA   r.   compare_urlr8   r/   r/   r0   test_compare_revisions   s    z+TestCompareRevisions.test_compare_revisionsc                 C   sH   t d| jjd| jjfd}| j|}| |jd | j|ddd d S )Nrq   Zearliestr2   r<   rr   Trs   )	r   r#   r6   r+   r5   r"   r?   r@   rA   rt   r/   r/   r0   test_compare_revisions_earliest   s    z4TestCompareRevisions.test_compare_revisions_earliestc                 C   sH   t d| jj| jjdfd}| j|}| |jd | j|ddd d S )Nrq   Zlatestr2   r<   rr   Trs   rY   rt   r/   r/   r0   test_compare_revisions_latest  s    z2TestCompareRevisions.test_compare_revisions_latestc                 C   s`   d| j _| j jdgd td| j j| jjdfd}| j|}| |j	d | j
|dd	d
 d S )NzE<p>This year, to save me from tears, I'll just feed it to the dog</p>r&   )Zupdate_fieldsrq   liver2   r<   z<span class="deletion">Last Christmas I gave you my heart, but the very next day you gave it away</span><span class="addition">This year, to save me from tears, I&#39;ll just feed it to the dog</span>Trs   )r#   r&   r*   r   r6   r(   r5   r"   r?   r@   rA   rt   r/   r/   r0   test_compare_revisions_live  s    z0TestCompareRevisions.test_compare_revisions_liveN)	r^   r_   r`   ra   r1   rv   rw   rx   rz   r/   r/   r/   r0   rp      s   rp   c                   @   s*   e Zd ZdgZdd Zdd Zdd ZdS )	+TestCompareRevisionsWithPerUserEditHandlersr   c                 C   s|   t jjdd| _tdddd| _| jj| jd | j | _d| j_	d	| j_
| j | _td
| jj| jj| jjfd| _d S )Nz/home/r   zSecret pagez3InnocentCorp is the leading supplier of door hingeszfor flying saucers)r$   boring_datasecret_datare   z8InnocentCorp is the leading supplier of rubber sprocketszfor fake moon landingsrq   r2   )r
   r!   r"   homer   Zsecret_pagerk   r'   Zold_revisionr|   r}   Znew_revisionr   r6   ru   r-   r/   r/   r0   r1   -  s     z1TestCompareRevisionsWithPerUserEditHandlers.setUpc                 C   sH   |    | j| j}| |jd | j|ddd | j|ddd d S )Nr<   InnocentCorp is the leading supplier of <span class="deletion">door hinges</span><span class="addition">rubber sprockets</span>Trs   z`for <span class="deletion">flying saucers</span><span class="addition">fake moon landings</span>)r,   r5   r"   ru   r?   r@   rA   rB   r/   r/   r0   test_comparison_as_superuser@  s    zHTestCompareRevisionsWithPerUserEditHandlers.test_comparison_as_superuserc                 C   sn   | j ddd}|jtjjdd | jddd | j| j}| 	|j
d | j|ddd	 | |d
 d S )NrV   rD   )rE   rD   rR   rS   r<   r   Trs   zmoon landings)rM   groupsrO   r   r!   r"   r,   r5   ru   r?   r@   rA   assertNotContains)r.   rK   r8   r/   r/   r0    test_comparison_as_ordinary_userP  s    zLTestCompareRevisionsWithPerUserEditHandlers.test_comparison_as_ordinary_userN)r^   r_   r`   ra   r1   r   r   r/   r/   r/   r0   r{   *  s   r{   c                   @   s.   e Zd ZdZdgZdd Zdd Zdd Zd	S )
%TestCompareRevisionsWithNonModelFieldz
    Tests if form fields defined in the base_form_class will not be included.
    in revisions view as they are not actually on the model.
    Flagged in issue #3737
    Note: Actual tests for comparison classes can be found in test_compare.py
    r   c                 C   s   t jjdd| _tddddd| _| jj| jd d	| j_d
| j_d| j_	| j
 | _tddd| j_| j  d| j_d
| j_d| j_	| j
 | _tddd| j_| j  |   d S )Nrc   rd   zA Statementza-statementz Early Morning Cafe, Mainland, NZz<p>hello</p>)r$   rQ   locationr&   re   Z	StatementzVictory Monument, Bangkokz5<p>I would like very much to go into the forrest.</p>i  rh      zTrue Statementz4<p>I would like very much to go into the forest.</p>   )r
   r!   r"   ri   r   rj   rk   r$   r   r&   r'   test_page_revisionr   r)   r*   test_page_revision_newr,   r-   r/   r/   r0   r1   n  s*    

z+TestCompareRevisionsWithNonModelField.setUpc                 C   s6   t ddd| jjfd}| j|}| j|ddd dS )	z;First ensure that the non-model field is appearing in edit.zwagtailadmin_pages:addZtestsZformclassadditionalfieldpager2   z<input type="text" name="code" aria-describedby="panel-child-content-child-code-helptext" required id="id_code" maxlength="5" />Trs   N)r   rj   r6   r5   r"   rA   )r.   edit_urlr8   r/   r/   r0   test_base_form_class_used  s    z?TestCompareRevisionsWithNonModelField.test_base_form_class_usedc                 C   sF   t d| jj| jj| jjfd}| j|}| |d | |d dS )z:Confirm that the non-model field is not shown in revision.rq   r2   zK<span class="deletion">forrest.</span><span class="addition">forest.</span>z<h2>Code:</h2>N)	r   rj   r6   r   r   r5   r"   rA   r   rt   r/   r/   r0   rv     s    z<TestCompareRevisionsWithNonModelField.test_compare_revisionsN)r^   r_   r`   __doc__ra   r1   r   rv   r/   r/   r/   r0   r   c  s
    r   c                   @   sJ   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S )TestRevisionsUnscheduler   c                 C   s   t jjdd| _d| j_d| j_d| j_| j | _t	ddd| j_
| j  | j  d	| j_d
| j_d| j_| j | _t	ddd| j_
| j  t	ddd| j_| j  |  | _d S )Nr   r   r   r   r   r   r   r   r   r   r   r      )r   r!   r"   r#   r$   r%   r&   r'   r(   r   r)   r*   r\   r+   approved_go_live_atr,   rK   r-   r/   r/   r0   r1     s&    



zTestRevisionsUnschedule.setUpc                 C   s>   | j td| jj| jjfd}| |jd | |d dS zR
        This tests that the unschedule view responds with a confirm page
        r[   r2   r<   z5wagtailadmin/shared/revisions/confirm_unschedule.htmlN)	r5   r"   r   r#   r6   r+   r?   r@   assertTemplateUsedrB   r/   r/   r0   test_unschedule_view  s     z,TestRevisionsUnschedule.test_unschedule_viewc                 C   s&   | j tddd}| |jd dS )`
        This tests that the unschedule view returns an error if the page id is invalid
        r[   )i90  6	 r2     N)r5   r"   r   r?   r@   rB   r/   r/   r0   $test_unschedule_view_invalid_page_id  s    
z<TestRevisionsUnschedule.test_unschedule_view_invalid_page_idc                 C   s.   | j td| jjdfd}| |jd dS )r   r[   r   r2   r   N)r5   r"   r   r#   r6   r?   r@   rB   r/   r/   r0   (test_unschedule_view_invalid_revision_id  s    
z@TestRevisionsUnschedule.test_unschedule_view_invalid_revision_idc                 C   s^   d| j _| j jtjjddd | j   | jt	d| j
j| jjfd}| |jd dS )	ze
        This tests that the unschedule view doesn't allow users without publish permissions
        FrH   rG   )Zcontent_type__app_labelrI   r[   r2   rL   N)rK   Zis_superuserrN   rO   r   r!   r"   r*   r5   r   r#   r6   r+   r?   r@   rB   r/   r/   r0   $test_unschedule_view_bad_permissions  s     
z<TestRevisionsUnschedule.test_unschedule_view_bad_permissionsc                 C   st   | j td| jj| jjfd}| |td| jjfd | tj	j
| jjdj | | jjj
| jjdj dS z`
        This posts to the unschedule view and checks that the revision was unscheduled
        r[   r2   r4   rd   N)r5   postr   r#   r6   r+   r7   assertFalser   r!   r"   approved_scheduleassertIsNone	revisionsr   rB   r/   r/   r0   test_unschedule_view_post  s$    z1TestRevisionsUnschedule.test_unschedule_view_postc                 C   s   t d| jj| jjfd}t d| jjfd}| j| d| }| || | tj	j
| jjdj | | jjj
| jjdj dS )zT
        This tests that the redirect response follows the "next" parameter
        r[   r2   r>   z?next=rd   N)r   r#   r6   r+   r5   r   r7   r   r   r!   r"   r   r   r   r   )r.   Zunschedule_urlr   r8   r/   r/   r0   'test_unschedule_view_post_with_next_url.  s    z?TestRevisionsUnschedule.test_unschedule_view_post_with_next_urlN)r^   r_   r`   ra   r1   r   r   r   r   r   r   r/   r/   r/   r0   r     s   r   c                   @   s*   e Zd ZdgZdd Zdd Zdd ZdS )	*TestRevisionsUnscheduleForUnpublishedPagesr   c                 C   s\   t jjdd| _d| j_d| j_d| j_| j | _t	ddd| j_
| j  |  | _d S )	Nz)/home/events/tentative-unpublished-event/r   zUnpublished Pager   z<p>Some Content</p>r   r   r   )r   r!   r"   unpublished_eventr$   r%   r&   r'   unpublished_revisionr   r)   r*   r,   rK   r-   r/   r/   r0   r1   O  s    
z0TestRevisionsUnscheduleForUnpublishedPages.setUpc                 C   s>   | j td| jj| jjfd}| |jd | |d dS r   )	r5   r"   r   r   r6   r   r?   r@   r   rB   r/   r/   r0   r   \  s     z?TestRevisionsUnscheduleForUnpublishedPages.test_unschedule_viewc                 C   st   | j td| jj| jjfd}| |td| jjfd | tj	j
| jjdj | | jjj
| jjdj dS r   )r5   r   r   r   r6   r   r7   r   r   r!   r"   r   r   r   r   rB   r/   r/   r0   r   k  s$    zDTestRevisionsUnscheduleForUnpublishedPages.test_unschedule_view_postN)r^   r_   r`   ra   r1   r   r   r/   r/   r/   r0   r   L  s   r   N)!Zdjango.confr   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   r   Zdjango.testr   Zdjango.urlsr   Z	freezegunr   Zwagtail.admin.staticfilesr	   Zwagtail.modelsr
   Zwagtail.test.testapp.modelsr   r   r   r   Zwagtail.test.utilsr   Zwagtail.test.utils.timestampsr   r   rb   rp   r{   r   r   r   r/   r/   r/   r0   <module>   s&    &`9K 