o
    hg                     @   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 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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)AdminTemplateTestUtils)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      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/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 r2   h/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/admin/tests/pages/test_revisions.pysetUp       

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)r1   responsehistory_urlr2   r2   r3   test_get_revisions_index0   s   

z&TestRevisions.test_get_revisions_indexc                 C   s$   t d| jj| jjfd}| j|S )Nz!wagtailadmin_pages:revisions_viewr6   )r   r&   r:   r+   r9   r%   )r1   last_christmas_preview_urlr2   r2   r3   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:editr6   )r@   assertEqualstatus_codeassertContainsr   r&   r:   r1   r<   r2   r2   r3   test_preview_revisionB   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 )N
admin_onlyzadmin_only@email.compassword)usernameemailrJ   access_adminwagtailadminadmin)codename	app_labelmodel)user.  Locationwagtailadmin_home)create_useruser_permissionsaddr   r$   get_by_natural_keyr/   r@   rD   rE   r   )r1   admin_only_userr<   r2   r2   r3   Atest_preview_revision_with_no_page_permissions_redirects_to_adminP   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)page_idzsiteeditor@example.com)rL   rT   )r
   r$   r%   r   page_permissionsupdater:   r   r/   r@   rD   rE   )r1   st_patrickseditors_groupeditorr<   r2   r2   r3   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 | 	|j
}|d}| | | |dt d| jj| jjfd | |d	 | |d
 d S )N#wagtailadmin_pages:revisions_revertr6   rA   zEditing Event pagez/You are viewing a previous version of this pagerB   zform[data-edit-form]actionzReplace current draftzPublish this version)r   r&   r:   r+   r9   r%   rD   rE   rF   get_soupcontent
select_oneassertIsNotNone)r1   r?   r<   soupformr2   r2   r3   test_revert_revisionm   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)
log_action'wagtailadmin_pages:revisions_unscheduler6   r8   rA   zDec. 26, 2014, 9 p.m.zDec. 26, 2014, noonz!Page scheduled for publishing at )r   USE_TZr&   
go_live_atr*   publishr   r:   r9   r%   rD   rE   rF   )r1   r.   this_christmas_unschedule_urlr<   expected_date_stringr2   r2   r3   test_scheduled_revision   s(   

z%TestRevisions.test_scheduled_revisionN)__name__
__module____qualname__fixturesr4   r>   r@   rH   r\   rg   rp   r   rx   r2   r2   r2   r3   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   r:   zA DefaultStreamPageza-defaultstreampage)r'   r]   instancezAn Updated DefaultStreamPagei     
   )r
   r$   r%   	root_pager   	test_page	add_childr'   r*   first_revisionr   r,   r-   r/   r0   r2   r2   r3   r4      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 )Nrh   r6   rA   z"wagtailadmin/js/telepath/blocks.jsz'wagtailadmin/css/panels/streamfield.cssz<script src="z"></script>z<link href="z" media="all" rel="stylesheet">T)allow_extra_attrs)r   r   r:   r   r9   r%   rD   rE   rk   decoder	   assertTagInHTML)r1   test_page_revert_urlr<   html	blocks_jsstreamfield_cssr2   r2   r3   rp      s   


z(TestStreamRevisions.test_revert_revisionN)ry   rz   r{   r4   rp   r2   r2   r2   r3   r}      s    r}   c                   @   s>   e Zd Zg ZdgZdd Zdd Zdd Zdd	 Zd
d Z	dS )TestCompareRevisionsr   c                 C   r   r   r#   r0   r2   r2   r3   r4      r5   zTestCompareRevisions.setUpc                 C   s   t d| jj| jj| jjfd}| j|}| |jd | j	|ddd t d| jjfd}| 
dd	 | jjdd
D |ddddddg |j | |j}t d| jjfd}|d| d}| | | |j d d S )N$wagtailadmin_pages:revisions_comparer6   rA   <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r   r8   c                 S   s6   g | ]}|  rtd ntd|jfd| dqS )wagtailadmin_explore_rootwagtailadmin_explorer6   urllabel)is_rootr   pkget_admin_display_title).0pager2   r2   r3   
<listcomp>  s    
z?TestCompareRevisions.test_compare_revisions.<locals>.<listcomp>)	inclusiveHistoryr    Comparer   )r   r   sublabelrC   za.w-header-button[href='z']Edit)r   r&   r:   r+   r.   r9   r%   rD   rE   rF   assertBreadcrumbsItemsRenderedget_ancestorsrk   rj   rl   rm   textstrip)r1   compare_urlr<   r=   rn   edit_urledit_buttonr2   r2   r3   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 )Nr   earliestr6   rA   r   Tr   )	r   r&   r:   r.   r9   r%   rD   rE   rF   r1   r   r<   r2   r2   r3   test_compare_revisions_earliest     
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 )Nr   latestr6   rA   r   Tr   )	r   r&   r:   r+   r9   r%   rD   rE   rF   r   r2   r2   r3   test_compare_revisions_latest)  r   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)   )update_fieldsr   liver6   rA   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>Tr   )r&   r)   r-   r   r:   r+   r9   r%   rD   rE   rF   r   r2   r2   r3   test_compare_revisions_live7  s   
z0TestCompareRevisions.test_compare_revisions_liveN)
ry   rz   r{   base_breadcrumb_itemsr|   r4   r   r   r   r   r2   r2   r2   r3   r      s    -r   c                   @   *   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_datar   z8InnocentCorp is the leading supplier of rubber sprocketszfor fake moon landingsr   r6   )r
   r$   r%   homer   secret_pager   r*   old_revisionr   r   new_revisionr   r:   r   r0   r2   r2   r3   r4   O  s    z1TestCompareRevisionsWithPerUserEditHandlers.setUpc                 C   sH   |    | j| j}| |jd | j|ddd | j|ddd d S )NrA   InnocentCorp is the leading supplier of <span class="deletion">door hinges</span><span class="addition">rubber sprockets</span>Tr   z`for <span class="deletion">flying saucers</span><span class="addition">fake moon landings</span>)r/   r9   r%   r   rD   rE   rF   rG   r2   r2   r3   test_comparison_as_superuserb  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 )Nrf   rJ   )rK   rJ   r^   r_   rA   r   Tr   zmoon landings)rW   groupsrY   r   r$   r%   r/   r9   r   rD   rE   rF   assertNotContains)r1   rS   r<   r2   r2   r3    test_comparison_as_ordinary_userr  s   zLTestCompareRevisionsWithPerUserEditHandlers.test_comparison_as_ordinary_userN)ry   rz   r{   r|   r4   r   r   r2   r2   r2   r3   r   L  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 )Nr~   r   zA Statementza-statementz Early Morning Cafe, Mainland, NZz<p>hello</p>)r'   r]   locationr)   r   	StatementzVictory Monument, Bangkokz5<p>I would like very much to go into the forrest.</p>i  r      zTrue Statementz4<p>I would like very much to go into the forest.</p>   )r
   r$   r%   r   r   r   r   r'   r   r)   r*   test_page_revisionr   r,   r-   test_page_revision_newr/   r0   r2   r2   r3   r4     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:addtestsformclassadditionalfieldpager6   z<input type="text" name="code" aria-describedby="panel-child-content-child-code-helptext" required id="id_code" maxlength="5" />Tr   N)r   r   r:   r9   r%   rF   )r1   r   r<   r2   r2   r3   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.r   r6   zK<span class="deletion">forrest.</span><span class="addition">forest.</span>z<h2>Code:</h2>N)	r   r   r:   r   r   r9   r%   rF   r   r   r2   r2   r3   r     s   z<TestCompareRevisionsWithNonModelField.test_compare_revisionsN)ry   rz   r{   __doc__r|   r4   r   r   r2   r2   r2   r3   r     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-   ru   r.   approved_go_live_atr/   rS   r0   r2   r2   r3   r4     s&   



zTestRevisionsUnschedule.setUpc                 C   >   | 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
        rr   r6   rA   z5wagtailadmin/shared/revisions/confirm_unschedule.htmlN)	r9   r%   r   r&   r:   r.   rD   rE   assertTemplateUsedrG   r2   r2   r3   test_unschedule_view     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
        rr   )i90  6	 r6     N)r9   r%   r   rD   rE   rG   r2   r2   r3   $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   rr   r   r6   r   N)r9   r%   r   r&   r:   rD   rE   rG   r2   r2   r3   (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
        FrN   rM   )content_type__app_labelrP   rr   r6   rT   N)rS   is_superuserrX   rY   r   r$   r%   r-   r9   r   r&   r:   r.   rD   rE   rG   r2   r2   r3   $test_unschedule_view_bad_permissions  s   
z<TestRevisionsUnschedule.test_unschedule_view_bad_permissionsc                 C   t   | 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
        rr   r6   r8   r   N)r9   postr   r&   r:   r.   r;   assertFalser   r$   r%   approved_scheduleassertIsNone	revisionsr   rG   r2   r2   r3   test_unschedule_view_post1  &   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
        rr   r6   rC   z?next=r   N)r   r&   r:   r.   r9   r   r;   r   r   r$   r%   r   r   r   r   )r1   unschedule_urlr   r<   r2   r2   r3   'test_unschedule_view_post_with_next_urlP  s    z?TestRevisionsUnschedule.test_unschedule_view_post_with_next_urlN)ry   rz   r{   r|   r4   r   r   r   r   r   r   r2   r2   r2   r3   r     s    r   c                   @   r   )	*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/   rS   r0   r2   r2   r3   r4   q  s   
z0TestRevisionsUnscheduleForUnpublishedPages.setUpc                 C   r   r   )	r9   r%   r   r   r:   r   rD   rE   r   rG   r2   r2   r3   r   ~  r   z?TestRevisionsUnscheduleForUnpublishedPages.test_unschedule_viewc                 C   r   r   )r9   r   r   r   r:   r   r;   r   r   r$   r%   r   r   r   r   rG   r2   r2   r3   r     r   zDTestRevisionsUnscheduleForUnpublishedPages.test_unschedule_view_postN)ry   rz   r{   r|   r4   r   r   r2   r2   r2   r3   r   n  s
    r   N)#django.confr   django.contrib.authr   django.contrib.auth.modelsr   r   django.testr   django.urlsr   	freezegunr   wagtail.admin.staticfilesr	   wagtail.modelsr
   wagtail.test.testapp.modelsr   r   r   r   wagtail.test.utilsr   !wagtail.test.utils.template_testsr   wagtail.test.utils.timestampsr   r   r}   r   r   r   r   r   r2   r2   r2   r3   <module>   s*     &|9K 