U
    {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r4|`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   Zget_edit_handlerZget_form_classbase_fieldsblockZchild_blockshasattrr   r   cache_clear)selfr   Zrich_text_blockZ
page_class r!   j/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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   r0   assertIsInstancer	   r   r'   r!   r!   r"   test_default6   s    
z(TestGetRichTextEditorWidget.test_defaultdefaultWIDGET1wagtail.test.testapp.rich_text.CustomRichTextArear0   c                 C   s   |  t t d S r$   )r1   r	   r   r'   r!   r!   r"   test_overridden_default_editor>   s    z:TestGetRichTextEditorWidget.test_overridden_default_editorcustomc                 C   s"   |  t t |  tdt d S Nr8   )r1   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r3   r8   c                 C   s"   |  t t |  tdt d S r9   )r1   r	   r   r   r'   r!   r!   r"   test_custom_editor_with_defaultO   s    z;TestGetRichTextEditorWidget.test_custom_editor_with_defaultN)r+   r,   r-   r   r2   r7   r:   r=   r!   r!   r!   r"   r/   5   s(   
 
 
r/   c                       s>   e Zd Z fddZe dd Zeje dd Z  Z	S )TestDefaultRichTextc                    s&   t    tjjdd| _|   d S N   idr%   r&   r   objectsget	root_pageloginr'   r(   r!   r"   r&   [   s    
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 )Nr0   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   r0   clientrE   r   rF   rB   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 )Nr0   rH   rI   defaultrichblockfieldpagerK   rM   z4window.draftail.initEditor('#__PREFIX__\u002Dvalue',rN   rO   rP   rQ   rW   r!   r!   r"   &test_default_editor_in_rich_text_block~   s     
 z:TestDefaultRichText.test_default_editor_in_rich_text_block)
r+   r,   r-   r&   r   rY   unittestexpectedFailurer[   r.   r!   r!   r(   r"   r>   Z   s   
r>   r3   ,wagtail.admin.rich_text.DraftailRichTextAreafeaturesh2Z	quotationr4   OPTIONSr6   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                    s&   t    tjjdd| _|   d S r?   rC   r'   r(   r!   r"   r&      s    
zTestDraftailFeatureMedia.setUpc                 C   sF   | j tddd| jjfd}| |d | |d | |d d S )NrH   rI   rJ   rK   rN    testapp/js/draftail-quotation.js"testapp/css/draftail-quotation.cssrR   rE   r   rF   rB   rU   rW   r!   r!   r"   %test_feature_media_on_rich_text_field   s    z>TestDraftailFeatureMedia.test_feature_media_on_rich_text_fieldc                 C   sF   | j tddd| jjfd}| |d | |d | |d d S )NrH   rI   rZ   rK   rN   rd   re   rf   rW   r!   r!   r"   %test_feature_media_on_rich_text_block   s    z>TestDraftailFeatureMedia.test_feature_media_on_rich_text_block)r+   r,   r-   __doc__r&   rg   rh   r.   r!   r!   r(   r"   rc      s   	rc   r4   r;   c                       s2   e Zd Z fddZdd Zejdd Z  ZS )TestOverriddenDefaultRichTextc                    s&   t    tjjdd| _|   d S r?   rC   r'   r(   r!   r"   r&      s    
z#TestOverriddenDefaultRichText.setUpc                 C   sH   | j tddd| jjfd}| |jd | |d | |d d S )NrH   rI   rJ   rK   rM   ;<template data-controller="custom-editor" data-id="id_body";<template data-controller="legacy-editor" data-id="id_body"	rR   rE   r   rF   rB   rS   rT   rV   rU   rW   r!   r!   r"   1test_overridden_default_editor_in_rich_text_field   s    zOTestOverriddenDefaultRichText.test_overridden_default_editor_in_rich_text_fieldc                 C   sH   | j tddd| jjfd}| |jd | |d | |d d S )NrH   rI   rZ   rK   rM   zD<template data-controller="custom-editor" data-id="__PREFIX__-value"zD<template data-controller="legacy-editor" data-id="__PREFIX__-value"rm   rW   r!   r!   r"   1test_overridden_default_editor_in_rich_text_block   s    zOTestOverriddenDefaultRichText.test_overridden_default_editor_in_rich_text_block)	r+   r,   r-   r&   rn   r\   r]   ro   r.   r!   r!   r(   r"   rj      s   rj   z<wagtail.admin.tests.test_rich_text.TestCustomDefaultRichTextr5   r<   c                       s2   e Zd Z fddZdd Zejdd Z  ZS )TestCustomDefaultRichTextc                    s&   t    tjjdd| _|   d S r?   rC   r'   r(   r!   r"   r&     s    
zTestCustomDefaultRichText.setUpc                 C   sH   | j tddd| jjfd}| |jd | |d | |d d S )NrH   rI   ZcustomrichtextfieldpagerK   rM   rl   rk   rm   rW   r!   r!   r"   %test_custom_editor_in_rich_text_field  s    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 )NrH   rI   ZcustomrichblockfieldpagerK   rM   rk   )rR   rE   r   rF   rB   rS   rT   rU   rW   r!   r!   r"   %test_custom_editor_in_rich_text_block*  s     z?TestCustomDefaultRichText.test_custom_editor_in_rich_text_block)	r+   r,   r-   r&   rq   r\   r]   rr   r.   r!   r!   r(   r"   rp     s   	rp   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 )
Nr@   rA   Zfoozthe moonpublicfreez
2001-01-01)titlelocationZaudienceZcostZ	date_from)instance)r   rD   rE   rF   r   single_event_pageZ	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>)formatry   rB   r   strrS   )r    textvalueresultexpectedr!   r!   r"   test_renderH  s    zTestRichTextValue.test_renderN)r+   r,   r-   r&   r   r!   r!   r!   r"   rs   ;  s   rs   imagec                       s2   e Zd Z fddZdd Zejdd Z  ZS )TestDraftailWithFeatureOptionsc                    s&   t    tjjdd| _|   d S r?   rC   r'   r(   r!   r"   r&   [  s    
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 )NrH   rI   rJ   rK   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")
rR   rE   r   rF   rB   get_soupcontentfindassertInassertNotInr    rX   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 )
Nr`   Zembedr_   z<p>hello</p>r   r   z"type": "EMBED"z"type": "IMAGE""z"type": "ordered-list-item"")r   Zrender_formZ	to_pythonr   r   )r    r   Z	form_htmlr!   r!   r"   'test_features_option_on_rich_text_blocky  s    zFTestDraftailWithFeatureOptions.test_features_option_on_rich_text_block)	r+   r,   r-   r&   r   r\   r]   r   r.   r!   r!   r(   r"   r   R  s   	r   c                
       sb   e Zd Z fddZedddiiddd Zeddd	d
dddddgididdd Z  ZS )"TestDraftailWithAdditionalFeaturesc                    s&   t    tjjdd| _|   d S r?   rC   r'   r(   r!   r"   r&     s    
z(TestDraftailWithAdditionalFeatures.setUpr3   r4   r^   r6   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 )NrH   rI   rJ   rK   rM   r   r   r   r   r   r   r   "type": "LINK""type": "ITALIC""type": "CODE""type": "blockquote""type": "SUPERSCRIPT""type": "SUBSCRIPT""type": "STRIKETHROUGH"rR   rE   r   rF   rB   rS   rT   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_defaultr_   r`   codeZ
blockquoteZstrikethroughZ	subscriptZsuperscriptra   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 )NrH   rI   rJ   rK   rM   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)r+   r,   r-   r&   r   r   r   r.   r!   r!   r(   r"   r     s2    
!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>rB   ztest-id)r   ar   Zget_db_attributesrS   )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 )NrB      z0<a data-linktype="page" data-id="1" href="None">/home/events/Zurl_pathzH<a data-linktype="page" data-id="%d" data-parent-id="2" href="/events/">)r   Zexpand_db_attributesrS   r   rD   rE   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   rD   rE   r   r
   Zfrom_database_formatrS   )r    r   Zdb_html	converterZeditor_htmlr!   r!   r"   -test_editorhtmlconverter_from_database_format  s    
zATestPageLinkHandler.test_editorhtmlconverter_from_database_formatN)r+   r,   r-   Zfixturesr   r   r   r!   r!   r!   r"   r     s   r   c                   @   s   e Zd Zdd ZdS )TestWidgetNotHiddenc                 C   s   |  t jd d S )NF)ZassertIsr   Z	is_hiddenr'   r!   r!   r"   test_draftail  s    z!TestWidgetNotHidden.test_draftailN)r+   r,   r-   r   r!   r!   r!   r"   r     s   r   c                   @   s   e Zd Zdd ZdS )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{   ZmediaassertRegex)r    featureZ
media_htmlr!   r!   r"   test_versioned_static_media  s     
z/TestDraftailFeature.test_versioned_static_mediaN)r+   r,   r-   r   r!   r!   r!   r"   r     s   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                    s&   t    tjjdd| _|   d S r?   rC   r'   r(   r!   r"   r&   $  s    
zTestRichTextChooserUrls.setUpr3   r4   r^   r6   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 )NZdraftailr   ZchooserUrlsZpageChooserZwagtailadmin_choose_pageZexternalLinkChooserZ&wagtailadmin_choose_page_external_linkZemailLinkChooserZ#wagtailadmin_choose_page_email_linkZphoneLinkChooserZ#wagtailadmin_choose_page_phone_linkZanchorLinkChooserZ$wagtailadmin_choose_page_anchor_link)r   Zget_editor_pluginZassertIsNotNoner   rE   rS   r   )r    r_   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 )NrH   rI   rJ   rK   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/"})	rR   rE   r   rF   rB   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.
        Ztest_chooserUrlsr   z/admin/choose-page/z/admin/images/chooser/z/admin/embeds/chooser/z/admin/documents/chooser/N)r   renderr   )r    Zwidgethtmlr!   r!   r"   test_lazy_urls_resolutions  s    z1TestRichTextChooserUrls.test_lazy_urls_resolution)	r+   r,   r-   r&   r   r   r   r   r.   r!   r!   r(   r"   r   #  s    
&r   )0r\   Zdjango.confr   Zdjango.testr   r   Zdjango.test.utilsr   Zdjango.urlsr   r   Zwagtail.admin.rich_textr   r	   Z.wagtail.admin.rich_text.converters.editor_htmlr
   r   Z1wagtail.admin.rich_text.editors.draftail.featuresr   Zwagtail.blocksr   Zwagtail.modelsr   r   Zwagtail.rich_textr   Z"wagtail.rich_text.feature_registryr   r   r   Zwagtail.test.testapp.rich_textr   r   Zwagtail.test.utilsr   r   r/   r>   rc   rj   rp   rs   r   r   r   r   r   r   r!   r!   r!   r"   <module>   sp   %B
& 5 /
-
 f!