U
    {®Þh¶a  ã                   @   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 d d	lmZmZmZmZ d d
lmZ G dd„ deeƒZdd„ ZG dd„ deeƒZG dd„ deeƒZG dd„ deeƒZdS )é    N©Úwraps)ÚTestCase)Úreverse)Útimezone)Úfreeze_time)ÚPreviewOnEdit)ÚPage)ÚEventCategoryÚMultiPreviewModesPageÚ
SimplePageÚ
StreamPage)ÚWagtailTestUtilsc                   @   s   e Zd ZdZdd„ ZdS )ÚTestIssue2599ar  
    When previewing a page on creation, we need to assign it a path value consistent with its
    (future) position in the tree. The naive way of doing this is to give it an index number
    one more than numchild - however, index numbers are not reassigned on page deletion, so
    this can result in a path that collides with an existing page (which is invalid).
    c                 C   s   t jjdd}t dd}|j|d t dd}|j|d | ¡  |  ¡  ddd	d
dœ}tddd|jfd}| j 	||¡}|  
|jd¡ |  |j ¡ dddœ¡ | j |¡}|  
|jd¡ |  |d¡ |  |d¡ |  
|jd j|jd ¡ |  |jd j |j¡¡ |  
|jd  ¡ |¡ d S )Né   ©ÚidÚchild1©Útitle©ÚinstanceÚchild2z	New page!zSome contentzhello-worldZSubmit)r   ÚcontentÚslugzaction-submitú!wagtailadmin_pages:preview_on_addÚtestsZ
simplepage©ÚargséÈ   T©Zis_validZis_availableútests/simple_page.htmlÚselfé   )r	   ÚobjectsÚgetÚ	add_childÚdeleteÚloginr   r   ÚclientÚpostÚassertEqualÚstatus_codeÚassertJSONEqualr   ÚdecodeÚassertTemplateUsedÚassertContainsÚcontextÚdepthZ
assertTrueÚpathÚ
startswithZ
get_parent)r"   Zhomepager   r   Ú	post_dataÚpreview_urlÚresponse© r8   ún/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/tests/pages/test_preview.pyÚtest_issue_2599   s:    

ü
þþzTestIssue2599.test_issue_2599N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r:   r8   r8   r8   r9   r      s   r   c                    s   ‡ fdd„}|S )Nc                    s   t ˆ ƒ‡ ‡fdd„ƒ}|S )Nc                     s*   ˆj  ¡  zˆ | |Ž W 5 ˆj  ¡  X d S )N)Zget_edit_handlerÚcache_clear)r   Úkwargs)ÚfnÚpage_clsr8   r9   Ú	decoratedI   s    
z8clear_edit_handler.<locals>.decorator.<locals>.decoratedr   )rA   rC   ©rB   )rA   r9   Ú	decoratorH   s    	z%clear_edit_handler.<locals>.decoratorr8   )rB   rE   r8   rD   r9   Úclear_edit_handlerG   s    rF   c                   @   sb   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d„ Zdd„ ZdS )ÚTestPreviewz	test.jsonc                 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d	d
dddddddddddddddddddd| jj| jjgdddddœ| _d S )NZMeetings)ÚnameZPartiesZHolidaysz/home/)Zurl_pathz/home/events/christmas/úBeach partyzbeach-partyz³{"entityMap": {},"blocks": [
                {"inlineStyleRanges": [], "text": "party on wayne", "depth": 0, "type": "unstyled", "key": "00000", "entityRanges": []}
            ]}z
2017-08-01Úpublicz	the beachz	six squidr   iè  )r   r   ÚbodyZ	date_fromZaudienceÚlocationZcostzcarousel_items-TOTAL_FORMSzcarousel_items-INITIAL_FORMSzcarousel_items-MIN_NUM_FORMSzcarousel_items-MAX_NUM_FORMSzspeakers-TOTAL_FORMSzspeakers-INITIAL_FORMSzspeakers-MIN_NUM_FORMSzspeakers-MAX_NUM_FORMSzrelated_links-TOTAL_FORMSzrelated_links-INITIAL_FORMSzrelated_links-MIN_NUM_FORMSzrelated_links-MAX_NUM_FORMSzhead_counts-TOTAL_FORMSzhead_counts-INITIAL_FORMSzhead_counts-MIN_NUM_FORMSzhead_counts-MAX_NUM_FORMSÚ
categorieszcomments-TOTAL_FORMSzcomments-INITIAL_FORMSzcomments-MIN_NUM_FORMSzcomments-MAX_NUM_FORMS)r
   r$   ÚcreateZmeetings_categoryZparties_categoryZholidays_categoryr	   r%   Ú	home_pageÚ
event_pager(   Úuserr   r5   ©r"   r8   r8   r9   ÚsetUp[   sF    
âzTestPreview.setUpc                 C   s~   t ddd| jjfd}d | jj¡}|  || jj¡ | j |¡}|  |j	d¡ |  
|d¡ | j|dd	d
 | j|dd	d
 d S )Nr   r   Ú	eventpager   ú"wagtail-preview-tests-eventpage-{}r   ú'wagtailadmin/generic/preview_error.htmlú.<title>Preview not available - Wagtail</title>T©Úhtmlú;<h1 class="preview-error__title">Preview not available</h1>)r   rO   r   ÚformatÚassertNotInr)   Úsessionr%   r+   r,   r/   r0   ©r"   r6   Úpreview_session_keyr7   r8   r8   r9   Ú+test_preview_on_create_with_no_session_data†   s*    þÿýýz7TestPreview.test_preview_on_create_with_no_session_datac                 C   sÌ   t ddd| jjfd}d | jj¡}|  || jj¡ | j || jddi–¡}|  	|j
d¡ |  |j ¡ d	d	d
œ¡ |  || jj¡ | j |¡}|  	|j
d¡ |  |d¡ | j|ddd | j|ddd d S )Nr   r   rT   r   rU   r   Ú r   Fr    rV   rW   TrX   rZ   )r   rO   r   r[   r\   r)   r]   r*   r5   r+   r,   r-   r   r.   r%   r/   r0   r^   r8   r8   r9   Ú(test_preview_on_create_with_invalid_data¡   s8    þÿþýýz4TestPreview.test_preview_on_create_with_invalid_datac                 C   s¸   t ddd| jjfd}| j || j¡}|  |jd¡ |  |j	 
¡ dddœ¡ d | jj¡}|  || jj¡ | j |¡}|  |jd¡ |  |d	¡ |  |d
¡ |  |d¡ |  |d¡ d S )Nr   r   rT   r   r   Tr    rU   útests/event_page.htmlrI   ú<li>Parties</li>ú<li>Holidays</li>)r   rO   r   r)   r*   r5   r+   r,   r-   r   r.   r[   ÚassertInr]   r%   r/   r0   ©r"   r6   r7   r_   r8   r8   r9   Ú%test_preview_on_create_with_m2m_fieldÈ   s(    þþÿz1TestPreview.test_preview_on_create_with_m2m_fieldc                 C   s´   t d| jjfd}| j || j¡}|  |jd¡ |  |j	 
¡ dddœ¡ d| jj› }|  || jj¡ | j |¡}|  |jd¡ |  |d¡ |  |d¡ |  |d	¡ |  |d
¡ d S )Nú"wagtailadmin_pages:preview_on_editr   r   Tr    úwagtail-preview-rc   rI   rd   re   ©r   rP   r   r)   r*   r5   r+   r,   r-   r   r.   rf   r]   r%   r/   r0   rg   r8   r8   r9   Ú#test_preview_on_edit_with_m2m_fieldå   s$     ÿþz/TestPreview.test_preview_on_edit_with_m2m_fieldc                 C   sò   t d| jjfd}| j || j¡}|  |jd¡ |  |j	 
¡ dddœ¡ | j || jddi–¡}|  |jd¡ |  |j	 
¡ dddœ¡ d	| jj› }|  || jj¡ | j |¡}|  |jd¡ |  |d
¡ |  |d¡ |  |d¡ |  |d¡ d S )Nri   r   r   Tr    r   ra   Frj   rc   rI   rd   re   rk   rg   r8   r8   r9   Ú1test_preview_on_edit_with_valid_then_invalid_dataÿ   s0     ÿþþz=TestPreview.test_preview_on_edit_with_valid_then_invalid_datac              	   C   sÔ   t  ¡ }|tjtjd d }t|ƒ¤}td| jj	fd}| j
 || j¡}|  |jd¡ | j
 |¡}|  |jd¡ | |¡ td| jj	fd}| j
 || j¡}|  |jd¡ | j
 |¡}|  |jd¡ W 5 Q R X d S )Nr#   )Úsecondsri   r   r   )r   ÚnowÚdatetimeÚ	timedeltar   Zpreview_expiration_timeoutr   r   rP   r   r)   r*   r5   r+   r,   r%   Úmove_torO   )r"   Zinitial_datetimeZexpiry_datetimeZfrozen_datetimer6   r7   r8   r8   r9   Útest_preview_on_edit_expiry!  s,    ÿ
 ÿ
 ÿz'TestPreview.test_preview_on_edit_expiryc                 C   sº   d  | jj¡}d| jj|< tddd| jjfd}| j |¡}|  |jd¡ |  	|j
 ¡ dd	i¡ |  || jj¡ | j |¡}|  |jd¡ |  |d
¡ | j|dd	d | j|dd	d d S )NrU   ú	test datar   r   rT   r   r   ÚsuccessTrV   rW   rX   rZ   )r[   rO   r   r)   r]   r   r'   r+   r,   r-   r   r.   r\   r%   r/   r0   ©r"   r_   r6   r7   r8   r8   r9   Ú)test_preview_on_create_clear_preview_data?  s8    ÿþþýýz5TestPreview.test_preview_on_create_clear_preview_datac                 C   s¶   d| j j› }d| jj|< td| j jfd}| j |¡}|  |jd¡ |  |j	 
¡ ddi¡ |  || jj¡ | j |¡}|  |jd¡ |  |d¡ | j|d	dd
 | j|ddd
 d S )Nrj   rt   ri   r   r   ru   TrV   rW   rX   rZ   )rP   r   r)   r]   r   r'   r+   r,   r-   r   r.   r\   r%   r/   r0   rv   r8   r8   r9   Ú'test_preview_on_edit_clear_preview_datae  s4     ÿþýýz3TestPreview.test_preview_on_edit_clear_preview_datac              
   C   s²   t ddd| jjfd}| jj|dddœd}|  |jd	¡ |  |j 	¡ d
d
dœ¡ dddg}|D ]L\}}| j
||d0 | j || ¡}|  |jd	¡ |  ||¡ W 5 Q R X q`d S )Nr   r   Zmultipreviewmodespager   ZTestÚtest)r   r   )Údatar   Tr    )ra   útests/simple_page_alt.html)z?mode=originalr!   )ú?mode=alt%231r{   )ÚparamsÚtemplate)r   rO   r   r)   r*   r+   r,   r-   r   r.   ZsubTestr%   r/   )r"   r6   r7   Zcasesr}   r~   r8   r8   r9   Útest_preview_modesˆ  s&    þþýzTestPreview.test_preview_modesN)r;   r<   r=   ZfixturesrS   r`   rb   rh   rl   rm   rs   rw   rx   r   r8   r8   r8   r9   rG   X   s   +'"&#rG   c                   @   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 )ÚTestEnablePreviewc                 C   sX   t jjdd| _|  ¡ | _tddd| _tdd| _	| jj
| jd | jj
| j	d d S )	Nr   r   zSingle preview modeZfoo)r   r   zMultiple preview modesr   r   )r	   r$   r%   Ú	root_pager(   rQ   r   Úsingler   Úmultipler&   rR   r8   r8   r9   rS   £  s    
zTestEnablePreview.setUpc                 C   s(   t |ƒjj}td|› d|| jjfdS )Núwagtailadmin_pages:r   r   )ÚtypeÚ_metaÚ
model_namer   r   r   )r"   rH   Úpager‡   r8   r8   r9   Úget_url_on_add¯  s
    þz TestEnablePreview.get_url_on_addc                 C   s   t d|› |jfdS )Nr„   r   )r   r   )r"   rH   rˆ   r8   r8   r9   Úget_url_on_edit¶  s    z!TestEnablePreview.get_url_on_editc                 C   sÐ   |   d| j¡}|   d| j¡}|d }| j |¡}|  |jd¡ |  |d¡ |  |d| ¡ |  |j¡}| 	ddd	i¡}|  
|¡ |  d
|d ¡ |  d|d ¡ |  |d¡ |  |d|› d¡ |  |d¡ d S )NÚaddÚpreview_on_addú?mode=r   údata-side-panel="preview"údata-action="%s"Zbuttonzdata-side-panel-toggleÚpreviewzw-tooltip w-kbdzdata-controllerzmod+pzdata-w-kbd-key-valueú›<iframe id="preview-iframe" loading="lazy" title="Preview" class="preview-panel__iframe" data-preview-iframe aria-describedby="preview-panel-error-banner">úhref="ú" target="_blank"úm<select id="id_preview_mode" name="preview_mode" class="preview-panel__mode-select" data-preview-mode-select>)r‰   r‚   r)   r%   r+   r,   r0   Úget_soupr   ÚfindZassertIsNotNoneÚassertNotContains)r"   Ú
create_urlr6   Únew_tab_urlr7   ÚsoupZtoggle_buttonr8   r8   r9   Ú2test_show_preview_panel_on_create_with_single_mode¹  s*    
þþzDTestEnablePreview.test_show_preview_panel_on_create_with_single_modec                 C   s®   |   d| j¡}|   d| j¡}|d }| j |¡}|  |jd¡ |  |d¡ |  |d¡ |  |d| ¡ |  |d¡ |  |d	|› d
¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr‹   rŒ   r|   r   ú data-side-panel-toggle="preview"rŽ   r   r‘   r’   r“   r”   ú*<option value="original">Original</option>ú1<option value="alt#1" selected>Alternate</option>)r‰   rƒ   r)   r%   r+   r,   r0   )r"   r˜   r6   r™   r7   r8   r8   r9   Ú5test_show_preview_panel_on_create_with_multiple_modesÛ  s,    þþ ÿzGTestEnablePreview.test_show_preview_panel_on_create_with_multiple_modesc                 C   s–   |   d| j¡}|   d| j¡}|d }| j |¡}|  |jd¡ |  |d¡ |  |d¡ |  |d| ¡ |  |d¡ |  |d	|› d
¡ |  |d¡ d S )NÚeditÚpreview_on_editr   r   rœ   rŽ   r   r‘   r’   r“   r”   )rŠ   r‚   r)   r%   r+   r,   r0   r—   ©r"   Zedit_urlr6   r™   r7   r8   r8   r9   Ú0test_show_preview_panel_on_edit_with_single_modeý  s"    þþzBTestEnablePreview.test_show_preview_panel_on_edit_with_single_modec                 C   s®   |   d| j¡}|   d| j¡}|d }| j |¡}|  |jd¡ |  |d¡ |  |d¡ |  |d| ¡ |  |d¡ |  |d	|› d
¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr    r¡   r|   r   rœ   rŽ   r   r‘   r’   r“   r”   r   rž   )rŠ   rƒ   r)   r%   r+   r,   r0   r¢   r8   r8   r9   Ú3test_show_preview_panel_on_edit_with_multiple_modes  s,    þþ ÿzETestEnablePreview.test_show_preview_panel_on_edit_with_multiple_modesc                 C   s|   | j jdd}|  d| j ¡}td| j j|jfd}| j |¡}|  |j¡}| 	dd|i¡}|  
t|ƒd¡ |  
d	|j¡ d S )
NT©Z
log_actionÚhistoryú!wagtailadmin_pages:revisions_viewr   ÚaÚhrefr#   ZPreview)r‚   Úsave_revisionrŠ   r   r   r)   r%   r•   r   r–   r+   ÚlenÚtext)r"   Úlatest_revisionZhistory_urlr6   r7   rš   Úpreview_linkr8   r8   r9   Ú#test_show_preview_on_revisions_list;  s    þz5TestEnablePreview.test_show_preview_on_revisions_listN)r;   r<   r=   rS   r‰   rŠ   r›   rŸ   r£   r¤   r¯   r8   r8   r8   r9   r€   ¢  s   """r€   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestDisablePreviewButtonz\
    Test that preview button can be disabled by setting preview_modes to an empty list
    c                 C   s   t jjdd| _|  ¡ | _d S )Nr   r   )r	   r$   r%   r   r(   rQ   rR   r8   r8   r9   rS   P  s    zTestDisablePreviewButton.setUpc                 C   sn   | j  tddd| jjfd¡}|  |jd¡ tddd| jjfd}|  |d¡ |  |d¡ |  |d	| ¡ d S )
Nzwagtailadmin_pages:addr   Z
streampager   r   r   rœ   rŽ   r   )r)   r%   r   r   r   r+   r,   r—   )r"   r7   r6   r8   r8   r9   Útest_disable_preview_on_createW  s    þÿþz7TestDisablePreviewButton.test_disable_preview_on_createc                 C   s~   t ddgd}| jj|d | j td|jfd¡}|  |jd¡ td|jfd}|  	|d	¡ |  	|d
¡ |  	|d| ¡ d S )Nústream page©r¬   Zhello©r   rK   r   zwagtailadmin_pages:editr   r   ri   rœ   rŽ   r   )
r   r   r&   r)   r%   r   r   r+   r,   r—   )r"   Ústream_pager7   r6   r8   r8   r9   Útest_disable_preview_on_editi  s    ÿ ÿz5TestDisablePreviewButton.test_disable_preview_on_editc                 C   sŠ   t ddgd}| jj|d |jdd}| j td|jfd¡}td	|j|jfd}|  ||¡ |  	|j
¡}| d
d|i¡}|  |¡ d S )Nr²   r³   r´   r   Tr¥   zwagtailadmin_pages:historyr   r§   r¨   r©   )r   r   r&   rª   r)   r%   r   r   r—   r•   r   r–   ZassertIsNone)r"   rµ   r­   r7   r6   rš   r®   r8   r8   r9   Ú&test_disable_preview_on_revisions_listz  s    ÿ
þz?TestDisablePreviewButton.test_disable_preview_on_revisions_listN)r;   r<   r=   r>   rS   r±   r¶   r·   r8   r8   r8   r9   r°   K  s
   r°   )rp   Ú	functoolsr   Zdjango.testr   Zdjango.urlsr   Zdjango.utilsr   Z	freezegunr   Z!wagtail.admin.views.pages.previewr   Zwagtail.modelsr	   Zwagtail.test.testapp.modelsr
   r   r   r   Zwagtail.test.utilsr   r   rF   rG   r€   r°   r8   r8   r8   r9   Ú<module>   s"   3  L *