o
    ÌÉh/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 )NÚMeetings)ÚnameÚPartiesÚ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ÚcreateÚmeetings_categoryÚparties_categoryÚholidays_categoryr   Úsnippetr   Úpreview_on_add_urlÚpkÚpreview_on_edit_urlÚsession_key_prefixÚedit_session_keyÚidÚ	post_data©Úself© r.   úc/var/www/html/ndineBlogger/venv/lib/python3.10/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   Ú r1   F©Úis_validÚis_availabler2   r3   Tr4   r6   r7   )r8   r(   r9   r:   Úpostr%   r<   r=   ÚassertJSONEqualÚcontentÚdecoder;   r>   r?   r@   r   rA   r.   r.   r/   Ú(test_preview_on_create_with_invalid_dataA   s,   þýýz4TestPreview.test_preview_on_create_with_invalid_datac                 C   óš   | j  | j| j¡}|  |jd¡ |  |j ¡ dddœ¡ |  	| j
| j j¡ | j  | j¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S ©Nr1   TrE   útests/previewable_model.htmlr   ú<li>Parties</li>ú<li>Holidays</li>)r9   rH   r%   r+   r<   r=   rI   rJ   rK   ÚassertInr(   r:   r;   r>   r?   rA   r.   r.   r/   Ú%test_preview_on_create_with_m2m_fielda   ó   þz1TestPreview.test_preview_on_create_with_m2m_fieldc                 C   rM   rN   ©r9   rH   r'   r+   r<   r=   rI   rJ   rK   rR   r)   r:   r;   r>   r?   rA   r.   r.   r/   Ú#test_preview_on_edit_with_m2m_fieldw   rT   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 )Nr1   TrE   r   rD   FrO   r   rP   rQ   rU   rA   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	|ƒh}| 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   ƒ d S 1 s…w   Y  d S )	Né   )ÚsecondszA new previewable snippetr   r1   r   r   r   )r   ÚnowÚdatetimeÚ	timedeltar   Úpreview_expiration_timeoutr   r   r    r   r9   rH   r'   r+   r<   r=   r;   Úmove_tor   r&   r8   r)   r:   rR   r(   )r-   Úinitial_datetimeÚexpiry_datetimeÚnew_snippetÚfrozen_datetimerB   Úpreview_urlr.   r.   r/   Útest_preview_on_edit_expiry­   s2   ÿ

þþ"ìz'TestPreview.test_preview_on_edit_expiryc                 C   ó®   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 datar1   ÚsuccessTr2   r3   r4   r6   r7   )r9   r:   r(   Údeleter%   r<   r=   rI   rJ   rK   r8   r;   r>   r?   r@   r   rA   r.   r.   r/   Ú)test_preview_on_create_clear_preview_dataÎ   ó,   þýýz5TestPreview.test_preview_on_create_clear_preview_datac                 C   re   rf   )r9   r:   r)   rh   r'   r<   r=   rI   rJ   rK   r8   r;   r>   r?   r@   r   rA   r.   r.   r/   Ú'test_preview_on_edit_clear_preview_dataí   rj   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©Ú
log_actionz;wagtailsnippets_tests_multipreviewmodesmodel:revisions_viewr   r1   z tests/previewable_model_alt.htmlz"Multiple modes (Alternate Preview))r
   r   r    Úsave_revisionr9   r;   r   r&   r*   r<   r=   r>   r?   )r-   r$   ÚrevisionrB   r.   r.   r/   Útest_preview_revision  s   
þÿz!TestPreview.test_preview_revisionN)Ú__name__Ú
__module__Ú__qualname__r0   rC   rL   rS   rV   rW   rd   ri   rk   rp   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/   r0     s
   
ÿzTestEnablePreview.setUpNc                 C   s$   t |ƒjj}td|› d|› |dS ©NÚwagtailsnippets_tests_ú:r   )ÚtypeÚ_metaÚ
model_namer   )r-   r$   r   r   r|   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=r1   ú[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"])r}   ru   r9   r;   r<   r=   Úget_souprJ   ÚassertIsNotNoneÚ
select_oneÚfindÚassertIsNone)r-   Ú
create_urlrc   Únew_tab_urlrB   ÚsoupÚtoggle_buttonÚ
controllerr   Ú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 )Nr~   r   ú?mode=alt%231r1   ú data-side-panel-toggle="preview"údata-side-panel="preview"r‰   rŠ   r‹   rŒ   r   rŽ   r   r   r‘   r’   r*   Úid_preview_modeúoption[value="alt#1"]Úselectedúoption[value=""]ÚNormal)r}   rv   r9   r;   r<   r=   r?   r“   rJ   r•   r”   r   Ústripr—   )r-   r˜   rc   r™   rB   rš   rœ   r   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_editr€   r1   r   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r   rŽ   r   r   r‘   r’   )r}   ru   r&   rv   r9   r;   r<   r=   r“   rJ   r”   r•   r–   r—   )r-   Úedit_urlrc   r™   rB   rš   r›   rœ   r   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    r1   r¡   r¢   r‰   rŠ   ú)data-w-preview-auto-update-interval-valueÚ500ú![data-w-preview-target="spinner"]Úhiddenúsvg.icon-spinnerr‚   r‹   rŒ   r   rŽ   r   r   r‘   r’   r*   r£   r¤   r¥   r¦   r§   )r}   rv   r&   r9   r;   r<   r=   r?   r“   rJ   r•   r”   r—   r   r¨   )r-   r®   rc   r™   rB   rš   rœ   Úinterval_valueÚspinnerÚrefresh_buttonr   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  )Ú$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­   r1   r‰   rŠ   r°   Ú12345r²   r³   r´   r‚   )r}   ru   r&   rv   r9   r;   r<   r=   r“   rJ   r•   r”   r—   ©	r-   r®   rc   rB   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­   r1   r‰   rŠ   r°   Ú0r²   r‚   r†   ú
w-progressÚRefresh)r}   ru   r&   rv   r9   r;   r<   r=   r“   rJ   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)Ú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/w   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.r1   r‰   rŠ   r°   r½   r²   r‚   r†   r¾   r¿   )r}   ru   r&   rv   ÚassertWarnsMessager   r9   r;   r<   r=   r“   rJ   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 )NTrl   Úhistoryr   Úrevisions_viewÚPreview)rv   rn   r}   r&   r*   r9   r;   r?   )r-   Úlatest_revisionÚhistory_urlrc   rB   r.   r.   r/   Ú#test_show_preview_on_revisions_list0  s   ýz5TestEnablePreview.test_show_preview_on_revisions_list©N)rq   rr   rs   r0   r}   rŸ   r«   r¯   r¸   r   r¼   rÀ   rÃ   rÉ   r.   r.   r.   r/   rt     s    
$)&7


"rt   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$   r{   r|   r,   r.   r.   r/   r0   F  s   
z&TestDisablePreviewWithEmptyModes.setUpNc                 C   s   t d| j› d|› |dS rw   )r   r|   ©r-   r   r   r.   r.   r/   r}   K  s   z(TestDisablePreviewWithEmptyModes.get_urlc                 C   s^   | j  |  d¡¡}|  |jd¡ |  d¡}|  |d¡ |  |d¡ |  |d¡ |  ||¡ d S )Nr~   r1   r   r¡   r¢   údata-controller="w-preview")r9   r;   r}   r<   r=   r@   ©r-   rB   rc   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   r1   r­   r¡   r¢   rÎ   )r9   r;   r}   r$   r&   r<   r=   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 )NTrl   rÄ   r   rÅ   Úar   )r$   rn   r9   r;   r}   r&   r*   r@   r“   rJ   r–   r—   )r-   rÇ   rB   rc   rš   Úpreview_linkr.   r.   r/   Ú&test_disable_preview_on_revisions_listb  s   ÿzGTestDisablePreviewWithEmptyModes.test_disable_preview_on_revisions_listrÊ   )rq   rr   rs   Ú__doc__r   rÌ   r0   r}   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rd| j › d|d › dS |dkr0d| j › d|d › d	|d
 › dS tƒ  ||¡S )Nr   z/admin/snippets/tests/z	/preview/r­   r   ú/rÅ   z	/history/z/revisions/rX   z/view/)r|   Úsuperr}   rÍ   ©Ú	__class__r.   r/   r}   z  s   
ÿÿÿz&TestDisablePreviewWithoutMixin.get_urlrÊ   )rq   rr   rs   rÕ   r   rÌ   r}   Ú__classcell__r.   r.   rÙ   r/   rÖ   r  s    rÖ   )r[   Údjango.testr   r   Údjango.urlsr   Údjango.utilsr   Ú	freezegunr   Úwagtail.admin.staticfilesr   Ú#wagtail.admin.views.generic.previewr   Úwagtail.test.testapp.modelsr	   r
   r   r   r   Úwagtail.test.utilsr   Úwagtail.utils.deprecationr   r   rt   rË   rÖ   r.   r.   r.   r/   Ú<module>   s$      
  #4