a
    Dg՚                     @   s  d dl Z d dlZd dlmZ d dlmZmZ d dlmZ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 d dlmZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z& G dd deZ'G dd deZ(G dd deZ)G dd deZ*G dd deZ+G dd de+Z,G dd de+Z-G dd de+Z.G d d! d!eZ/G d"d# d#eZ0G d$d% d%eZ1G d&d' d'eZ2G d(d) d)eZ3G d*d+ d+eZ4G d,d- d-ej5Z6G d.d/ d/eZ7dS )0    N)apps)
connectionmodels)ContextTemplateengines)TestCaseskipUnlessDBFeature)
SafeString)blocks)StreamBlockValidationErrorStreamValue)StreamField)Image)get_test_image_file)Page)RichText)#disable_reference_index_auto_update)ComplexDefaultStreamPageJSONBlockCountsStreamModelJSONMinMaxCountStreamModelJSONStreamModel
StreamPagec                   @   sH   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd ZdS )TestLazyStreamFieldc                 C   s   t jjdt d| _| jjjtd| jjddddgd| _	| jjjtdddgd| _
| jjjtdddd| jjddddgd| _d S )	N
Test imagetitlefileimagetypevaluetextfoobodybar)r   objectscreater   r   modeljsondumpspk
with_imageno_imagethree_itemsself r2   ]/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/tests/test_streamfield.pysetUp   s*    zTestLazyStreamField.setUpc                 C   s   |  d$ | jjj| jjd}W d   n1 s40    Y  |  d |j}W d   n1 sd0    Y  |  d |d j W d   n1 s0    Y  |  d6 | |d j| j	 | |d jd W d   n1 s0    Y  dS )z
        Getting a single item should lazily load the StreamField, only
        accessing the database once the StreamField is accessed
           r,   Nr   r#   )
assertNumQueriesr)   r'   getr-   r,   r%   r!   assertEqualr   r1   instancer%   r2   r2   r3   test_lazy_load7   s    2$(z"TestLazyStreamField.test_lazy_loadc                 C   sx  |  d$ | jjj| jjd}W d    n1 s40    Y  |  d |jd j W d    n1 sj0    Y  |  d: dd |jdd D }| || j	dg W d    n1 s0    Y  |  d: dd |jd	d  D }| || j	dg W d    n1 s0    Y  |  d: d
d |jddd D }| |ddg W d    n1 sj0    Y  d S )Nr5   r6   r   c                 S   s   g | ]
}|j qS r2   r!   .0blockr2   r2   r3   
<listcomp>W       z2TestLazyStreamField.test_slice.<locals>.<listcomp>   r&   c                 S   s   g | ]
}|j qS r2   r=   r>   r2   r2   r3   rA   \   rB   c                 S   s   g | ]
}|j qS r2   r=   r>   r2   r2   r3   rA   a   rB      r#   )
r7   r)   r'   r8   r/   r,   r%   r!   r9   r   )r1   r;   valuesr2   r2   r3   
test_sliceM   s    2*02zTestLazyStreamField.test_slicec                 C   s   |  d$ | jjj| jjd}W d   n1 s40    Y  |  d( |j}| |d jd W d   n1 sv0    Y  dS )zx
        Getting a single item whose StreamField never accesses the database
        should behave as expected.
        r5   r6   Nr   r#   )	r7   r)   r'   r8   r.   r,   r%   r9   r!   r:   r2   r2   r3   test_lazy_load_no_imagesd   s
    2z,TestLazyStreamField.test_lazy_load_no_imagesc                 C   s   |  d: | jjj| jj| jjgd}dd |D }W d   n1 sJ0    Y  |  d" || jj jd  W d   n1 s0    Y  |  d" || jj jd  W d   n1 s0    Y  dS )k
        Ensure that lazy loading StreamField works when gotten as part of a
        queryset list
        r5   )Zpk__inc                 S   s   i | ]}|j |qS r2   r6   )r?   r;   r2   r2   r3   
<dictcomp>|   rB   z?TestLazyStreamField.test_lazy_load_queryset.<locals>.<dictcomp>Nr   )r7   r)   r'   filterr-   r,   r.   r%   )r1   Z	instancesZinstances_lookupr2   r2   r3   test_lazy_load_querysets   s    ,0z+TestLazyStreamField.test_lazy_load_querysetc              	   C   sD  t  }tjjd|d}tjjd|d}| jjjtd|jddddd|jddddgd	}| d
" | jjj	|jd}W d   n1 s0    Y  | d
 |j
d  W d   n1 s0    Y  | dT |j
d jjdksJ |j
d
 jdu sJ |j
d jjdks J W d   n1 s60    Y  dS )rI   zTest image 1r   zTest image 3r   r   Nr"   r#   r$   r5   r6   r   rE   )r   r   r'   r(   r)   r*   r+   r,   r7   r8   r%   r!   r   )r1   Zfile_objZimage_1Zimage_3r-   r;   r2   r2   r3   test_lazy_load_queryset_bulk   s(    

0(z0TestLazyStreamField.test_lazy_load_queryset_bulkc              	   C   s   |  d$ | jjj| jjd}W d   n1 s40    Y  t B |  d |  W d   n1 sn0    Y  W d   n1 s0    Y  dS )a!  
        Saving a lazy StreamField that hasn't had its data accessed should not
        cause extra database queries by loading and then re-saving block values.
        Instead the initial JSON stream data should be written back for any
        blocks that have not been accessed.
        r5   r6   N)r7   r)   r'   r8   r-   r,   r   save)r1   r;   r2   r2   r3   test_lazy_load_get_prep_value   s
    2z1TestLazyStreamField.test_lazy_load_get_prep_valueN)__name__
__module____qualname__r   r)   r4   r<   rG   rH   rL   rM   rO   r2   r2   r2   r3   r      s   #r   c                   @   s   e Zd Zdd Zdd ZdS )TestSystemCheckc              	   C   s:   dD ](}zt j| d= W q ty*   Y q0 qt   d S )N)Zwagtailcorezwagtail.testsZinvalidstreammodel)r   Z
all_modelsKeyErrorclear_cache)r1   packager2   r2   r3   tearDown   s    zTestSystemCheck.tearDownc                 C   sl   G dd dt j}| }| t|d | |d jd | |d jd | |d j|j	d d S )Nc                   @   s(   e Zd Zede fde fgZdS )zMTestSystemCheck.test_system_check_validates_block.<locals>.InvalidStreamModelheadingz	rich textN)rP   rQ   rR   r   r   	CharBlockRichTextBlockr%   r2   r2   r2   r3   InvalidStreamModel   s
   

r[   r5   r   zwagtailcore.E001z!Block names cannot contain spacesr%   )
r   ZModelcheckr9   lenidhintobj_meta	get_field)r1   r[   errorsr2   r2   r3   !test_system_check_validates_block   s    z1TestSystemCheck.test_system_check_validates_blockN)rP   rQ   rR   rW   rd   r2   r2   r2   r3   rS      s   
rS   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestStreamValueAccessc                 C   s"   t jjtdddgd| _d S Nr"   r#   r   r$   )r   r'   r(   r*   r+   	json_bodyr0   r2   r2   r3   r4      s    zTestStreamValueAccess.setUpc                 C   sv   dt dfg| j_| j  tjj| jjdj}| |t	 | 
t|d | |d jt  | 
|d jjd d S )N	rich_text<h2>hello world</h2>r^   r5   r   )r   rg   r%   rN   r   r'   r8   r^   assertIsInstancer   r9   r]   r!   sourcer1   Zfetched_bodyr2   r2   r3   test_can_assign_as_list   s    
z-TestStreamValueAccess.test_can_assign_as_listc                 C   s   | j jd | j   tjj| j jdj}| |t	 | 
t|d | 
|d jd | 
|d jd | 
|d jd | 
|d jd d S )	Nr"   r&   rj   rE   r   r"   r#   r5   r&   )rg   r%   appendrN   r   r'   r8   r^   rk   r   r9   r]   
block_typer!   rm   r2   r2   r3   test_can_append   s    
z%TestStreamValueAccess.test_can_appendc                 C   s   t jj| jjd| _| jjd | j  t jj| jjdj}| 	|t
 | t|d | |d jd | |d jd | |d jd | |d jd	 d S )
Nr6   ro   rj   rE   r   r"   r#   r5   r&   )r   r'   r8   rg   r,   r%   rp   rN   r^   rk   r   r9   r]   rq   r!   rm   r2   r2   r3   #test_can_append_on_queried_instance   s    
z9TestStreamValueAccess.test_can_append_on_queried_instancec                 C   s  t dg d}ddddgfg|_| |jd jd | |jd jt | |jd jjd	 | |jd
 jd | |jd
 jt | t	|jd
 jd | |jd
 jd jd | |jd
 jd jd | |jd
 jd
 jd | |jd
 jd
 jd d S )N	Test pager   r%   )rh   ri   books)r   Great Expectations)authorCharles Dickensr   rh   ri   r5   rE   r   rw   rx   ry   )
r   r%   r9   rq   rk   r!   r   rl   r   r]   )r1   pager2   r2   r3   test_complex_assignment  s$    
z-TestStreamValueAccess.test_complex_assignmentN)rP   rQ   rR   r4   rn   rr   rs   r{   r2   r2   r2   r3   re      s
   re   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestComplexDefaultc                 C   s   t dd| _d S )Nrt   )r   )r   rz   r0   r2   r2   r3   r4     s    zTestComplexDefault.setUpc                 C   s   |  | jjd jd | | jjd jt |  | jjd jjd |  | jjd jd | | jjd jt |  t	| jjd jd |  | jjd jd jd |  | jjd jd jd |  | jjd jd jd	 |  | jjd jd jd
 d S )Nr   rh   z<p>My <i>lovely</i> books</p>r5   rv   rE   r   The Great Gatsbyrx   zF. Scott Fitzgerald)
r9   rz   r%   rq   rk   r!   r   rl   r   r]   r0   r2   r2   r3   test_default_value  s    z%TestComplexDefault.test_default_valuec                 C   s0   t   }|| jd}| }| d| d S )Nr;   r}   )r   get_edit_handlerget_form_classrz   as_passertInr1   Z
form_classformZ	form_htmlr2   r2   r3   (test_creation_form_with_initial_instance,  s    z;TestComplexDefault.test_creation_form_with_initial_instancec                 C   s*   t   }| }| }| d| d S )Nr}   )r   r   r   r   r   r   r2   r2   r3   +test_creation_form_without_initial_instance2  s    z>TestComplexDefault.test_creation_form_without_initial_instanceN)rP   rQ   rR   r4   r~   r   r   r2   r2   r2   r3   r|     s   r|   c                   @   s   e Zd ZeZdd ZdS )TestStreamFieldRenderingBasec              	   C   s   t jjdt d| _| jjjtddddddd| jjddd	dgd
| _	| j
d }dddd| ddg| _d S )Nr   r   rh   <p>Rich text</p>r   u!   <p>Привет, Микола</p>r   r"   Hello, World!r$   original z3<div class="block-rich_text"><p>Rich text</p></div>uD   <div class="block-rich_text"><p>Привет, Микола</p></div>z<div class="block-image">z</div>z+<div class="block-text">Hello, World!</div>)r   r'   r(   r   r   r)   r*   r+   r,   r;   Zget_renditionimg_tagjoinexpected)r1   r   r2   r2   r3   r4   <  s(    
z"TestStreamFieldRenderingBase.setUpN)rP   rQ   rR   r   r)   r4   r2   r2   r2   r3   r   9  s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestStreamFieldRenderingc                 C   s*   t | jj}| || j | |t d S N)strr;   r%   assertHTMLEqualr   rk   r
   r1   renderedr2   r2   r3   test_to_stringX  s    z'TestStreamFieldRendering.test_to_stringc                 C   s*   | j j }| || j | |t d S r   )r;   r%   Z__html__r   r   rk   r
   r   r2   r2   r3   test___html___access]  s    z-TestStreamFieldRendering.test___html___accessN)rP   rQ   rR   r   r   r2   r2   r2   r3   r   W  s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestStreamFieldDjangoRenderingc                 C   s   t |t|S r   )r   renderr   r1   stringcontextr2   r2   r3   r   d  s    z%TestStreamFieldDjangoRendering.renderc                 C   s$   |  dd| ji}| || j d S Nz{{ instance.body }}r;   r   r;   r   r   r   r2   r2   r3   test_renderg  s    z*TestStreamFieldDjangoRendering.test_renderN)rP   rQ   rR   r   r   r2   r2   r2   r3   r   c  s   r   c                       s,   e Zd Z fddZdd Zdd Z  ZS )TestStreamFieldJinjaRenderingc                    s   t    td | _d S )NZjinja2)superr4   r   enginer0   	__class__r2   r3   r4   m  s    
z#TestStreamFieldJinjaRendering.setUpc                 C   s   | j ||S r   )r   Zfrom_stringr   r   r2   r2   r3   r   q  s    z$TestStreamFieldJinjaRendering.renderc                 C   s$   |  dd| ji}| || j d S r   r   r   r2   r2   r3   r   t  s    z)TestStreamFieldJinjaRendering.test_render)rP   rQ   rR   r4   r   r   __classcell__r2   r2   r   r3   r   l  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestRequiredStreamFieldc                 C   sl  t dt fgdd}| |jj | t |jg  W d    n1 sP0    Y  G dd dtj	}t | dd}| |jj | t |jg  W d    n1 s0    Y  t |dddd}| |jj | t |jg  W d    n1 s0    Y  t |dd}| |jj | t |jg  W d    n1 s^0    Y  d S )N	paragraphFblankc                   @   s"   e Zd Ze ZG dd dZdS )zOTestRequiredStreamField.test_non_blank_field_is_required.<locals>.MyStreamBlockc                   @   s   e Zd ZdZdS )zTTestRequiredStreamField.test_non_blank_field_is_required.<locals>.MyStreamBlock.MetaFNrP   rQ   rR   requiredr2   r2   r2   r3   Meta  s   r   NrP   rQ   rR   r   rY   r   r   r2   r2   r2   r3   MyStreamBlock  s   r   r   
r   r   rY   
assertTruestream_blockr   assertRaisesr   cleanStreamBlockr1   fieldr   r2   r2   r3    test_non_blank_field_is_requiredz  s.    **,z8TestRequiredStreamField.test_non_blank_field_is_requiredc                 C   sZ  t dt fg}| |jj | t |jg  W d    n1 sL0    Y  G dd dtj	}t | }| |jj | t |jg  W d    n1 s0    Y  t |dd}| |jj | t |jg  W d    n1 s0    Y  t |}| |jj | t |jg  W d    n1 sL0    Y  d S )Nr   c                   @   s"   e Zd Ze ZG dd dZdS )zUTestRequiredStreamField.test_blank_false_is_implied_by_default.<locals>.MyStreamBlockc                   @   s   e Zd ZdZdS )zZTestRequiredStreamField.test_blank_false_is_implied_by_default.<locals>.MyStreamBlock.MetaFNr   r2   r2   r2   r3   r     s   r   Nr   r2   r2   r2   r3   r     s   r   Fr   r   r   r2   r2   r3   &test_blank_false_is_implied_by_default  s"    *
**z>TestRequiredStreamField.test_blank_false_is_implied_by_defaultc                 C   s   t dt fgdd}| |jj |jg  G dd dtj}t | dd}| |jj |jg  t |dddd}| |jj |jg  t |dd}| |jj |jg  d S )Nr   Tr   c                   @   s"   e Zd Ze ZG dd dZdS )zOTestRequiredStreamField.test_blank_field_is_not_required.<locals>.MyStreamBlockc                   @   s   e Zd ZdZdS )zTTestRequiredStreamField.test_blank_field_is_not_required.<locals>.MyStreamBlock.MetaTNr   r2   r2   r2   r3   r     s   r   Nr   r2   r2   r2   r3   r     s   r   r   )r   r   rY   ZassertFalser   r   r   r   r   r2   r2   r3    test_blank_field_is_not_required  s     z8TestRequiredStreamField.test_blank_field_is_not_requiredN)rP   rQ   rR   r   r   r   r2   r2   r2   r3   r   y  s   $r   c                   @   sL   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S )TestStreamFieldCountValidationc                 C   s@   t jjdt d| _ddd| _d| jjd| _ddd| _d S )	Nr   r   rh   r   r   r   r"   r   )	r   r'   r(   r   r   rich_text_bodyr,   
image_body	text_bodyr0   r2   r2   r3   r4     s    z$TestStreamFieldCountValidation.setUpc                 C   s@   t jjtg d}|jj}| |jj	d | |jj
d d S )Nr$   rE      )r   r'   r(   r*   r+   r%   r   r9   metamin_nummax_num)r1   r;   Zinternal_blockr2   r2   r3   test_minmax_pass_to_block  s    z8TestStreamFieldCountValidation.test_minmax_pass_to_blockc                 C   sh   t jjtg d}|jjjj}| 	|
dddi | 	|
dddi | 	|
dddd d S )	Nr$   r"   r   r5   rh   r   r   )r   r   )r   r'   r(   r*   r+   r%   r   r   block_countsr9   r8   )r1   r;   r   r2   r2   r3   test_counts_pass_to_block  s
    z8TestStreamFieldCountValidation.test_counts_pass_to_blockc                 C   s   | j g}tjjt|d}| t }|jj	
|j W d    n1 sL0    Y  | |j ddgi | j | jg}tjjt|d}| |jj	
|j d S )Nr$   messagesz The minimum number of items is 2)r   r   r'   r(   r*   r+   r   r   r%   r   r   r9   	exceptionas_json_datar   r   r1   r%   r;   catcherr2   r2   r3   test_minimum_count  s    .z1TestStreamFieldCountValidation.test_minimum_countc                 C   s   | j gd }tjjt|d}| |jj	|j | j | j
gd }tjjt|d}| t }|jj	|j W d    n1 s0    Y  | |j ddgi d S )Nr   r$   rC   r   z The maximum number of items is 5)r   r   r'   r(   r*   r+   r   r%   r   r   r   r   r   r9   r   r   r   r2   r2   r3   test_maximum_count  s    .z1TestStreamFieldCountValidation.test_maximum_countc                 C   sL  t jjtg d t jjtg d}| t }|jj	|j W d    n1 sX0    Y  |j
 d }| d| | d| | d| | t|d | jg}t jjt|d}| t }|jj	|j W d    n1 s0    Y  | |j
 ddgi | j| jg}t jjt|d}| |jj	|j d S )Nr$   r   zThis field is required.z&Text: The minimum number of items is 1z'Image: The minimum number of items is 1rC   )r   r'   r(   r*   r+   r   r   r%   r   r   r   r   r   r9   r]   r   r   r   )r1   r;   r   rc   r%   r2   r2   r3   test_block_counts_minimums  s(    ..z9TestStreamFieldCountValidation.test_block_counts_minimumsc                 C   sb  t jjtg d | j| jg}t jjt|d}| |jj	
|j | j| j| j| jg}t jjt|d}| t  |jj	
|j W d    n1 s0    Y  | j| j| jg}t jjt|d}| t }|jj	
|j W d    n1 s0    Y  | |j ddgi | j| j| jg}t jjt|d}| |jj	
|j d S )Nr$   r   z'Image: The maximum number of items is 1)r   r'   r(   r*   r+   r   r   r   r%   r   r   r   r   r   r9   r   r   r   r2   r2   r3   test_block_counts_maximums/  s.    .0z9TestStreamFieldCountValidation.test_block_counts_maximumsc                 C   s   G dd dt j}t|}| |jjjd | |jjjd | |jjjd d d t|dd	dddiid
}| |jjjd | |jjjd	 | |jjjd d d t|d d d d
}| 	|jjj | 	|jjj | 	|jjj d S )Nc                   @   s*   e Zd Ze Ze ZG dd dZdS )zbTestStreamFieldCountValidation.test_streamfield_count_argument_precedence.<locals>.TestStreamBlockc                   @   s    e Zd ZdZdZdddiiZdS )zgTestStreamFieldCountValidation.test_streamfield_count_argument_precedence.<locals>.TestStreamBlock.MetarE   r   rX   r   r5   N)rP   rQ   rR   r   r   r   r2   r2   r2   r3   r   X  s   r   N)	rP   rQ   rR   r   rY   rX   rZ   r   r   r2   r2   r2   r3   TestStreamBlockT  s   r   rE   r   rX   r   r5   rC      )r   r   r   )
r   r   r   r9   r   r   r   r   r   assertIsNone)r1   r   r   r2   r2   r3   *test_streamfield_count_argument_precedenceS  s.    

zITestStreamFieldCountValidation.test_streamfield_count_argument_precedenceN)rP   rQ   rR   r4   r   r   r   r   r   r   r   r2   r2   r2   r3   r     s   	$r   c                       sH   e Zd Ze fddZdd Zdd Zdd Zed	d
d Z	  Z
S )TestJSONStreamFieldc                    s&   t    tjjdddgd| _d S rf   )r   
setUpClassr   r'   r(   r;   )clsr   r2   r3   r   {  s    

zTestJSONStreamField.setUpClassc                 C   s&   t dt fg}| | d d S )Nr   Z	JSONField)r   r   rY   r9   Zget_internal_type)r1   r*   r2   r2   r3   test_internal_type  s    z&TestJSONStreamField.test_internal_typec                 C   s:   t jjtdddgd}| |j | jj  d S rf   	r   r'   r(   r*   r+   r9   r%   Zrender_as_blockr;   )r1   Zinstance_textr2   r2   r3   "test_json_body_equals_to_text_body  s    z6TestJSONStreamField.test_json_body_equals_to_text_bodyc                 C   s:   t jjtdddgd}| |j | jj  d S rf   r   )r1   Zinstance_preserialisedr2   r2   r3   )test_json_body_create_preserialised_value  s    
z=TestJSONStreamField.test_json_body_create_preserialised_valueZsupports_json_field_containsc                 C   sH   ddi}t jjr|g}tjj|d }| | | |j	| j
j	 d S )Nr!   r#   )Zbody__contains)r   featuresZ-json_key_contains_list_matching_requires_listr   r'   rK   firstZassertIsNotNoner9   r^   r;   )r1   r!   r;   r2   r2   r3   test_json_contains_lookup  s    
z-TestJSONStreamField.test_json_contains_lookup)rP   rQ   rR   classmethodr   r   r   r   r	   r   r   r2   r2   r   r3   r   z  s   	r   c                   @   s   e Zd Zdd Zdd ZdS )TestStreamFieldPickleSupportc                 C   s   t jjdd| _d S )NrE   rj   )r   r'   r8   	root_pager0   r2   r2   r3   r4     s    z"TestStreamFieldPickleSupport.setUpc                 C   sh   t ddgd}| jj|d t|}t|}t|}t|}| |j|j | |j|j d S )Nzstream page)r"   Zhelloru   r   )r   r   Z	add_childpickler+   loadsr9   r%   )r1   Zstream_pageZ
serializedZdeserializedZserialized2Zdeserialized2r2   r2   r3   test_pickle_support  s    



z0TestStreamFieldPickleSupport.test_pickle_supportN)rP   rQ   rR   r4   r   r2   r2   r2   r3   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestGetBlockByContentPathc                 C   sh   t ddddddddd	d
dddddddddddgdddddddddddgdgd| _d S )Nrt   123r"   Hello world)r^   r    r!   234product
Cuddly toyz$9.95)nameZprice345rv   111rx   ry   Z222r   rw   456Z
title_listitemBarnaby RudgezA Tale of Two Citiesru   )r   rz   r0   r2   r2   r3   r4     s*    


	

zTestGetBlockByContentPath.setUpc                 C   s@  | j jd}|| j jdg}| |jd | |jjd || j jdg}| |jjd || j jdg}| 	| || j jddg}| |jd	 || j jdd
g}| 	| || j jddg}| |jd || j jddg}| 	| || j jddg}| |jd || j jddg}| 	| d S )Nr%   r   r   r"   r   r   Z999r   r   Zcolourr   r   ry   r   r   )
rz   ra   rb   Zget_block_by_content_pathr%   r9   r!   r@   r   r   )r1   r   Zbound_blockr2   r2   r3   test_get_block_by_content_path  s(    


z8TestGetBlockByContentPath.test_get_block_by_content_pathN)rP   rQ   rR   r4   r   r2   r2   r2   r3   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )"TestConstructStreamFieldFromLookupc                 C   s4  t g ddg ddifdg i fdg i fddd	ggi fd
d}|j}| |tj | t|jd |jd }| |tj | 	|j
 | |jd |jd }| |tj | |jd |jd }| |tj | |jd | t|jd |jd }| |tj |jd }| |tj | |jd d S )NrX   r   )r   r5   )buttonrC   wagtail.blocks.CharBlockr   Twagtail.blocks.RichTextBlockwagtail.blocks.PageChooserBlockwagtail.blocks.StructBlockrz   rE   	link_textr   r   r5   rE   rC   block_lookuprC   rX   r   r   rE   rz   r   r   r   rk   r   r   r9   r]   Zchild_blocksrY   r   r   r   rZ   StructBlockPageChooserBlockr1   r   r   Zheading_blockZparagraph_blockZbutton_blockZ
page_blockZlink_text_blockr2   r2   r3   %test_construct_block_list_from_lookup  sB    




zHTestConstructStreamFieldFromLookup.test_construct_block_list_from_lookupc              	   C   s>  t ddg ddifdg i fdg i fddd	ggi fd
g dgi fdd}|j}| |tj | t|jd |jd }| |tj | 	|j
 | |jd |jd }| |tj | |jd |jd }| |tj | |jd | t|jd |jd }| |tj |jd }| |tj | |jd d S )N   r   r   Tr   r   r   r   r   zwagtail.blocks.StreamBlockr   )r   r5   rE   rC   r  r   rC   rX   r   r   rE   rz   r   r   r  r2   r2   r3   *test_construct_top_level_block_from_lookup#  sL    




zMTestConstructStreamFieldFromLookup.test_construct_top_level_block_from_lookupN)rP   rQ   rR   r  r  r2   r2   r2   r3   r     s   .r   c                       s   e Zd Z fddZ  ZS )BulletListBlockc                    s    t  jtjddfi | d S )NTr   )r   __init__r   rY   )r1   kwargsr   r2   r3   r  \  s    zBulletListBlock.__init__)rP   rQ   rR   r  r   r2   r2   r   r3   r  [  s   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
$TestDeconstructStreamFieldWithLookupc              
   C   s   G dd dt j}tdt jddfdt  fd| fgdd}|d	 | \}}}}| |d	 | |d
 | |g dg | |dddddifddi fddi fdddggi fdd d S )Nc                   @   s    e Zd Ze ZejddZdS )zJTestDeconstructStreamFieldWithLookup.test_deconstruct.<locals>.ButtonBlockTr   N)rP   rQ   rR   r   r   rz   rY   r   r2   r2   r2   r3   ButtonBlockb  s   r	  rX   Tr   r   r   r   r%   wagtail.fields.StreamFieldr   r   r2   r   r   r   r   r   r   r   r   r   )r   r   r   rY   rZ   set_attributes_from_namedeconstructr9   )r1   r	  r   r   pathargsr  r2   r2   r3   test_deconstructa  sB    


z5TestDeconstructStreamFieldWithLookup.test_deconstructc                 C   s   t dtjddfdttjddfgdd}|d | \}}}}| |d | |d | |dd	gg | |dd
dddifddi fdd d S )NrX   Tr   bulletsr   r%   r
  r   r  r5   r   r2   r   wagtail.blocks.ListBlock)r   r   r5   r  r   r   rY   	ListBlockr  r  r9   r1   r   r   r  r  r  r2   r2   r3   test_deconstruct_with_listblock  s2    
	zDTestDeconstructStreamFieldWithLookup.test_deconstruct_with_listblockc              	   C   s   t dtjddfdtjtjdddfgdd}|d | \}}}}| |d | |d | |d	d
gg | |dddddifddddifdd d S )NrX   Tr   r  )child_blockr   r%   r
  r   r  r   r2   r   r  r  r   r  r  r  r  r2   r2   r3   6test_deconstruct_with_listblock_with_child_block_kwarg  s6    

	z[TestDeconstructStreamFieldWithLookup.test_deconstruct_with_listblock_with_child_block_kwargc                 C   s   t dtjddfdt fgdd}|d | \}}}}| |d | |d | |dd	gg | |dd
dddifddi fdd d S )NrX   Tr   r  r   r%   r
  r   r  r   r2   r   z.wagtail.tests.test_streamfield.BulletListBlockr  r  )r   r   rY   r  r  r  r9   r  r2   r2   r3   (test_deconstruct_with_listblock_subclass  s2    
	zMTestDeconstructStreamFieldWithLookup.test_deconstruct_with_listblock_subclassN)rP   rQ   rR   r  r  r  r  r2   r2   r2   r3   r  `  s   2 #r  )8r*   r   Zdjango.appsr   Z	django.dbr   r   Zdjango.templater   r   r   Zdjango.testr   r	   Zdjango.utils.safestringr
   Zwagtailr   Zwagtail.blocksr   r   Zwagtail.fieldsr   Zwagtail.images.modelsr   Zwagtail.images.tests.utilsr   Zwagtail.modelsr   Zwagtail.rich_textr   Zwagtail.signal_handlersr   Zwagtail.test.testapp.modelsr   r   r   r   r   r   rS   re   r|   r   r   r   r   r   r   r   r   r   r   r  r  r  r2   r2   r2   r3   <module>   sB   	 G	a !'=g