o
    hV                     @   s   d dl Z 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mZ d dlmZ d dlmZ d d	lmZ d
dlmZ G dd deZG dd deeZG dd deeZdS )    N)SimpleTestCaseTestCase)reverse)translation)FieldBlockAdapter)DEFAULT_TABLE_OPTIONS
TableBlock)Page)TableBlockStreamPage)WagtailTestUtils   )
TableInputc                   @   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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 )(TestTableBlockc                 C   s$   ddddddddddddd	| _ d S )
Nr      FTtextalll   en)minSpareRows	startRows	startCols
colHeaders
rowHeaderscontextMenueditorstretchHheightlanguagerendererautoColumnSize)default_table_options)self r"   a/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/contrib/table_block/tests.pysetUp   s   zTestTableBlock.setUpc                 C   sN   ddg dg dg dgd}t  }||}d}| || | d| dS )z(
        Test a generic render.
        FTest 1Test 2Test 3NNNfirst_row_is_table_headerfirst_col_is_headerdataa   
            <table>
                <tbody>
                    <tr><td>Test 1</td><td>Test 2</td><td>Test 3</td></tr>
                    <tr><td></td><td></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                </tbody>
            </table>
        r'   Nr   renderassertHTMLEqualassertInr!   valueblockresultexpectedr"   r"   r#   test_table_block_render"   s   	

z&TestTableBlock.test_table_block_renderc                 C   sd   ddddddddddgg dg d	g d	gd
}t  }||}d}| || | d| dS )z@
        Test a generic render with some cells aligned.
        TFr   r   htLeft)rowcol	classNamehtRightr%   r)   )r+   r,   cellr-   a  
            <table>
                <thead>
                    <tr><th scope="col">Test 1</th><th scope="col" class="htLeft">Test 2</th><th scope="col">Test 3</th></tr>
                </thead>
                <tbody>
                    <tr><td></td><td class="htRight"></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                </tbody>
            </table>
        r'   Nr.   r2   r"   r"   r#   !test_table_block_alignment_render>   s   


z0TestTableBlock.test_table_block_alignment_renderc                 C   s>   t  }|ddg dg dg dgd}d}| || dS )z4
        An empty table should render okay.
        Fr)   r*   a  
            <table>
                <tbody>
                    <tr><td></td><td></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                </tbody>
            </table>
        Nr   r/   r0   )r!   r4   r5   r6   r"   r"   r#   test_render_empty_table`   s   	z&TestTableBlock.test_render_empty_tablec                 C   sB   ddg dg dg dgd}d}t  }||}| || dS )zI
        Ensure that raw html doesn't render
        by default.
        Fz<p><strong>Test</strong></p>NNr)   r*   aB  
            <table>
                <tbody>
                    <tr><td>&lt;p&gt;&lt;strong&gt;Test&lt;/strong&gt;&lt;/p&gt;</td><td></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                </tbody>
            </table>
        Nr?   r!   r3   r6   r4   r5   r"   r"   r#   "test_do_not_render_html_by_defaultw   s   


z1TestTableBlock.test_do_not_render_html_by_defaultc                 C   sX   ddg dg dg dgd}d}| j  }d|d< t|d}||}| || d	S )
zQ
        Ensure html renders if table_options set renderer to allow html
        FrA   r)   r*   a*  
            <table>
                <tbody>
                    <tr><td><p><strong>Test</strong></p></td><td></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                </tbody>
            </table>
        htmlr   table_optionsN)r    copyr   r/   r0   )r!   r3   r6   new_optionsr4   r5   r"   r"   r#    test_does_render_html_if_allowed   s   




z/TestTableBlock.test_does_render_html_if_allowedc                 C   sB   ddg dg dg dgd}d}t  }||}| || dS )z@
        Ensure that row headers are properly rendered.
        TFFooBarBazr)   r*   al  
            <table>
                <thead>
                    <tr><th scope="col">Foo</th><th scope="col">Bar</th><th scope="col">Baz</th></tr>
                </thead>
                <tbody>
                    <tr><td></td><td></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                </tbody>
            </table>
        Nr?   rB   r"   r"   r#   test_row_headers   s   
zTestTableBlock.test_row_headersc                 C   sB   ddg dg dg dgd}d}t  }||}| || dS )	zC
        Ensure that column headers are properly rendered.
        FTrJ   onetwothreefourfivesixr*   aQ  
            <table>
                <tbody>
                    <tr><th scope="row">Foo</th><td>Bar</td><td>Baz</td></tr>
                    <tr><th scope="row">one</th><td>two</td><td>three</td></tr>
                    <tr><th scope="row">four</th><td>five</td><td>six</td></tr>
                </tbody>
            </table>
        Nr?   rB   r"   r"   r#   test_column_headers      
	
z"TestTableBlock.test_column_headersc                 C   B   ddg dg dg dgd}d}t  }||}| || dS )z?
        Test row and column headers at the same time.
        TrJ   rO   rS   r*   a  
            <table>
                <thead>
                    <tr><th scope="col">Foo</th><th scope="col">Bar</th><th scope="col">Baz</th></tr>
                </thead>
                <tbody>
                    <tr><th scope="row">one</th><td>two</td><td>three</td></tr>
                    <tr><th scope="row">four</th><td>five</td><td>six</td></tr>
                </tbody>
            </table>
        Nr?   rB   r"   r"   r#   test_row_and_column_headers   s   

z*TestTableBlock.test_row_and_column_headersc                 C   rY   )z-
        Test table without headers.
        FrJ   rO   rS   r*   a-  
            <table>
                <tbody>
                    <tr><td>Foo</td><td>Bar</td><td>Baz</td></tr>
                    <tr><td>one</td><td>two</td><td>three</td></tr>
                    <tr><td>four</td><td>five</td><td>six</td></tr>
                </tbody>
            </table>
        Nr?   rB   r"   r"   r#   test_no_headers  rX   zTestTableBlock.test_no_headersc                 C   sN   ddg dg dgd}t  }d}||}| || | ||| dS )ze
        Make sure we get back good json and make
        sure it translates back to python.
        F)rK   r   N)g      @rL   rM   r*   zs{"first_row_is_table_header": false, "first_col_is_header": false, "data": [["Foo", 1, null], [3.5, "Bar", "Baz"]]}N)r   value_for_formassertJSONEqualassertEqualvalue_from_form)r!   r3   r4   expected_jsonreturned_jsonr"   r"   r#   test_value_for_and_from_form  s   
z+TestTableBlock.test_value_for_and_from_formc                 C   sF   t  }| | d | j }d|d< t |d}| | d dS )zc
        Test that settings flow through correctly to
        the is_html_renderer method.
        FrD   r   rE   TN)r   assertIsis_html_rendererr    rG   )r!   block1rH   block2r"   r"   r#   test_is_html_renderer/  s   

z$TestTableBlock.test_is_html_rendererc                 C   sB   ddg dg dg dgd}t  }||}| |g d d S )NFr%   )NrL   N)NrK   Nr*   )r&   r'   r(   rL   rK   r   get_searchable_contentr^   r!   r3   r4   contentr"   r"   r#   test_searchable_content>  s   	
z&TestTableBlock.test_searchable_contentc                 C   s$   d }t  }||}| |g  d S Nrh   rj   r"   r"   r#   &test_searchable_content_for_null_blockU  s   
z5TestTableBlock.test_searchable_content_for_null_blockc                 C   sV   t dd}ddg dg dg dgd}|j|ddid	}| d
| | d| dS )zv
        Test that extra context variables passed in block.render are passed through
        to the template.
        z*tests/blocks/table_block_with_caption.html)templateFr%   r)   r*   captionzA fascinating table.)contextr&   z<div>A fascinating table.</div>N)r   r/   r1   )r!   r4   r3   r5   r"   r"   r#   test_render_with_extra_context[  s   
	z-TestTableBlock.test_render_with_extra_contextc                 C   sP   dddg dg dg dgd}t  }||}d}| || | d| dS )	z5
        Test a generic render with caption.
        rp   Fr%   r)   )table_captionr+   r,   r-   aK  
            <table>
                <caption>caption</caption>
                <tbody>
                    <tr><td>Test 1</td><td>Test 2</td><td>Test 3</td></tr>
                    <tr><td></td><td></td><td></td></tr>
                    <tr><td></td><td></td><td></td></tr>
                </tbody>
            </table>
        r'   Nr.   r2   r"   r"   r#   test_table_block_caption_rendero  s   


z.TestTableBlock.test_table_block_caption_renderc                 C   s4   d}t  }||}d}| || | d| dS )z6
        Test an empty table is not rendered.
        N None)r   r/   r0   assertNotInr2   r"   r"   r#   &test_empty_table_block_is_not_rendered  s   
z5TestTableBlock.test_empty_table_block_is_not_renderedc              
   C   sr   ddg dg dg dgddddd	d	ddgdddd	d
dd	d	dd
gd}t  }||}d}| || dS )z<
        Test that merged table cells are rendered.
        F)rP   NrQ   )rR   rT   rU   )rV   sevenNr   r   T)r9   r:   hidden   )r9   r:   rowspancolspan)r+   r,   r-   r=   
mergeCellsaG  
            <table>
                <tbody>
                    <tr><td rowspan="1" colspan="2">one</td><td>two</td></tr>
                    <tr><td>three</td><td>four</td><td rowspan="2" colspan="1">five</td></tr>
                    <tr><td>six</td><td>seven</td></tr>
                </tbody>
            </table>
        Nr?   r2   r"   r"   r#   test_merge_cells_render  s"   


	z&TestTableBlock.test_merge_cells_renderc                 C   s   t  }| |d  d S rm   )r   assertIsNone	to_pythonr!   r4   r"   r"   r#    test_empty_table_block_to_python  s   z/TestTableBlock.test_empty_table_block_to_pythonN)__name__
__module____qualname__r$   r7   r>   r@   rC   rI   rN   rW   rZ   r[   rb   rg   rl   rn   rr   rt   rx   r   r   r"   r"   r"   r#   r      s(    ""r   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 )TestTableBlockFormc                 C   sL   ddg dg dg dg dg dgd| _ t }t | _|| jd< d S )	NTShipTypeStatus	Galactica
BattlestarActiveValkyrier   	DestroyedzCylon BasestarBasestarr   BrenikzSmall Military Vesselr   r*   r   )r3   r   get_languager   rG   r    )r!   r   r"   r"   r#   r$     s   
zTestTableBlockForm.setUpc                 C   s   t  }| |j|  | | j|j | td |jd  | td |jd  | td |jd  | td |jd  | td |jd  dS )zI
        Test options without any custom table_options provided.
        r   r   r   r   r   N)r   r^   rF   get_table_optionsr    r   r   r"   r"   r#   test_default_table_options  s    z-TestTableBlockForm.test_default_table_optionsc                 C   s   t  }| d|j td t  }| d|jd  td t  }| d|jd  t ddid}| d|jd  | d|jd  td dS )zW
        Test that the environment's language is used if no language provided.
        r   zfr-fritjarE   r   N)r   r1   rF   r   activater^   assertNotEqual)r!   r4   block_frblock_itblock_with_langr"   r"   r#   test_table_options_language  s   

z.TestTableBlockForm.test_table_options_languagec                 C   s   t td }t j}| |d | tddidj}| |d | tddidj}| |d d tdddgidj}| |d ddg tdg idj}| |d g  dS )z9
        Test how contextMenu is set to default.
        r   TrE   FundoredoN)listr   r   rF   r^   rc   )r!   default_context_menurF   table_options_menu_truetable_options_menu_falsetable_options_menu_listr"   r"   r#   test_table_options_context_menu  s6   
z2TestTableBlockForm.test_table_options_context_menuc                 C   sv   t ddddj}| |d d | |d d t ddidj}| |d d t d	d
idj}| |d	 d
 dS )zE
        Test simple options overrides get passed correctly.
           r{   )r   r   rE   r   r   r   none
allowEmptyFN)r   rF   r^   rc   )r!   block_1_optsblock_2_optsblock_3_optsr"   r"   r#   test_table_options_others  s   z,TestTableBlockForm.test_table_options_othersc                 C   sp   t dd}|d t |}| |d d | |d t | |d dddd	|j|jd
dddid	 d S )NzA table to display data.)descriptiontest_tableblockr   r   r{   zTest tableblockTtablez0w-field w-field--char_field w-field--table_inputADD_COMMENTzAdd Comment)	labelr   requiredicon
blockDefIdisPreviewable	classnameshowAddCommentButtonstrings)	r   set_namer   js_argsr^   assertIsInstancer   definition_prefixis_previewable)r!   r4   r   r"   r"   r#   
test_adapt0  s$   

zTestTableBlockForm.test_adaptc                 C   s0   t  }|j| jd}| d| | d| dS )z?
        Test searchable content is created correctly.
        )r3   r   r   N)r   ri   r3   r1   )r!   r4   search_contentr"   r"   r#   rl   G  s   z*TestTableBlockForm.test_searchable_contentN)
r   r   r   r$   r   r   r   r   r   rl   r"   r"   r"   r#   r     s    r   c                   @   s"   e Zd Zdd Zejdd ZdS )TestTableBlockPageEditc                 C   sv   ddg dg dg dg dg dgd| _ tjjdd	| _td
td| j dgd}| jj|d| _	| 
 | _d S )NTr   r   r   r   r   r*   r{   )idShipsr   )typer3   )titler   )instance)r3   r	   objectsget	root_pager
   jsondumps	add_childtable_block_pageloginuser)r!   table_block_page_instancer"   r"   r#   r$   S  s"   zTestTableBlockPageEdit.setUpc                 C   sf   | j td| jjfd}| |d | |d | |d | |d | |d | |d d	S )
z\
        Test that edit page loads with saved table data and correct init function.
        zwagtailadmin_pages:edit)argszW<div data-contentpath="table" class="w-field w-field--char_field w-field--table_input">r   r   z#initTable("table\u002D0\u002Dvalue"r   r   N)clientr   r   r   r   assertContains)r!   responser"   r"   r#   test_page_edit_page_viewh  s   z/TestTableBlockPageEdit.test_page_edit_page_viewN)r   r   r   r$   unittestexpectedFailurer   r"   r"   r"   r#   r   R  s    r   )r   r   django.testr   r   django.urlsr   django.utilsr   wagtail.blocks.field_blockr   "wagtail.contrib.table_block.blocksr   r   wagtail.modelsr	   wagtail.test.testapp.modelsr
   wagtail.test.utilsr   blocksr   r   r   r   r"   r"   r"   r#   <module>   s$       3 