U
    {h3                    @   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mZ d dlmZ dd	d
ZG dd deZG dd deZdS )    N)patch)TestCase)DOM)HTML)ContentstateConverterpersist_key_for_block)EmbedFc                    s   t | t krdS t| trVt|  t kr:dS t fdd|  D S t| trt| tkrtdS t fddt	| D S | kS dS )zaTest whether two contentState structures are equal, ignoring 'key' properties if match_keys=FalseFc                 3   s2   | ]*\}}|d kr  p(t ||  dV  qdS )key
match_keysNcontent_state_equal).0kvr   v2 m/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/tests/test_contentstate.py	<genexpr>   s   z&content_state_equal.<locals>.<genexpr>c                 3   s    | ]\}}t || d V  qdS )r
   Nr   )r   abr
   r   r   r      s    N)
type
isinstancedictsetkeysallitemslistlenzip)v1r   r   r   r   r   r      s    

r   c                   @   s\  e Zd ZdgZdSd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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/d0 Zed1d2d3 Zed1d4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRS )TTestHtmlToContentStatez	test.jsonFc              	   C   s6   |  t|||ddtj|ddtj|ddf  dS )zcAssert that two contentState structures are equal, ignoring 'key' properties if match_keys is Falser
   z%s does not match %s   )indentN)Z
assertTruer   jsondumps)selfr"   r   r   r   r   r   assertContentStateEqual)   s    z.TestHtmlToContentState.assertContentStateEqualc                 C   sT   t g d}t|d}| j|i g ddddg dg dddd	g dgd
dd d S )Nfeatures}
            <p data-block-key='00000'>Hello world!</p>
            <p data-block-key='00001'>Goodbye world!</p>
            Hello world!r   unstyled00000inlineStyleRangestextdepthr   r	   entityRangesGoodbye world!00001	entityMapblocksTr
   r   r&   loadsfrom_database_formatr)   r(   	converterresultr   r   r   test_paragraphs1   s6    
	z&TestHtmlToContentState.test_paragraphsc                 C   s`   t g d}t|d}| |i g ddddg dg ddddg dg d	dddg dgd
 d S )Nr*   z~
            <foo>Hello world!</foo>
            <foo>I said hello world!</foo>
            <p>Goodbye world!</p>
            r-   r   r.   r/   r0   zI said hello world!r5   r7   r:   r=   r   r   r   $test_unknown_block_becomes_paragraphU   sB    
			z;TestHtmlToContentState.test_unknown_block_becomes_paragraphc                 C   s   t g d}t|d}| |i g ddddg dg ddddg dg d	dddg dg ddddg dg d
dddg dgd d S )Nr*   z
            before
            <p>paragraph</p>
            between
            <p>paragraph</p>
            after
            beforer   r.   r/   r0   Z	paragraphZbetweenafterr7   r:   r=   r   r   r    test_bare_text_becomes_paragraph   s^    
				z7TestHtmlToContentState.test_bare_text_becomes_paragraphc                 C   s@   t g d}t|d}| |i g ddddg dgd d S )	Nr*   zB
            <p>Hello <foo>frabjuous</foo> world!</p>
            zHello frabjuous world!r   r.   r/   r0   r7   r:   r=   r   r   r   'test_ignore_unrecognised_tags_in_blocks   s&    
z>TestHtmlToContentState.test_ignore_unrecognised_tags_in_blocksc                 C   sX   t ddgd}t|d}| |i ddddd	d
ddgddddg dgd d S )Nbolditalicr*   R
            <p>You <b>do <em>not</em> talk</b> about Fight Club.</p>
            r$      BOLDoffsetlengthstyle      ITALIC!You do not talk about Fight Club.r   r.   r/   r0   r7   r:   r=   r   r   r   test_inline_styles   s*    

z)TestHtmlToContentState.test_inline_stylesc                 C   sX   t ddgd}t|d}| |i ddddd	d
ddgddddg dgd d S )NrF   rG   r*   zK
            You <b>do <em>not</em> talk</b> about Fight Club.
            r$   rI   rJ   rK   rO   rP   rQ   rR   r   r.   r/   r0   r7   r:   r=   r   r   r   test_inline_styles_at_top_level   s*    

z6TestHtmlToContentState.test_inline_styles_at_top_levelc                 C   sX   t ddgd}t|d}| |i ddddd	d
ddgddddg dgd d S )NrF   rG   r*   z?<b>Seriously</b>, stop talking about <i>Fight Club</i> already.r   	   rJ   rK      
   rQ   z1Seriously, stop talking about Fight Club already.r.   r/   r0   r7   r:   r=   r   r   r   )test_inline_styles_at_start_of_bare_block  s*    

z@TestHtmlToContentState.test_inline_styles_at_start_of_bare_blockc                 C   sN   t ddgd}t|d}| |i ddddgd	d
ddg dgd d S )NrG   zjust-made-it-upr*   rH   rO   rP   rQ   rK   rR   r   r.   r/   r0   r7   r:   r=   r   r   r   %test_inline_styles_depend_on_features.  s(    
z<TestHtmlToContentState.test_inline_styles_depend_on_featuresc                 C   s   t ddddgd}t|d}| j|i g ddd	d
g dg ddddg dddddddddgddddg dgddd d S )Nh1olrF   rG   r*   a(  
            <h1 data-block-key='00000'>The rules of Fight Club</h1>
            <ol>
                <li data-block-key='00001'>You do not talk about Fight Club.</li>
                <li data-block-key='00002'>You <b>do <em>not</em> talk</b> about Fight Club.</li>
            </ol>
            The rules of Fight Clubr   
header-oner/   r0   rR   ordered-list-itemr6   r$   rI   rJ   rK   rO   rP   rQ   00002r7   Tr
   r:   r=   r   r   r   test_ordered_listJ  sH    	


 z(TestHtmlToContentState.test_ordered_listc                 C   s   t ddgd}t|d}| j|i g ddddg d	g d
dddg d	g ddddg d	g ddddg d	g ddddg d	g ddddg d	gddd d S )NrZ   ulr*   a  
            <h1 data-block-key='00000'>Shopping list</h1>
            <ul>
                <li data-block-key='00001'>Milk</li>
                <li data-block-key='00002'>
                    Flour
                    <ul>
                        <li data-block-key='00003'>Plain</li>
                        <li data-block-key='00004'>Self-raising</li>
                    </ul>
                </li>
                <li data-block-key='00005'>Eggs</li>
            </ul>
            zShopping listr   r]   r/   r0   Milkunordered-list-itemr6   ZFlourr_   ZPlain   Z00003zSelf-raisingZ00004EggsZ00005r7   Tr
   r:   r=   r   r   r   test_nested_list|  sn    					5z'TestHtmlToContentState.test_nested_listc                 C   s\   t dgd}t|d}| |dddddid	ig d
dddddddgdgd d S )Nlinkr*   zR
            <p>an <a href="http://wagtail.org">external</a> link</p>
            0MUTABLELINKurlhttp://wagtail.org
mutabilityr   dataan external linkr   r.   r/   rP      rL   rM   r	   r0   r7   r:   r=   r   r   r   test_external_link  s0    	z)TestHtmlToContentState.test_external_linkc                 C   s\   t dgd}t|d}| |dddddid	ig d
dddddddgdgd d S )Nrg   r*   z1an <a href="http://wagtail.org">external</a> linkrh   ri   rj   rk   rl   rm   rp   r   r.   r/   rP   rq   rr   r0   r7   r:   r=   r   r   r   test_link_in_bare_text  s0    	z-TestHtmlToContentState.test_link_in_bare_textc                 C   st   t dgd}t|d}| |ddddiddddd	idd
g ddddddddddddgdgd d S )Nrg   r*   z_<a href="http://wagtail.org">an external link</a> and <a href="http://torchbox.com">another</a>ri   rj   rk   rl   rm   zhttp://torchbox.comrh   1zan external link and anotherr   r.   r/      rr      rO   rd   r0   r7   r:   r=   r   r   r   test_link_at_start_of_bare_text  s:    

z6TestHtmlToContentState.test_link_at_start_of_bare_textc                 C   s`   t dgd}t|d}| |dddddd	d
dig ddddddddgdgd d S )Nrg   r*   zO
            <p>an <a linktype="page" id="3">internal</a> link</p>
            rh   ri   rj   rP   z/events/   idrk   ZparentIdrm   an internal linkr   r.   r/   rq   rr   r0   r7   r:   r=   r   r   r   test_page_link.  s0    
	z%TestHtmlToContentState.test_page_linkc                 C   s`   t dgd}t|d}| |ddddd d dd	ig d
dddddddgdgd d S )Nrg   r*   zR
            <p>an <a linktype="page" id="9999">internal</a> link</p>
            rh   ri   rj   '  r{   rm   r}   r   r.   r/   rP   rq   rr   r0   r7   r:   r=   r   r   r   test_broken_page_linkN  s6    z,TestHtmlToContentState.test_broken_page_linkc                 C   s`   t dgd}t|d}| |ddddd d dd	ig d
dddddddgdgd d S )Nrg   r*   zO
            <p>an <a linktype="page" id="1">internal</a> link</p>
            rh   ri   rj   rd   r{   rm   r}   r   r.   r/   rP   rq   rr   r0   r7   r:   r=   r   r   r   test_link_to_root_pager  s0    
	z-TestHtmlToContentState.test_link_to_root_pagec                 C   s`   t dgd}t|d}| |dddddd	d
dig ddddddddgdgd d S )Ndocument-linkr*   zR
            <p>a <a linktype="document" id="1">document</a> link</p>
            rh   ri   DOCUMENTrd   z/documents/1/test.pdfztest.pdf)r|   rk   filenamerm   a document linkr   r.   r/   rz   rq   rr   r0   r7   r:   r=   r   r   r   test_document_link  s6    z)TestHtmlToContentState.test_document_linkc                 C   s\   t dgd}t|d}| |dddddid	ig d
dddddddgdgd d S )Nr   r*   zU
            <p>a <a linktype="document" id="9999">document</a> link</p>
            rh   ri   r   r|   r   rm   r   r   r.   r/   rz   rq   rr   r0   r7   r:   r=   r   r   r   test_broken_document_link  s0    	z0TestHtmlToContentState.test_broken_document_linkc                 C   sX   t dgd}t|d}| |dddi dig dd	d
dddd	dgdgd d S )Nr   r*   zK
            <p>a <a linktype="document">document</a> link</p>
            rh   ri   r   rm   r   r   r.   r/   rz   rq   rr   r0   r7   r:   r=   r   r   r   "test_document_link_with_missing_id  s*     
z9TestHtmlToContentState.test_document_link_with_missing_idc                 C   s   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdddddddddid d S )Nimager*   z
            <p>before</p>
            <embed embedtype="image" alt="an image" id="1" format="left" />
            <p>after</p>
            r/   r   rB   r.   r	   r1   r4   r3   r2   r   rd   r	   rL   rM    atomicrC   rh   leftan imagerv   /media/not-foundformatZaltr|   src	IMMUTABLEIMAGEro   rn   r   r9   r8   r:   r=   r   r   r   test_image_embed  sT    			z'TestHtmlToContentState.test_image_embedc                 C   s   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g dddddg d	dd	d
gdddddg g ddddgdddddddddddddddddd d S )Nr   r*   z
            <embed embedtype="image" alt="an image" id="1" format="left" />
            <embed embedtype="image" alt="an image" id="1" format="left" />
            r/   r    r.   r   rd   r   r   r   r   r   rv   r   r   r   r   r   ru   r   r:   r=   r   r   r   .test_add_spacer_paragraph_between_image_embeds)  s~    				-zETestHtmlToContentState.test_add_spacer_paragraph_between_image_embedsc                 C   s   t ddgd}t|d}| |ddddd	d
dddig ddddg dg ddddg ddg ddddgddddg ddddg dg ddddg dgd dS )zZ
        There should be no spacer paragraph inserted between a list and an image
        ra   r   r*   a!  
            <ul>
                <li>Milk</li>
                <li>Eggs</li>
            </ul>
            <embed embedtype="image" alt="an image" id="1" format="left" />
            <ul>
                <li>More milk</li>
                <li>More eggs</li>
            </ul>
            rh   r   r   rv   r   r   r   r   r   rb   r   rc   r/   r0   re   rd   r   r   r   r   z	More milkz	More eggsr7   Nr:   r=   r   r   r   test_image_after_listy  sp    				z,TestHtmlToContentState.test_image_after_listzwagtail.embeds.embeds.get_embedc                 C   s   t dd ddddddddd	
|_td
gd}t|d}| |dg g dddddg ddddgdddddg g ddddgdddddddddddid d S )N+https://www.youtube.com/watch?v=Kh0Y2hVe_bwvideo	test htmlwhat are birdslook around youYouTubehttp://test/thumbnail.url  
rk   	max_widthr   htmltitleZauthor_nameZprovider_nameZthumbnail_urlwidthheightembedr*   z
            <p>before</p>
            <embed embedtype="media" url="https://www.youtube.com/watch?v=Kh0Y2hVe_bw" />
            <p>after</p>
            r/   r   rB   r.   r   rd   r   r   r   rC   rh   Z	thumbnailZ	embedTypeZproviderNamer   Z
authorNamerk   r   EMBEDr   r   r   Zreturn_valuer   r&   r;   r<   r)   r(   Z	get_embedr>   r?   r   r   r   test_media_embed  sp    			z'TestHtmlToContentState.test_media_embedc                 C   s   t dd ddddddddd	
|_td
gd}t|d}| |dg g dddddg ddddgdddddg g dddddg ddddgdddddg g ddddgdddddddddddddddddddddd d S )Nr   r   r   r   r   r   r   r   r   r   r*   z
            <embed embedtype="media" url="https://www.youtube.com/watch?v=Kh0Y2hVe_bw" />
            <embed embedtype="media" url="https://www.youtube.com/watch?v=Kh0Y2hVe_bw" />
            r/   r   r   r.   r   rd   r   r   r   r   r   r   r   ru   r   r   r   r   r   r   *test_add_spacer_paras_between_media_embeds  s    				-zATestHtmlToContentState.test_add_spacer_paras_between_media_embedsc                 C   sx   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdi dddid d S )Nhrr*   zS
            <p>before</p>
            <hr />
            <p>after</p>
            r/   r   rB   r.   r   rd   r   r   r   rC   rh   r   HORIZONTAL_RULEr   r   r:   r=   r   r   r   test_hrr  sL    			zTestHtmlToContentState.test_hrc                 C   s   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g dddddg d	dd	d
gdddddg g ddddgi dddi ddddd d S )Nr   r*   z3
            <hr />
            <hr />
            r/   r   r   r.   r   rd   r   r   r   r   r   r   ru   r   r:   r=   r   r   r   %test_add_spacer_paragraph_between_hrs  sn    				,z<TestHtmlToContentState.test_add_spacer_paragraph_between_hrsc                 C   sx   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdi dddid d S )Nr   r*   z2
            <p>before<hr />after</p>
            r/   r   rB   r.   r   rd   r   r   r   rC   rh   r   r   r   r   r:   r=   r   r   r   test_block_element_in_paragraph  sL    		z6TestHtmlToContentState.test_block_element_in_paragraphc                 C   s@   t g d}t|d}| |i dg g ddddgd d S )	Nr*   z1
            <p>before<br/>after</p>
            r/   r   zbefore
afterr.   r   r7   r:   r=   r   r   r   test_br_element_in_paragraph  s&    
z3TestHtmlToContentState.test_br_element_in_paragraphc                 C   sP   t g d}t|d}| |i dg g dddddg g ddddgd	 d S )
Nr*   zS
            <p>before</p>
            <br />
            <p>after</p>
            r/   r   rB   r.   r   rC   r7   r:   r=   r   r   r   "test_br_element_between_paragraphs4  s4    
		z9TestHtmlToContentState.test_br_element_between_paragraphsc                 C   sx   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdi dddid d S )Nr   r*   z'
            <p><hr /></p>
            r/   r   r   r.   r   rd   r   r   r   rh   r   r   r   r   r:   r=   r   r   r   %test_block_element_in_empty_paragraphX  sL    
		z<TestHtmlToContentState.test_block_element_in_empty_paragraphc                 C   s@   t g d}t|d}| |i g ddddg dgd d S )	Nr*   zf
            <p>Arthur &quot;two sheds&quot; Jackson &lt;the third&gt; &amp; his wife</p>
            z1Arthur "two sheds" Jackson <the third> & his wifer   r.   r/   r0   r7   r:   r=   r   r   r   test_html_entities  s&    
z)TestHtmlToContentState.test_html_entitiesc                 C   sP   t g d}t|d}| |i g ddddg dg ddddg dgd	 d S )
Nr*   u   
            <p>Multiple whitespaces:     should  be reduced</p>
            <p>Multiple non-breaking whitespace characters:       should be preserved</p>
            z'Multiple whitespaces: should be reducedr   r.   r/   r0   uG   Multiple non-breaking whitespace characters:     should be preservedr7   r:   r=   r   r   r   ,test_collapse_targeted_whitespace_characters  s4    
	zCTestHtmlToContentState.test_collapse_targeted_whitespace_charactersc                 C   s@   t g d}t|d}| |i g ddddg dgd d S )	Nr*   z8
            </p>
            <p>Before</p>
            ZBeforer   r.   r/   r0   r7   r:   r=   r   r   r   test_extra_end_tag_before  s&    

z0TestHtmlToContentState.test_extra_end_tag_beforec                 C   s@   t g d}t|d}| |i g ddddg dgd d S )	Nr*   z7
            <p>After</p>
            </p>
            ZAfterr   r.   r/   r0   r7   r:   r=   r   r   r   test_extra_end_tag_after  s&    

z/TestHtmlToContentState.test_extra_end_tag_afterc                 C   sR   t dgd}t|d}| |dg g dddddg g dd	d
dgi d d S )NZintror*   zN
            <p class="intro">before</p>
            <p>after</p>
            r/   r   rB   zintro-paragraphr   rC   r.   r   r:   r=   r   r   r   test_p_with_class  s4    	z(TestHtmlToContentState.test_p_with_classc                 C   s   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdddddddddid d S )Nr   r*   zm
            <p>before <embed embedtype="image" alt="an image" id="1" format="left" /> after</p>
            r/   r   rB   r.   r   rd   r   r   r   rC   rh   r   r   rv   r   r   r   r   r   r   r:   r=   r   r   r   test_image_inside_paragraph*  sT    		z2TestHtmlToContentState.test_image_inside_paragraphc                 C   s   t ddgd}t|d}| |ddddd	gg dd
dddg ddddgddddddddd	gg ddddddddd	gg dddddg ddddgddddddddd	gg ddddgdddddddddddddddddd d S )Nr   rG   r*   z
            <p><i>before <embed embedtype="image" alt="an image" id="1" format="left" /> after</i></p>
            <p><i><embed embedtype="image" alt="an image" id="1" format="left" /></i></p>
            r/   r      rQ   rK   rB   r.   r   rd   r   r   r      rC   r   r   r   rv   r   r   r   r   r   ru   r   r:   r=   r   r   r   test_image_inside_stylea  s    
	

	
=z.TestHtmlToContentState.test_image_inside_stylec                 C   s  t ddgd}t|d}| |dg ddddgdd	d
ddg ddddgdddddg ddddgddd
ddg ddddgddd
ddg ddddgdddddg ddddgddd
dgddddiddddddddd ddddiddddddddd d!d" d S )#Nr   rg   r*   a  
            <p><a href="https://wagtail.org">before <embed embedtype="image" alt="an image" id="1" format="left" /> after</a></p>
            <p><a href="https://wagtail.org"><embed embedtype="image" alt="an image" id="1" format="left" /></a></p>
            r/   r   r   r   rB   r.   r   rd   r   r   r   rC   rz   r   rP   ri   rj   rk   zhttps://wagtail.orgrm   r   r   rv   r   r   r   r   r   )rh   rv   23r   r:   r=   r   r   r   test_image_inside_link  s    					4z-TestHtmlToContentState.test_image_inside_linkN)F),__name__
__module____qualname__Zfixturesr)   r@   rA   rD   rE   rS   rT   rX   rY   r`   rf   rs   rt   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   &   sT   
$,>2N & $ $ 7PP
F
a2F0$3%&7cr#   c                   @   sD   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S )TestContentStateToHtmlc                 C   s`   t dgd}tdddddidig d	d
ddddd
dgdgd}||}| |d d S )Nrg   r*   rh   ri   rj   rk   rl   rm   rp   r   r.   r/   rP   rq   rr   r0   r7   zO<p data-block-key="00000">an <a href="http://wagtail.org">external</a> link</p>r   r&   r'   to_database_formatZassertEqualr(   r>   Zcontentstate_jsonr?   r   r   r   rs   +  s.    	
z)TestContentStateToHtml.test_external_linkc                 C   s`   t dgd}tdddddidig d	d
ddddd
dgdgd}||}| |d d S )Nrg   r*   rh   ri   rj   rk   z/some/local/path/rm   rp   r   r.   r/   rP   rq   rr   r0   r7   zN<p data-block-key="00000">an <a href="/some/local/path/">external</a> link</p>r   r   r   r   r   test_local_linkI  s.    	
z&TestContentStateToHtml.test_local_linkc                 C   s`   t dgd}tdddddidig d	d
ddddd
dgdgd}||}| |d d S )Nrg   r*   rh   ri   rj   rk   zjavascript:alert('oh no')rm   rp   r   r.   r/   rP   rq   rr   r0   r7   z5<p data-block-key="00000">an <a>external</a> link</p>r   r   r   r   r   test_reject_javascript_linkg  s.    	
 z2TestContentStateToHtml.test_reject_javascript_linkc                 C   sT   t g d}ti g ddddg dg ddddg dgd	}||}| |d
 d S )Nr*   r-   r   r.   r/   r0   r5   r6   r7   r,   )r   r&   r'   r   assertHTMLEqual)r(   r>   contentStater?   r   r   r   test_paragraphs_retain_keys  s2    
	
z2TestContentStateToHtml.test_paragraphs_retain_keysc                 C   sh   t ddddgd}|ti g dddd	g d
g ddddg d
g ddddg d
gd}| |d d S )NrZ   r[   rF   rG   r*   r\   r   r]   r/   r0   rR   r^   r6   r_   r7   a  
            <h1 data-block-key='00000'>The rules of Fight Club</h1>
            <ol>
                <li data-block-key='00001'>You do not talk about Fight Club.</li>
                <li data-block-key='00002'>You do not talk about Fight Club.</li>
            </ol>
        )r   r   r&   r'   r   r=   r   r   r   test_wrapped_block_retains_key  sB    		!z5TestContentStateToHtml.test_wrapped_block_retains_keyc              	   C   sf   dt dd ii i g tjd}i g ddddg dg d	ddd
g dgd}t||}| |d d S )Nr.   c                 S   s   t di | d S )Npchildren)r   Zcreate_element)propsr   r   r   <lambda>      zATestContentStateToHtml.test_wrap_block_function.<locals>.<lambda>)Z	block_map	style_mapZentity_decoratorsZcomposite_decoratorsZenginer-   r   r/   r0   r5   r6   r7   r,   )r   r   STRINGHTMLExporterrenderr   )r(   Zexporter_configr   r?   r   r   r   test_wrap_block_function  s@     	z/TestContentStateToHtml.test_wrap_block_functionc                 C   st   t g d}| jdd6}|ti ddddgddd	d
g dgd}W 5 Q R X | |d | d|jd  d S )Nr*   WARNING)levelr      Z	UNDERLINErK   r-   r.   r/   r0   r7   z^
            <p data-block-key="00000">
                Hello world!
            </p>
        z/Missing config for "UNDERLINE". Deleting style.)r   Z
assertLogsr   r&   r'   r   ZassertInoutput)r(   r>   Z
log_outputr?   r   r   r   test_style_fallback  s2    

 z*TestContentStateToHtml.test_style_fallbackN)
r   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   *  s   "/-r   )F)r&   Zunittest.mockr   Zdjango.testr   Zdraftjs_exporter.domr   Zdraftjs_exporter.htmlr   r   Z/wagtail.admin.rich_text.converters.contentstater   r   Zwagtail.embeds.modelsr   r   r#   r   r   r   r   r   <module>   s.   
              