U
    |®Þh"O  ã                   @   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mZmZmZ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ƒZdS )é    N)ÚTestCase)Úreverse)Útimezone)Úfreeze_time)ÚPreviewOnEdit)ÚEventCategoryÚMultiPreviewModesModelÚNonPreviewableModelÚPreviewableModelÚRevisableModel)ÚWagtailTestUtilsc                   @   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S )ÚTestPreviewc                 C   s    |   ¡ | _tjjdd| _tjjdd| _tjjdd| _tjjdd| _	t
dƒ| _t
d| j	jfd	| _d
| _| j› d| j	j› | _d| jj| jjgdœ| _d S )NZMeetings)ÚnameZPartiesZHolidayszA previewable snippet©Útextz5wagtailsnippets_tests_previewablemodel:preview_on_addú6wagtailsnippets_tests_previewablemodel:preview_on_edit©Úargsz&wagtail-preview-tests-previewablemodelú-úAn edited previewable snippet)r   Ú
categories)ÚloginÚuserr   ÚobjectsÚcreateZmeetings_categoryZparties_categoryZholidays_categoryr
   Úsnippetr   Úpreview_on_add_urlÚpkÚpreview_on_edit_urlÚsession_key_prefixÚedit_session_keyÚidÚ	post_data©Úself© r%   úk/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/snippets/tests/test_preview.pyÚsetUp   s"    
ÿþþzTestPreview.setUpc                 C   s^   |   | j| jj¡ | j | j¡}|  |jd¡ |  |d¡ | j	|ddd | j	|ddd d S )NéÈ   ú'wagtailadmin/generic/preview_error.htmlú.<title>Preview not available - Wagtail</title>T©Úhtmlú;<h1 class="preview-error__title">Preview not available</h1>)
ÚassertNotInr   ÚclientÚsessionÚgetr   ÚassertEqualÚstatus_codeÚassertTemplateUsedÚassertContains©r$   Úresponser%   r%   r&   Ú+test_preview_on_create_with_no_session_data+   s    ýýz7TestPreview.test_preview_on_create_with_no_session_datac                 C   sª   |   | j| jj¡ | j | jddi¡}|  |jd¡ |  |j	 
¡ dddœ¡ |   | j| jj¡ | j | j¡}|  |jd¡ |  |d¡ | j|ddd	 | j|d
dd	 d S )Nr   Ú r(   F©Zis_validZis_availabler)   r*   Tr+   r-   )r.   r   r/   r0   Úpostr   r2   r3   ÚassertJSONEqualÚcontentÚdecoder1   r4   r5   r6   r%   r%   r&   Ú(test_preview_on_create_with_invalid_data>   s*    þýýz4TestPreview.test_preview_on_create_with_invalid_datac                 C   sš   | j  | j| j¡}|  |jd¡ |  |j ¡ dddœ¡ |  	| j
| j j¡ | j  | j¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S ©Nr(   Tr:   útests/previewable_model.htmlr   ú<li>Parties</li>ú<li>Holidays</li>)r/   r;   r   r"   r2   r3   r<   r=   r>   ÚassertInr   r0   r1   r4   r5   r6   r%   r%   r&   Ú%test_preview_on_create_with_m2m_field]   s    þz1TestPreview.test_preview_on_create_with_m2m_fieldc                 C   sš   | j  | j| j¡}|  |jd¡ |  |j ¡ dddœ¡ |  	| j
| j j¡ | j  | j¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S r@   ©r/   r;   r   r"   r2   r3   r<   r=   r>   rD   r    r0   r1   r4   r5   r6   r%   r%   r&   Ú#test_preview_on_edit_with_m2m_fields   s    þz/TestPreview.test_preview_on_edit_with_m2m_fieldc                 C   sÚ   | j  | j| j¡}|  |jd¡ |  |j ¡ dddœ¡ | j  | j| jddi–¡}|  |jd¡ |  |j ¡ dddœ¡ |  	| j
| j j¡ | j  | j¡}|  |jd¡ |  |d¡ |  |d¡ |  |d	¡ |  |d
¡ d S )Nr(   Tr:   r   r9   FrA   r   rB   rC   rF   r6   r%   r%   r&   Ú1test_preview_on_edit_with_valid_then_invalid_data‰   s,    þ ÿþz=TestPreview.test_preview_on_edit_with_valid_then_invalid_datac              	   C   s  t  ¡ }|tjtjd d }tjjdd}t	|ƒÄ}| j
 | j| j¡}|  |jd¡ | j
 | j¡}|  |jd¡ | |¡ td|jfd}| j
 || j¡}|  |jd¡ | j
 |¡}|  |jd¡ |  | j| j
j¡ |  | j› d|j› | j
j¡ W 5 Q R X d S )	Né   )ÚsecondszA new previewable snippetr   r(   r   r   r   )r   ÚnowÚdatetimeÚ	timedeltar   Zpreview_expiration_timeoutr
   r   r   r   r/   r;   r   r"   r2   r3   r1   Úmove_tor   r   r.   r    r0   rD   r   )r$   Zinitial_datetimeZexpiry_datetimeZnew_snippetZfrozen_datetimer7   Úpreview_urlr%   r%   r&   Útest_preview_on_edit_expiry©   s0    ÿ

þþz'TestPreview.test_preview_on_edit_expiryc                 C   sž   d| j j| j< | j  | j¡}|  |jd¡ |  |j 	¡ ddi¡ |  
| j| j j¡ | j  | j¡}|  |jd¡ |  |d¡ | j|ddd | j|ddd d S ©	Nz	test datar(   ÚsuccessTr)   r*   r+   r-   )r/   r0   r   Údeleter   r2   r3   r<   r=   r>   r.   r1   r4   r5   r6   r%   r%   r&   Ú)test_preview_on_create_clear_preview_dataÊ   s*    þýýz5TestPreview.test_preview_on_create_clear_preview_datac                 C   sž   d| j j| j< | j  | j¡}|  |jd¡ |  |j 	¡ ddi¡ |  
| j| j j¡ | j  | j¡}|  |jd¡ |  |d¡ | j|ddd | j|ddd d S rQ   )r/   r0   r    rS   r   r2   r3   r<   r=   r>   r.   r1   r4   r5   r6   r%   r%   r&   Ú'test_preview_on_edit_clear_preview_dataè   s*    þýýz3TestPreview.test_preview_on_edit_clear_preview_datac                 C   s`   t jjdd}|jdd}| j td|j|jfd¡}|  	|j
d¡ |  |d¡ |  |d	¡ d S )
NzMultiple modesr   T©Z
log_actionz;wagtailsnippets_tests_multipreviewmodesmodel:revisions_viewr   r(   z tests/previewable_model_alt.htmlz"Multiple modes (Alternate Preview))r   r   r   Úsave_revisionr/   r1   r   r   r!   r2   r3   r4   r5   )r$   r   Úrevisionr7   r%   r%   r&   Útest_preview_revision  s    
þÿz!TestPreview.test_preview_revisionN)Ú__name__Ú
__module__Ú__qualname__r'   r8   r?   rE   rG   rH   rP   rT   rU   rY   r%   r%   r%   r&   r      s    !r   c                   @   sF   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚTestEnablePreviewc                 C   s.   |   ¡ | _tjjdd| _tjjdd| _d S )NzSingle preview moder   zMultiple preview modes)r   r   r
   r   r   Úsingler   Úmultipler#   r%   r%   r&   r'     s
    
ÿzTestEnablePreview.setUpNc                 C   s$   t |ƒjj}td|› d|› |dS ©NZwagtailsnippets_tests_ú:r   )ÚtypeÚ_metaÚ
model_namer   )r$   r   r   r   rd   r%   r%   r&   Úget_url  s    zTestEnablePreview.get_urlc                 C   sÐ   |   | jd¡}|   | jd¡}|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>)re   r^   r/   r1   r2   r3   r5   Úget_soupr=   ÚfindZassertIsNotNoneÚassertNotContains)r$   Ú
create_urlrO   Únew_tab_urlr7   ÚsoupZtoggle_buttonr%   r%   r&   Ú2test_show_preview_panel_on_create_with_single_mode#  s*    
þþzDTestEnablePreview.test_show_preview_panel_on_create_with_single_modec                 C   s®   |   | jd¡}|   | jd¡}|d }| j |¡}|  |jd¡ |  |d¡ |  |d¡ |  |d| ¡ |  |d¡ |  |d	|› d
¡ |  |d¡ |  |d¡ |  |d¡ d S )Nrf   rg   ú?mode=alt%231r(   ú data-side-panel-toggle="preview"ri   rj   rl   rm   rn   ro   ú <option value="">Normal</option>ú1<option value="alt#1" selected>Alternate</option>)re   r_   r/   r1   r2   r3   r5   )r$   rs   rO   rt   r7   r%   r%   r&   Ú5test_show_preview_panel_on_create_with_multiple_modesE  s,    þþ ÿzGTestEnablePreview.test_show_preview_panel_on_create_with_multiple_modesc                 C   sª   | j | jd| jjfd}| j | jd| jjfd}|d }| j |¡}|  |jd¡ |  |d¡ |  |d¡ |  |d| ¡ |  |d	¡ |  |d
|› d¡ |  	|d¡ d S )NÚeditr   Úpreview_on_editrh   r(   rx   ri   rj   rl   rm   rn   ro   )
re   r^   r   r_   r/   r1   r2   r3   r5   rr   ©r$   Zedit_urlrO   rt   r7   r%   r%   r&   Ú0test_show_preview_panel_on_edit_with_single_modeg  s*      ÿþþzBTestEnablePreview.test_show_preview_panel_on_edit_with_single_modec                 C   sÂ   | j | jd| jjfd}| j | jd| jjfd}|d }| j |¡}|  |jd¡ |  |d¡ |  |d¡ |  |d| ¡ |  |d	¡ |  |d
|› d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr|   r   r}   rw   r(   rx   ri   rj   rl   rm   rn   ro   ry   rz   )re   r_   r   r/   r1   r2   r3   r5   r~   r%   r%   r&   Ú3test_show_preview_panel_on_edit_with_multiple_modes…  s4      ÿþþ ÿzETestEnablePreview.test_show_preview_panel_on_edit_with_multiple_modesc                 C   sj   | j jdd}| j| j d| j jfd}| j| j d| j j|jfd}| j |¡}|  |d¡ |  ||¡ d S )NTrV   Úhistoryr   Úrevisions_viewZPreview)r_   rW   re   r   r!   r/   r1   r5   )r$   Úlatest_revisionZhistory_urlrO   r7   r%   r%   r&   Ú#test_show_preview_on_revisions_list©  s    ýz5TestEnablePreview.test_show_preview_on_revisions_list)N)
rZ   r[   r\   r'   re   rv   r{   r   r€   r„   r%   r%   r%   r&   r]     s   
""$r]   c                   @   s>   e Zd ZdZeZdd„ Zddd„Zdd„ Zd	d
„ Z	dd„ Z
dS )Ú TestDisablePreviewWithEmptyModeszL
    Preview can be disabled by setting preview_modes to an empty list.
    c                 C   s,   |   ¡ | _| jjjdd| _| jjj| _d S )NzA non-previewable snippetr   )r   r   Úmodelr   r   r   rc   rd   r#   r%   r%   r&   r'   ¿  s    
z&TestDisablePreviewWithEmptyModes.setUpNc                 C   s   t d| j› d|› |dS r`   )r   rd   ©r$   r   r   r%   r%   r&   re   Ä  s    z(TestDisablePreviewWithEmptyModes.get_urlc                 C   sV   | j  |  d¡¡}|  |jd¡ |  d¡}|  |d¡ |  |d¡ |  |d| ¡ d S )Nrf   r(   rg   rx   ri   rj   )r/   r1   re   r2   r3   rr   ©r$   r7   rO   r%   r%   r&   Útest_disable_preview_on_createÇ  s    
z?TestDisablePreviewWithEmptyModes.test_disable_preview_on_createc                 C   sj   | j  | jd| jjfd¡}|  |jd¡ | jd| jjfd}|  |d¡ |  |d¡ |  |d| ¡ d S )Nr|   r   r(   r}   rx   ri   rj   )r/   r1   re   r   r   r2   r3   rr   rˆ   r%   r%   r&   Útest_disable_preview_on_editÐ  s    z=TestDisablePreviewWithEmptyModes.test_disable_preview_on_editc                 C   sx   | j jdd}| j | jd| j jfd¡}| jd| j j|jfd}|  ||¡ |  |j	¡}| 
dd|i¡}|  |¡ d S )NTrV   r   r   r‚   ÚaÚhref)r   rW   r/   r1   re   r   r!   rr   rp   r=   rq   ZassertIsNone)r$   rƒ   r7   rO   ru   Zpreview_linkr%   r%   r&   Ú&test_disable_preview_on_revisions_listÙ  s     ÿzGTestDisablePreviewWithEmptyModes.test_disable_preview_on_revisions_list)N)rZ   r[   r\   Ú__doc__r	   r†   r'   re   r‰   rŠ   r   r%   r%   r%   r&   r…   ·  s   
		r…   c                       s&   e Zd ZdZeZd‡ fdd„	Z‡  ZS )ÚTestDisablePreviewWithoutMixinzD
    Preview can be disabled by not extending PreviewableMixin.
    Nc                    sn   |dkrd| j › dS |dkr6d| j › d|d › dS |dkr`d| j › d|d › d	|d
 › dS tƒ  ||¡S )Nrg   z/admin/snippets/tests/z	/preview/r}   r   ú/r‚   z	/history/z/revisions/rI   z/view/)rd   Úsuperre   r‡   ©Ú	__class__r%   r&   re   ñ  s     ÿz&TestDisablePreviewWithoutMixin.get_url)N)rZ   r[   r\   rŽ   r   r†   re   Ú__classcell__r%   r%   r’   r&   r   é  s   r   )rL   Zdjango.testr   Zdjango.urlsr   Zdjango.utilsr   Z	freezegunr   Z#wagtail.admin.views.generic.previewr   Zwagtail.test.testapp.modelsr   r   r	   r
   r   Zwagtail.test.utilsr   r   r]   r…   r   r%   r%   r%   r&   Ú<module>   s      !2