U
    |hB                     @   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m	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d d	lmZmZmZm Z  G d
d deeZ!G dd deZ"G dd deZ#G dd deeZ$dS )    N)SimpleUploadedFile)TestCase)content_state_equal)PAGE_MODEL_CLASSESPageSite)DummyExternalStorage)BusinessChildBusinessIndexBusinessNowherePageBusinessSubIndex
EventIndex	EventPageSectionedRichTextPageSimpleChildPage
SimplePageSimpleParentPage
StreamPage)WagtailPageTestsWagtailTestUtils)inline_formsetnested_form_data	rich_textstreamfieldc                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestAssertTagInHTMLc              	   C   s   d}|  d| | j d|dd | t |  d| W 5 Q R X | t | j d|dd W 5 Q R X | t |  d| W 5 Q R X | t |  d| W 5 Q R X d S )	N<ul>
            <li class="normal">hugh</li>
            <li class="normal">pugh</li>
            <li class="really important" lang="en"><em>barney</em> mcgrew</li>
        </ul>z'<li lang="en" class="important really">z<li class="normal">   countz(<div lang="en" class="important really">z <li lang="en" class="important">z9<li lang="en" class="important really" data-extra="boom">ZassertTagInHTMLassertRaisesAssertionErrorselfZhaystack r$   `/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/tests/test_tests.pytest_assert_tag_in_html    s$       z+TestAssertTagInHTML.test_assert_tag_in_htmlc              	   C   sx   d}| j d|dd | j d|ddd | t | j d|dd W 5 Q R X | t | j d|d	dd W 5 Q R X d S )
Nr   z<li class="important really">T)allow_extra_attrsz<li>   )r   r'   z<li class="normal" lang="en">r   r   r"   r$   r$   r%   (test_assert_tag_in_html_with_extra_attrs6   s(        z<TestAssertTagInHTML.test_assert_tag_in_html_with_extra_attrsc              	   C   sF   d}|  d| | j d|dd | t |  d| W 5 Q R X d S )NaW  <html>
            <script type="text/template">
                <p class="really important">first template block</p>
            </script>
            <script type="text/template">
                <p class="really important">second template block</p>
            </script>
            <p class="normal">not in a script tag</p>
        </html>z<p class="important really">r   r   z<p class="normal">)ZassertTagInTemplateScriptr    r!   r"   r$   r$   r%   "test_assert_tag_in_template_scriptM   s    
  z6TestAssertTagInHTML.test_assert_tag_in_template_scriptN)__name__
__module____qualname__r&   r)   r*   r$   r$   r$   r%   r      s   r   c                       s\   e Zd Z f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  ZS )TestWagtailPageTestsc                    s&   t    tjjdd}|jj| _d S )NT)Zis_default_site)supersetUpr   objectsgetZ	root_pageZspecificroot)r#   site	__class__r$   r%   r0   b   s    
zTestWagtailPageTests.setUpc              	   C   sl   |  tt |  tt | tt | t |  tt W 5 Q R X | t | tt W 5 Q R X d S N)	ZassertCanCreateAtr   r   r   ZassertCanNotCreateAtr   r	   r    r!   r#   r$   r$   r%   test_assert_can_create_atg   s    z.TestWagtailPageTests.test_assert_can_create_atc                 C   s   |  tj  | | jtddd | tj  | tj j | | jt	dddddd	d
ddddddddd | | jt
dddddddddddd d S )NEvent Indexz{"entityMap": {},"blocks": [
                {"inlineStyleRanges": [], "text": "Event intro", "depth": 0, "type": "unstyled", "key": "00000", "entityRanges": []}
            ]}titleZintroFlierptextDit is onze mooie text0 r   z{"entityMap": {},"blocks": [
                {"inlineStyleRanges": [], "text": "Dit is onze mooie text in een ferrari", "depth": 0, "type": "unstyled", "key": "00000", "entityRanges": []}
            ]}1productpegsa pound23)r<   zbody-0-typezbody-0-valuezbody-0-orderzbody-0-deletedzbody-1-typezbody-1-valuezbody-1-orderzbody-1-deletedzbody-2-typezbody-2-value-namezbody-2-value-pricezbody-2-orderzbody-2-deletedz
body-count
Fight Club1000z{"entityMap": {},"blocks": [
                {"inlineStyleRanges": [], "text": "Rule 1: You do not talk about Fight Club", "depth": 0, "type": "unstyled", "key": "00000", "entityRanges": []}
            ]}z{"entityMap": {},"blocks": [
                {"inlineStyleRanges": [], "text": "Rule 2: You DO NOT talk about Fight Club", "depth": 0, "type": "unstyled", "key": "00000", "entityRanges": []}
            ]})r<   zsections-TOTAL_FORMSzsections-INITIAL_FORMSzsections-MIN_NUM_FORMSzsections-MAX_NUM_FORMSzsections-0-bodyzsections-0-ORDERzsections-0-DELETEzsections-1-bodyzsections-1-ORDERzsections-1-DELETE)assertFalser   r1   existsassertCanCreater3   
assertTruer2   liver   r   r8   r$   r$   r%   test_assert_can_createu   s\    
z+TestWagtailPageTests.test_assert_can_createc                 C   s8   | j | jtddddd tjjdd}| |j d S )NzSimple Lorem PagezLorem ipsum dolor sit amet)r<   contentF)publish)r<   )rL   r3   r   r   r1   r2   rJ   rN   )r#   Zcreated_pager$   r$   r%   /test_assert_can_create_for_page_without_publish   s    zDTestWagtailPageTests.test_assert_can_create_for_page_without_publishc                 C   s   |  tj  | | jttdtdd | tj  | | jt	tdt
ddtdfdd	d
dfgd | | jttdtdtdidtdigd d S )Nr:   z<p>Event intro</p>r;   r=   )r>   r?   r   z,<p>Dit is onze mooie text in een ferrari</p>rC   rD   rE   )nameZprice)r<   bodyrH   rT   z/<p>Rule 1: You do not talk about Fight Club</p>z/<p>Rule 2: You DO NOT talk about Fight Club</p>)r<   sections)rJ   r   r1   rK   rL   r3   r   r   rM   r   r   r   r   r8   r$   r$   r%   (test_assert_can_create_with_form_helpers   s`      z=TestWagtailPageTests.test_assert_can_create_with_form_helpersc              	   C   sF   t dddd}| jj|d | td | |ti  W 5 Q R X d S )NzSimple PagesimpleZhello)r<   ZslugrP   )instancez=Can not create a tests.businesschild under a tests.simplepage)r   r3   Z	add_childassertRaisesRegexr!   rL   r	   )r#   Zsimple_pager$   r$   r%   $test_assert_can_create_subpage_rules   s    z9TestWagtailPageTests.test_assert_can_create_subpage_rulesc              	   C   s,   |  td | | jti  W 5 Q R X d S )Nz\bslug:\n[\s\S]*\btitle:\n)rY   r!   rL   r3   r   r8   r$   r$   r%   'test_assert_can_create_validation_error  s    z<TestWagtailPageTests.test_assert_can_create_validation_errorc              	   C   sf   |  ttth |  ti  tttttth }|  t| | 	t
 |  ttth W 5 Q R X d S r7   )ZassertAllowedSubpageTypesr
   r	   r   setr   r   r   r   r    r!   r#   Zall_but_businessr$   r$   r%   !test_assert_allowed_subpage_types  s     z6TestWagtailPageTests.test_assert_allowed_subpage_typesc              	   C   sh   |  ttth |  tth tttttth }|  t| | t |  ttth W 5 Q R X d S r7   )	ZassertAllowedParentPageTypesr	   r
   r   r\   r   r   r    r!   r]   r$   r$   r%   %test_assert_allowed_parent_page_types  s"      z:TestWagtailPageTests.test_assert_allowed_parent_page_types)r+   r,   r-   r0   r9   rO   rR   rV   rZ   r[   r^   r_   __classcell__r$   r$   r5   r%   r.   a   s   =
;
r.   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestFormDataHelpersc                 C   s(   t dddid}| |ddd d S )Nbarchildfield)fooparent)re   zparent-child)r   assertEqualr#   resultr$   r$   r%   test_nested_form_data,  s     z)TestFormDataHelpers.test_nested_form_datac                 C   sN   t dtddddddfgi}| |dd	d
ddd	ddddddddd d S )NrP   )r>   Hello, world)r>   Goodbye, worldcoffeeZlatteZsoya)typeZmilkrG   r>   rk   r@   rA   rl   rB   rF   )zcontent-countzcontent-0-typezcontent-0-valuezcontent-0-orderzcontent-0-deletedzcontent-1-typezcontent-1-valuezcontent-1-orderzcontent-1-deletedzcontent-2-typezcontent-2-value-typezcontent-2-value-milkzcontent-2-orderzcontent-2-deleted)r   r   rg   rh   r$   r$   r%   test_streamfield7  s8     z$TestFormDataHelpers.test_streamfieldc                 C   sB   t dtddiddigi}| |ddddddddd	dd

 d S )Nlinesr>   ZHelloZWorldrF   r@   rI   rA   rB   )
zlines-TOTAL_FORMSzlines-INITIAL_FORMSzlines-MIN_NUM_FORMSzlines-MAX_NUM_FORMSzlines-0-textzlines-0-ORDERzlines-0-DELETEzlines-1-textzlines-1-ORDERzlines-1-DELETE)r   r   rg   rh   r$   r$   r%   test_inline_formsetX  s.     z'TestFormDataHelpers.test_inline_formsetc                 C   sH   t d}| tt|i g ddddg dg ddddg dgd	 d S )
N<h2>title</h2><p>para</p>r<   r   z
header-two00000ZinlineStyleRangesr>   depthrn   keyZentityRangesparaunstyledZ	entityMapblocksr   rM   r   jsonloadsrh   r$   r$   r%   test_default_rich_textt  s.    	z*TestFormDataHelpers.test_default_rich_textc                 C   sN   t ddgd}| tt|i g ddddg dg d	dddg dgd
 d S )Nrr   p)featuresr<   r   rx   rs   rt   rw   ry   r{   rh   r$   r$   r%   #test_rich_text_with_custom_features  s.    	z7TestFormDataHelpers.test_rich_text_with_custom_featuresc                 C   s   t ddd}| |d d S )Nrr   Zcustom)Zeditor)r   rg   rh   r$   r$   r%   &test_rich_text_with_alternative_editor  s    z:TestFormDataHelpers.test_rich_text_with_alternative_editorN)	r+   r,   r-   rj   ro   rq   r~   r   r   r$   r$   r$   r%   ra   +  s   !ra   c                   @   s   e Zd Zdd ZdS )TestDummyExternalStoragec              	   C   sD   d}t d|dd}|  | td t d| W 5 Q R X dS )z
        Test that DummyExternalStorage correctly warns about attempts
        to write files that are not rewound to the start
        sF   PNG

   IHDR         ĉ   IDATxc````    E@    IENDB`ztest.pngz	image/png)rS   rP   content_typez4Content file pointer should be at 0 - got 70 insteadN)r   readZassertRaisesMessage
ValueErrorr   save)r#   ZpngZ
simple_pngr$   r$   r%   -test_save_with_incorrect_file_object_position  s      zFTestDummyExternalStorage.test_save_with_incorrect_file_object_positionN)r+   r,   r-   r   r$   r$   r$   r%   r     s   r   )%r|   Zdjango.core.files.uploadedfiler   Zdjango.testr   Z%wagtail.admin.tests.test_contentstater   Zwagtail.modelsr   r   r   Z#wagtail.test.dummy_external_storager   Zwagtail.test.testapp.modelsr	   r
   r   r   r   r   r   r   r   r   r   Zwagtail.test.utilsr   r   Zwagtail.test.utils.form_datar   r   r   r   r   r.   ra   r   r$   r$   r$   r%   <module>   s   4B K 
