o
    hV                     @   s  d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZmZ 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m Z  d dl!m"Z" G dd deZ#G dd deZ$G dd de"e#Z%edddddgididG dd de"e#Z&eddd iidG d!d" d"e"e#Z'edd#idd$id%dG d&d' d'e"e#Z(G d(d) d)eZ)eddddd*gididG d+d, d,e"e#Z*G d-d. d.e"e#Z+G d/d0 d0e"eZ,G d1d2 d2eZ-G d3d4 d4eZ.G d5d6 d6e"e#Z/dS )7    N)settings)SimpleTestCaseTestCase)override_settings)reversereverse_lazy)DraftailRichTextAreaget_rich_text_editor_widget)EditorHTMLConverterPageLinkHandler)Feature)RichTextBlock)Pageget_page_models)RichText)FeatureRegistry)SingleEventPage)CustomRichTextAreaLegacyRichTextArea)WagtailTestUtilsc                       s0   e Zd Zdd Z fddZ fddZ  ZS )BaseRichTextEditHandlerTestCasec                 C   sN   ddl m} |  jd jjd }t|dr|`t	 D ]}|j
  qdS )z
        These tests generate new panel definitions with different settings. The
        cached edit handlers should be cleared before and after each test run
        to ensure that no changes leak through to other tests.
        r   )DefaultRichBlockFieldPagebody	rich_textfieldN)wagtail.test.testapp.modelsr   get_edit_handlerget_form_classbase_fieldsblockchild_blockshasattrr   r   cache_clear)selfr   rich_text_block
page_class r&   b/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/admin/tests/test_rich_text.py_clear_edit_handler_cache   s   

z9BaseRichTextEditHandlerTestCase._clear_edit_handler_cachec                    s   t    |   d S N)supersetUpr(   r#   	__class__r&   r'   r+   ,   s   
z%BaseRichTextEditHandlerTestCase.setUpc                    s   |    t   d S r)   )r(   r*   tearDownr,   r-   r&   r'   r/   0   s   z(BaseRichTextEditHandlerTestCase.tearDown)__name__
__module____qualname__r(   r+   r/   __classcell__r&   r&   r-   r'   r      s    r   c                   @   sn   e Zd Ze dd Zedddiiddd Zed	ddiidd
d Zeddiddidddd ZdS )TestGetRichTextEditorWidgetc                 C   s    t tdrt`| t t d S )NWAGTAILADMIN_RICH_TEXT_EDITORS)r!   r   r5   assertIsInstancer	   r   r,   r&   r&   r'   test_default6   s   
z(TestGetRichTextEditorWidget.test_defaultdefaultWIDGET1wagtail.test.testapp.rich_text.CustomRichTextArear5   c                 C   s   |  t t d S r)   )r6   r	   r   r,   r&   r&   r'   test_overridden_default_editor>   s   z:TestGetRichTextEditorWidget.test_overridden_default_editorcustomc                 C   "   |  t t |  tdt d S Nr=   )r6   r	   r   r   r,   r&   r&   r'   "test_custom_editor_without_defaultF   s   z>TestGetRichTextEditorWidget.test_custom_editor_without_default1wagtail.test.testapp.rich_text.LegacyRichTextArear8   r=   c                 C   r>   r?   )r6   r	   r   r   r,   r&   r&   r'   test_custom_editor_with_defaultO   s   z;TestGetRichTextEditorWidget.test_custom_editor_with_defaultN)r0   r1   r2   r   r7   r<   r@   rC   r&   r&   r&   r'   r4   5   s&    


r4   c                       s>   e Zd Z fddZe dd Zeje dd Z  Z	S )TestDefaultRichTextc                    &   t    tjjdd| _|   d S N   idr*   r+   r   objectsget	root_pageloginr,   r-   r&   r'   r+   [      
zTestDefaultRichText.setUpc                 C   sz   t tdrt`| jtddd| jjfd}| |j	d | 
|d | 
|d | 
|d	 | |d
 | |d d S )Nr5   wagtailadmin_pages:addtestsdefaultrichtextfieldpageargs   zdata-controller="w-init"z)data-w-init-event-value="w-draftail:init"wagtailadmin/js/draftail.js!testapp/js/draftail-blockquote.js#testapp/css/draftail-blockquote.cssr!   r   r5   clientrL   r   rM   rI   assertEqualstatus_codeassertContainsassertNotContainsr#   responser&   r&   r'   &test_default_editor_in_rich_text_fieldb   s   
z:TestDefaultRichText.test_default_editor_in_rich_text_fieldc                 C   sn   t tdrt`| jtddd| jjfd}| |j	d | 
|d | 
|d | |d	 | |d
 d S )Nr5   rP   rQ   defaultrichblockfieldpagerS   rU   z4window.draftail.initEditor('#__PREFIX__\u002Dvalue',rV   rW   rX   rY   r_   r&   r&   r'   &test_default_editor_in_rich_text_block~   s   
z:TestDefaultRichText.test_default_editor_in_rich_text_block)
r0   r1   r2   r+   r   ra   unittestexpectedFailurerc   r3   r&   r&   r-   r'   rD   Z   s    
rD   r8   ,wagtail.admin.rich_text.DraftailRichTextAreafeaturesh2	quotationr9   OPTIONSr;   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )TestDraftailFeatureMediaz|
    Features that define additional js/css imports (blockquote, in this case) should
    have those loaded on the page
    c                    rE   rF   rJ   r,   r-   r&   r'   r+      rO   zTestDraftailFeatureMedia.setUpc                 C   F   | j tddd| jjfd}| |d | |d | |d d S )NrP   rQ   rR   rS   rV    testapp/js/draftail-quotation.js"testapp/css/draftail-quotation.cssrZ   rL   r   rM   rI   r]   r_   r&   r&   r'   %test_feature_media_on_rich_text_field      z>TestDraftailFeatureMedia.test_feature_media_on_rich_text_fieldc                 C   rm   )NrP   rQ   rb   rS   rV   rn   ro   rp   r_   r&   r&   r'   %test_feature_media_on_rich_text_block   rr   z>TestDraftailFeatureMedia.test_feature_media_on_rich_text_block)r0   r1   r2   __doc__r+   rq   rs   r3   r&   r&   r-   r'   rl      s
    	rl   r9   rA   c                       2   e Zd Z fddZdd Zejdd Z  ZS )TestOverriddenDefaultRichTextc                    rE   rF   rJ   r,   r-   r&   r'   r+         
z#TestOverriddenDefaultRichText.setUpc                 C   H   | j tddd| jjfd}| |jd | |d | |d d S )NrP   rQ   rR   rS   rU   ;<template data-controller="custom-editor" data-id="id_body";<template data-controller="legacy-editor" data-id="id_body"	rZ   rL   r   rM   rI   r[   r\   r^   r]   r_   r&   r&   r'   1test_overridden_default_editor_in_rich_text_field      zOTestOverriddenDefaultRichText.test_overridden_default_editor_in_rich_text_fieldc                 C   rx   )NrP   rQ   rb   rS   rU   zD<template data-controller="custom-editor" data-id="__PREFIX__-value"zD<template data-controller="legacy-editor" data-id="__PREFIX__-value"r{   r_   r&   r&   r'   1test_overridden_default_editor_in_rich_text_block   s   zOTestOverriddenDefaultRichText.test_overridden_default_editor_in_rich_text_block)	r0   r1   r2   r+   r|   rd   re   r~   r3   r&   r&   r-   r'   rv      s
    rv   z<wagtail.admin.tests.test_rich_text.TestCustomDefaultRichTextr:   rB   c                       ru   )TestCustomDefaultRichTextc                    rE   rF   rJ   r,   r-   r&   r'   r+     rw   zTestCustomDefaultRichText.setUpc                 C   rx   )NrP   rQ   customrichtextfieldpagerS   rU   rz   ry   r{   r_   r&   r&   r'   %test_custom_editor_in_rich_text_field  r}   z?TestCustomDefaultRichText.test_custom_editor_in_rich_text_fieldc                 C   s<   | j tddd| jjfd}| |jd | |d d S )NrP   rQ   customrichblockfieldpagerS   rU   ry   )rZ   rL   r   rM   rI   r[   r\   r]   r_   r&   r&   r'   %test_custom_editor_in_rich_text_block*  s   z?TestCustomDefaultRichText.test_custom_editor_in_rich_text_block)	r0   r1   r2   r+   r   rd   re   r   r3   r&   r&   r-   r'   r     s
    	r   c                   @   s   e Zd Zdd Zdd ZdS )TestRichTextValuec                 C   s8   t jjdd| _tdddddd| _| jj| jd	 d S )
NrG   rH   foozthe moonpublicfreez
2001-01-01)titlelocationaudiencecost	date_from)instance)r   rK   rL   rM   r   single_event_page	add_childr,   r&   r&   r'   r+   <  s   zTestRichTextValue.setUpc                 C   s2   d | jj}t|}t|}d}| || d S )Nz2<p>To the <a linktype="page" id="{}">moon</a>!</p>z8<p>To the <a href="/foo/pointless-suffix/">moon</a>!</p>)formatr   rI   r   strr[   )r#   textvalueresultexpectedr&   r&   r'   test_renderH  s   zTestRichTextValue.test_renderN)r0   r1   r2   r+   r   r&   r&   r&   r'   r   ;  s    r   imagec                       ru   )TestDraftailWithFeatureOptionsc                    rE   rF   rJ   r,   r-   r&   r'   r+   [  rw   z$TestDraftailWithFeatureOptions.setUpc                 C   sn   | j tddd| jjfd}| |j}|ddddd	}|d
 }| d| | d| | 	d| d S )NrP   rQ   rR   rS   input w-initw-draftail:initzdata-draftail-inputzdata-controllerzdata-w-init-event-valuedata-w-init-detail-value"type": "header-two"z"type": "IMAGE"z"type": "ordered-list-item")
rZ   rL   r   rM   rI   get_soupcontentfindassertInassertNotInr#   r`   soupr   datar&   r&   r'   0test_settings_features_option_on_rich_text_fieldc  s$   zOTestDraftailWithFeatureOptions.test_settings_features_option_on_rich_text_fieldc                 C   sT   t ddgd}||dd}| d| | d| | d| | d	| d S )
Nrh   embedrg   z<p>hello</p>r   r   z"type": "EMBED"z"type": "IMAGE""z"type": "ordered-list-item"")r   render_form	to_pythonr   r   )r#   r   	form_htmlr&   r&   r'   'test_features_option_on_rich_text_blocky  s   zFTestDraftailWithFeatureOptions.test_features_option_on_rich_text_block)	r0   r1   r2   r+   r   rd   re   r   r3   r&   r&   r-   r'   r   R  s
    	r   c                       sZ   e Zd Z fddZedddiiddd Zeddd	g d
ididdd Z  ZS )"TestDraftailWithAdditionalFeaturesc                    rE   rF   rJ   r,   r-   r&   r'   r+     rw   z(TestDraftailWithAdditionalFeatures.setUpr8   r9   rf   r;   c                 C   s   | j tddd| jjfd}| |jd | |j}|	dddd	d
}|d }| 
d| | 
d| | 
d| | d| | d| | d| | d| | d| d S )NrP   rQ   rR   rS   rU   r   r   r   r   r   r   r   "type": "LINK""type": "ITALIC""type": "CODE""type": "blockquote""type": "SUPERSCRIPT""type": "SUBSCRIPT""type": "STRIKETHROUGH"rZ   rL   r   rM   rI   r[   r\   r   r   r   r   r   r   r&   r&   r'   :test_additional_features_should_not_be_included_by_default  s0   z]TestDraftailWithAdditionalFeatures.test_additional_features_should_not_be_included_by_defaultrg   )rh   code
blockquotestrikethrough	subscriptsuperscriptrj   c                 C   s   | j tddd| jjfd}| |jd | |j}|	dddd	d
}|d }| 
d| | 
d| | 
d| | 
d| | 
d| | 
d| | d| | d| d S )NrP   rQ   rR   rS   rU   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r'   !test_additional_features_included  s0   	zDTestDraftailWithAdditionalFeatures.test_additional_features_included)r0   r1   r2   r+   r   r   r   r3   r&   r&   r-   r'   r     s$    
!r   c                   @   s*   e Zd ZdgZdd Zdd Zdd ZdS )	TestPageLinkHandlerz	test.jsonc                 C   s.   |  d}|j}t|}| |ddi d S )Nz<a data-id="test-id">foo</a>rI   ztest-id)r   ar   get_db_attributesr[   )r#   r   tagr   r&   r&   r'   test_get_db_attributes  s   

z*TestPageLinkHandler.test_get_db_attributesc                 C   sL   t ddi}| |d tjjddj}t d|i}| |d|  d S )NrI      z0<a data-linktype="page" data-id="1" href="None">/home/events/url_pathzH<a data-linktype="page" data-id="%d" data-parent-id="2" href="/events/">)r   expand_db_attributesr[   r   rK   rL   pk)r#   r   events_page_idr&   r&   r'   $test_expand_db_attributes_for_editor  s   z8TestPageLinkHandler.test_expand_db_attributes_for_editorc                 C   sB   t jjddj}d| }tdgd}||}| |d|  d S )Nr   r   z"<a linktype="page" id="%d">foo</a>linkr   zO<a data-linktype="page" data-id="%d" data-parent-id="2" href="/events/">foo</a>)r   rK   rL   r   r
   from_database_formatr[   )r#   r   db_html	convertereditor_htmlr&   r&   r'   -test_editorhtmlconverter_from_database_format  s   
zATestPageLinkHandler.test_editorhtmlconverter_from_database_formatN)r0   r1   r2   fixturesr   r   r   r&   r&   r&   r'   r     s
    r   c                   @      e Zd Zdd ZdS )TestWidgetNotHiddenc                 C   s   |  t jd d S )NF)assertIsr   	is_hiddenr,   r&   r&   r'   test_draftail  s   z!TestWidgetNotHidden.test_draftailN)r0   r1   r2   r   r&   r&   r&   r'   r         r   c                   @   r   )TestDraftailFeaturec                 C   s:   t dgddgid}t|j}| |d | |d d S )Nz"wagtailadmin/js/example/feature.jsallz$wagtailadmin/css/example/feature.css)jscsszfeature.js\?v=(\w+)zfeature.css\?v=(\w+))r   r   mediaassertRegex)r#   feature
media_htmlr&   r&   r'   test_versioned_static_media  s   
z/TestDraftailFeature.test_versioned_static_mediaN)r0   r1   r2   r   r&   r&   r&   r'   r     r   r   c                       sF   e Zd Z fddZedddiiddd Zd	d
 Zdd Z  ZS )TestRichTextChooserUrlsc                    rE   rF   rJ   r,   r-   r&   r'   r+   $  rw   zTestRichTextChooserUrls.setUpr8   r9   rf   r;   c                 C   s   t  }|dd}| |jd | |jd d td | |jd d td | |jd d td	 | |jd d
 td | |jd d td d S )Ndraftailr   chooserUrlspageChooserwagtailadmin_choose_pageexternalLinkChooser&wagtailadmin_choose_page_external_linkemailLinkChooser#wagtailadmin_choose_page_email_linkphoneLinkChooser#wagtailadmin_choose_page_phone_linkanchorLinkChooser$wagtailadmin_choose_page_anchor_link)r   get_editor_pluginassertIsNotNoner   rL   r[   r   )r#   rg   r   r&   r&   r'   test_chooser_urls_exist,  s.   z/TestRichTextChooserUrls.test_chooser_urls_existc                 C   sz   | j tddd| jjfd}| |j}|ddddd	}|d
 }| d| | d| | d| | d| d S )NrP   rQ   rR   rS   r   r   r   r   r   r   z9"chooserUrls": {"imageChooser": "/admin/images/chooser/"}z:"chooserUrls": {"embedsChooser": "/admin/embeds/chooser/"}z?"chooserUrls": {"documentChooser": "/admin/documents/chooser/"}a  "chooserUrls": {"pageChooser": "/admin/choose-page/", "externalLinkChooser": "/admin/choose-external-link/", "emailLinkChooser": "/admin/choose-email-link/", "phoneLinkChooser": "/admin/choose-phone-link/", "anchorLinkChooser": "/admin/choose-anchor-link/"})	rZ   rL   r   rM   rI   r   r   r   r   r   r&   r&   r'   )test_lazy_chooser_urls_resolved_correctlyM  s>   	zATestRichTextChooserUrls.test_lazy_chooser_urls_resolved_correctlyc                 C   sH   t  }|ddi }| d| | d| | d| | d| dS )zt
        Check that the lazy URLs have been resolved correctly in the rendered widget HTML data attributes.
        test_chooserUrlsr   z/admin/choose-page/z/admin/images/chooser/z/admin/embeds/chooser/z/admin/documents/chooser/N)r   renderr   )r#   widgethtmlr&   r&   r'   test_lazy_urls_resolutions  s   z1TestRichTextChooserUrls.test_lazy_urls_resolution)	r0   r1   r2   r+   r   r   r   r   r3   r&   r&   r-   r'   r   #  s    
&r   )0rd   django.confr   django.testr   r   django.test.utilsr   django.urlsr   r   wagtail.admin.rich_textr   r	   .wagtail.admin.rich_text.converters.editor_htmlr
   r   1wagtail.admin.rich_text.editors.draftail.featuresr   wagtail.blocksr   wagtail.modelsr   r   wagtail.rich_textr   "wagtail.rich_text.feature_registryr   r   r   wagtail.test.testapp.rich_textr   r   wagtail.test.utilsr   r   r4   rD   rl   rv   r   r   r   r   r   r   r   r   r&   r&   r&   r'   <module>   sl    %B
&5/

-f!