a
    Døg/k  ã                   @   sÒ   d dl 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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ƒZdS )é    N)ÚTestCaseÚoverride_settings)Úreverse)Útimezone)Úfreeze_time)Úversioned_static)ÚPreviewOnEdit)ÚEventCategoryÚMultiPreviewModesModelÚNonPreviewableModelÚPreviewableModelÚRevisableModel)ÚWagtailTestUtils)ÚRemovedInWagtail70Warningc                   @   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(   úb/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/snippets/tests/test_preview.pyÚsetUp   s"    
ÿþþzTestPreview.setUpc                 C   sn   |   | j| jj¡ | j | j¡}|  |jd¡ |  |d¡ | j	|ddd | j	|ddd |  
|t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>úwagtailadmin/js/icons.js)ÚassertNotInr"   ÚclientÚsessionÚgetr   ÚassertEqualÚstatus_codeÚassertTemplateUsedÚassertContainsÚassertNotContainsr   ©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	 |  |tdƒ¡ d S )Nr   Ú r+   F©Zis_validZis_availabler,   r-   Tr.   r0   r1   )r2   r"   r3   r4   Úpostr   r6   r7   ÚassertJSONEqualÚcontentÚdecoder5   r8   r9   r:   r   r;   r(   r(   r)   Ú(test_preview_on_create_with_invalid_dataA   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>)r3   r@   r   r%   r6   r7   rA   rB   rC   ÚassertInr"   r4   r5   r8   r9   r;   r(   r(   r)   Ú%test_preview_on_create_with_m2m_fielda   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 rE   ©r3   r@   r!   r%   r6   r7   rA   rB   rC   rI   r#   r4   r5   r8   r9   r;   r(   r(   r)   Ú#test_preview_on_edit_with_m2m_fieldw   s    þz/TestPreview.test_preview_on_edit_with_m2m_fieldc                 C   sÞ   | j  | j| j¡}|  |jd¡ |  |j ¡ dddœ¡ | j  | ji | 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   r>   FrF   r   rG   rH   rK   r;   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 d   ƒ n1 s
0    Y  d S )	Né   )ÚsecondszA new previewable snippetr   r+   r   r   r   )r   ÚnowÚdatetimeÚ	timedeltar   Zpreview_expiration_timeoutr   r   r   r   r3   r@   r!   r%   r6   r7   r5   Zmove_tor   r    r2   r#   r4   rI   r"   )r'   Zinitial_datetimeZexpiry_datetimeZnew_snippetZfrozen_datetimer<   Ú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 |  |td	ƒ¡ d S ©
Nz	test datar+   ÚsuccessTr,   r-   r.   r0   r1   )r3   r4   r"   Údeleter   r6   r7   rA   rB   rC   r2   r5   r8   r9   r:   r   r;   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 |  |td	ƒ¡ d S rU   )r3   r4   r#   rW   r!   r6   r7   rA   rB   rC   r2   r5   r8   r9   r:   r   r;   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_revisionr3   r5   r   r    r$   r6   r7   r8   r9   )r'   r   Úrevisionr<   r(   r(   r)   Útest_preview_revision  s    
þÿz!TestPreview.test_preview_revisionN)Ú__name__Ú
__module__Ú__qualname__r*   r=   rD   rJ   rL   rM   rT   rX   rY   r]   r(   r(   r(   r)   r      s     !r   c                   @   s|   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Ze	dddd„ ƒZ
e	dddd„ ƒZe	dd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   rh   r(   r(   r)   Úget_url%  s    zTestEnablePreview.get_urlc                 C   s,  |   | jd¡}|   | jd¡}|d }| j |¡}|  |jd¡ |  |j¡}|  | 	d¡¡ | 
dddi¡}|  |¡ |  d	|d
 ¡ |  d|d ¡ | 	d¡}|  |¡ |  | d¡|¡ | 	d¡}|  |¡ |  | d¡d¡ | 	d¡}	|  |	¡ |  |	d |¡ |  |	d d¡ | 	d¡}
|  |
¡ d S )NÚaddÚpreview_on_addú?mode=r+   ú[data-side-panel="preview"]Úbuttonúdata-side-panel-toggleÚpreviewúw-tooltip w-kbdúdata-controllerúmod+púdata-w-kbd-key-valueú[data-controller="w-preview"]údata-w-preview-url-valueú#w-preview-iframeúdata-w-preview-targetÚiframeú!a[data-w-preview-target="newTab"]ÚhrefÚtargetÚ_blankú[data-w-preview-target="mode"])ri   rb   r3   r5   r6   r7   Úget_souprB   ÚassertIsNotNoneÚ
select_oneÚfindÚassertIsNone)r'   Ú
create_urlrS   Únew_tab_urlr<   ÚsoupÚtoggle_buttonÚ
controllerry   Únew_tab_buttonÚmode_selectr(   r(   r)   Ú2test_show_preview_panel_on_create_with_single_mode)  s.    







zDTestEnablePreview.test_show_preview_panel_on_create_with_single_modec                 C   sd  |   | jd¡}|   | jd¡}|d }| j |¡}|  |jd¡ |  |d¡ |  |d¡ |  |j¡}| 	d¡}|  
|¡ |  | d¡|¡ | 	d	¡}|  
|¡ |  | d
¡d¡ | 	d¡}|  
|¡ |  |d |¡ |  |d d¡ | 	d¡}	|  
|	¡ |  |	d d¡ |	 	d¡}
|  
|
¡ |  
|
 d¡¡ |	 	d¡}|  
|¡ |  |j ¡ d¡ |  | d¡¡ d S )Nrj   rk   ú?mode=alt%231r+   ú data-side-panel-toggle="preview"údata-side-panel="preview"ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r$   Úid_preview_modeúoption[value="alt#1"]Úselectedúoption[value=""]ÚNormal)ri   rc   r3   r5   r6   r7   r9   r   rB   r   r€   r   Ústriprƒ   )r'   r„   rS   r…   r<   r†   rˆ   ry   r‰   rŠ   Údefault_optionÚother_optionr(   r(   r)   Ú5test_show_preview_panel_on_create_with_multiple_modesM  s8    











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¡ |  |j	¡}|  
| d¡¡ | ddd	i¡}|  
|¡ |  d
|d ¡ |  d|d ¡ | d¡}|  
|¡ |  | d¡|¡ | d¡}|  
|¡ |  | d¡d¡ | d¡}	|  
|	¡ |  |	d |¡ |  |	d d¡ | d¡}
|  |
¡ d S )NÚeditr   Úpreview_on_editrl   r+   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   )ri   rb   r    rc   r3   r5   r6   r7   r   rB   r€   r   r‚   rƒ   )r'   Úedit_urlrS   r…   r<   r†   r‡   rˆ   ry   r‰   rŠ   r(   r(   r)   Ú0test_show_preview_panel_on_edit_with_single_modev  s2    ÿ







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¡ |  |j	¡}| 
d¡}|  |¡ |  | d	¡|¡ | d
¡}|  |d¡ | 
d¡}|  |¡ |  | d¡¡ |  | 
d¡¡ | 
d¡}	|  |	¡ | 
d¡}
|  |
¡ |  |
 d¡d¡ | 
d¡}|  |¡ |  |d |¡ |  |d d¡ | 
d¡}|  |¡ |  |d d¡ | 
d¡}|  |¡ |  | d¡¡ | 
d¡}|  |¡ |  |j ¡ d¡ |  | d¡¡ d S )Nr˜   r   r™   rŒ   r+   r   rŽ   ru   rv   ú)data-w-preview-auto-update-interval-valueÚ500ú![data-w-preview-target="spinner"]Úhiddenúsvg.icon-spinnerrn   rw   rx   ry   rz   r{   r|   r}   r~   r$   r   r   r‘   r’   r“   )ri   rc   r    r3   r5   r6   r7   r9   r   rB   r   r€   rƒ   r   r”   )r'   rš   rS   r…   r<   r†   rˆ   Úinterval_valueÚspinnerÚrefresh_buttonry   r‰   rŠ   r•   r–   r(   r(   r)   Ú3test_show_preview_panel_on_edit_with_multiple_modesœ  sL    ÿ
















zETestEnablePreview.test_show_preview_panel_on_edit_with_multiple_modesi90  )Z$WAGTAIL_AUTO_UPDATE_PREVIEW_INTERVALc           	      C   sÞ   | j | jd| jjfd}| j | jd| jjfd}| j |¡}|  |jd¡ |  |j	¡}| 
d¡}|  |¡ |  | d¡|¡ | d¡}|  |d¡ | 
d	¡}|  |¡ |  | d
¡¡ |  | 
d¡¡ | 
d¡}|  |¡ d S )Nr˜   r   r™   r+   ru   rv   rœ   Z12345rž   rŸ   r    rn   )ri   rb   r    rc   r3   r5   r6   r7   r   rB   r   r€   rƒ   ©	r'   rš   rS   r<   r†   rˆ   r¡   r¢   r£   r(   r(   r)   Ú test_custom_auto_update_intervalÓ  s$    ÿ





z2TestEnablePreview.test_custom_auto_update_intervalr   c           	      C   sâ   | j | jd| jjfd}| j | jd| jjfd}| j |¡}|  |jd¡ |  |j	¡}| 
d¡}|  |¡ |  | d¡|¡ | d¡}|  |d¡ | 
d	¡}|  |¡ | 
d
¡}|  |¡ |  | d¡d¡ |  |j ¡ d¡ d S )Nr˜   r   r™   r+   ru   rv   rœ   Ú0rž   rn   rr   ú
w-progressÚRefresh)ri   rb   r    rc   r3   r5   r6   r7   r   rB   r   r€   rƒ   r   r”   r¥   r(   r(   r)   Ú,test_disable_auto_update_using_zero_intervalð  s$    ÿ






z>TestEnablePreview.test_disable_auto_update_using_zero_intervalF)ZWAGTAIL_AUTO_UPDATE_PREVIEWc           	      C   s  | j | jd| jjfd}| j | jd| jjfd}|  td¡ | j |¡}W d   ƒ n1 s^0    Y  |  |j	d¡ |  
|j¡}| d¡}|  |¡ |  | d¡|¡ | d¡}|  |d	¡ | d
¡}|  |¡ | d¡}|  |¡ |  | d¡d¡ |  |j ¡ d¡ d S )Nr˜   r   r™   z€`WAGTAIL_AUTO_UPDATE_PREVIEW` is deprecated. Set `WAGTAIL_AUTO_UPDATE_PREVIEW_INTERVAL = 0` to disable auto-update for previews.r+   ru   rv   rœ   r§   rž   rn   rr   r¨   r©   )ri   rb   r    rc   ZassertWarnsMessager   r3   r5   r6   r7   r   rB   r   r€   rƒ   r   r”   r¥   r(   r(   r)   Ú1test_disable_auto_update_using_deprecated_setting  s,    ÿþ*






zCTestEnablePreview.test_disable_auto_update_using_deprecated_settingc                 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 )NTrZ   Úhistoryr   Úrevisions_viewZPreview)rc   r[   ri   r    r$   r3   r5   r9   )r'   Úlatest_revisionZhistory_urlrS   r<   r(   r(   r)   Ú#test_show_preview_on_revisions_list0  s    ýz5TestEnablePreview.test_show_preview_on_revisions_list)N)r^   r_   r`   r*   ri   r‹   r—   r›   r¤   r   r¦   rª   r«   r¯   r(   r(   r(   r)   ra     s   
$)&7


"ra   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   rg   rh   r&   r(   r(   r)   r*   F  s    
z&TestDisablePreviewWithEmptyModes.setUpNc                 C   s   t d| j› d|› |dS rd   )r   rh   ©r'   r   r   r(   r(   r)   ri   K  s    z(TestDisablePreviewWithEmptyModes.get_urlc                 C   s^   | j  |  d¡¡}|  |jd¡ |  d¡}|  |d¡ |  |d¡ |  |d¡ |  ||¡ d S )Nrj   r+   rk   r   rŽ   údata-controller="w-preview")r3   r5   ri   r6   r7   r:   ©r'   r<   rS   r(   r(   r)   Útest_disable_preview_on_createN  s    
z?TestDisablePreviewWithEmptyModes.test_disable_preview_on_createc                 C   sr   | j  | jd| jjfd¡}|  |jd¡ | jd| jjfd}|  |d¡ |  |d¡ |  |d¡ |  ||¡ d S )Nr˜   r   r+   r™   r   rŽ   r³   )r3   r5   ri   r   r    r6   r7   r:   r´   r(   r(   r)   Útest_disable_preview_on_editX  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 )NTrZ   r¬   r   r­   Úar{   )r   r[   r3   r5   ri   r    r$   r:   r   rB   r‚   rƒ   )r'   r®   r<   rS   r†   Zpreview_linkr(   r(   r)   Ú&test_disable_preview_on_revisions_listb  s    ÿzGTestDisablePreviewWithEmptyModes.test_disable_preview_on_revisions_list)N)r^   r_   r`   Ú__doc__r   r±   r*   ri   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 )Nrk   z/admin/snippets/tests/z	/preview/r™   r   ú/r­   z	/history/z/revisions/rN   z/view/)rh   Úsuperri   r²   ©Ú	__class__r(   r)   ri   z  s    
ÿÿÿz&TestDisablePreviewWithoutMixin.get_url)N)r^   r_   r`   r¹   r   r±   ri   Ú__classcell__r(   r(   r½   r)   rº   r  s   rº   )rQ   Zdjango.testr   r   Zdjango.urlsr   Zdjango.utilsr   Z	freezegunr   Zwagtail.admin.staticfilesr   Z#wagtail.admin.views.generic.previewr   Zwagtail.test.testapp.modelsr	   r
   r   r   r   Zwagtail.test.utilsr   Zwagtail.utils.deprecationr   r   ra   r°   rº   r(   r(   r(   r)   Ú<module>   s"     
  #4