o
    h՚                     @   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/html/ndineBlogger/venv/lib/python3.10/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 sw   Y  |  d |j}W d   n1 s2w   Y  |  d |d j W d   n1 sLw   Y  |  d | |d j| j	 | |d jd W d   dS 1 suw   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   "z"TestLazyStreamField.test_lazy_loadc                 C   sv  |  d | jjj| jjd}W d    n1 sw   Y  |  d |jd j W d    n1 s5w   Y  |  d dd |jdd D }| || j	dg W d    n1 s_w   Y  |  d dd |jd	d  D }| || j	dg W d    n1 sw   Y  |  d d
d |jddd D }| |ddg W d    d S 1 sw   Y  d S )Nr5   r6   r   c                 S      g | ]}|j qS r2   r!   .0blockr2   r2   r3   
<listcomp>W       z2TestLazyStreamField.test_slice.<locals>.<listcomp>   r&   c                 S   r=   r2   r>   r?   r2   r2   r3   rB   \   rC   c                 S   r=   r2   r>   r?   r2   r2   r3   rB   a   rC      r#   )
r7   r)   r'   r8   r/   r,   r%   r!   r9   r   )r1   r;   valuesr2   r2   r3   
test_sliceM   s$   "zTestLazyStreamField.test_slicec                 C   s   |  d | jjj| jjd}W d   n1 sw   Y  |  d |j}| |d jd W d   dS 1 s<w   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   "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 s%w   Y  |  d || jj jd  W d   n1 sCw   Y  |  d || jj jd  W d   dS 1 sbw   Y  dS )k
        Ensure that lazy loading StreamField works when gotten as part of a
        queryset list
        r5   )pk__inc                 S   s   i | ]}|j |qS r2   r6   )r@   r;   r2   r2   r3   
<dictcomp>|   s    z?TestLazyStreamField.test_lazy_load_queryset.<locals>.<dictcomp>Nr   )r7   r)   r'   filterr-   r,   r.   r%   )r1   	instancesinstances_lookupr2   r2   r3   test_lazy_load_querysets   s   "z+TestLazyStreamField.test_lazy_load_querysetc              	   C   s@  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 sIw   Y  | d
 |j
d  W d   n1 scw   Y  | d) |j
d jjdksyJ |j
d
 jdu sJ |j
d jjdksJ W d   dS 1 sw   Y  dS )rJ   zTest image 1r   zTest image 3r   r   Nr"   r#   r$   r5   r6   r   rF   )r   r   r'   r(   r)   r*   r+   r,   r7   r8   r%   r!   r   )r1   file_objimage_1image_3r-   r;   r2   r2   r3   test_lazy_load_queryset_bulk   s.   

"z0TestLazyStreamField.test_lazy_load_queryset_bulkc              	   C   s   |  d | jjj| jjd}W d   n1 sw   Y  t * |  d |  W d   n1 s7w   Y  W d   dS W d   dS 1 sOw   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   
"z1TestLazyStreamField.test_lazy_load_get_prep_valueN)__name__
__module____qualname__r   r)   r4   r<   rH   rI   rP   rT   rV   r2   r2   r2   r3   r      s    #r   c                   @      e Zd Zdd Zdd ZdS )TestSystemCheckc              	   C   s8   dD ]}zt j| d= W q ty   Y qw t   d S )N)wagtailcorezwagtail.testsinvalidstreammodel)r   
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)rW   rX   rY   r   r   	CharBlockRichTextBlockr%   r2   r2   r2   r3   InvalidStreamModel   s    

rf   r5   r   zwagtailcore.E001z!Block names cannot contain spacesr%   )
r   Modelcheckr9   lenidhintobj_meta	get_field)r1   rf   errorsr2   r2   r3   !test_system_check_validates_block   s   z1TestSystemCheck.test_system_check_validates_blockN)rW   rX   rY   rb   rp   r2   r2   r2   r3   r[      s    
r[   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>rj   r5   r   )r   rs   r%   rU   r   r'   r8   rj   assertIsInstancer   r9   ri   r!   sourcer1   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&   rv   rF   r   r"   r#   r5   r&   )rs   r%   appendrU   r   r'   r8   rj   rw   r   r9   ri   
block_typer!   ry   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   r|   rv   rF   r   r"   r#   r5   r&   )r   r'   r8   rs   r,   r%   r}   rU   rj   rw   r   r9   ri   r~   r!   ry   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%   )rt   ru   books)r   Great Expectations)authorCharles Dickensr   rt   ru   r5   rF   r   r   r   r   )
r   r%   r9   r~   rw   r!   r   rx   r   ri   )r1   pager2   r2   r3   test_complex_assignment  s$   
z-TestStreamValueAccess.test_complex_assignmentN)rW   rX   rY   r4   r{   r   r   r   r2   r2   r2   r3   rq      s    rq   c                   @   ,   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 )Nr   )r   )r   r   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   rt   z<p>My <i>lovely</i> books</p>r5   r   rF   r   The Great Gatsbyr   zF. Scott Fitzgerald)
r9   r   r%   r~   rw   r!   r   rx   r   ri   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_classr   as_passertInr1   
form_classform	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)rW   rX   rY   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   rt   <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;   get_renditionimg_tagjoinexpected)r1   r   r2   r2   r3   r4   <  s(   

z"TestStreamFieldRenderingBase.setUpN)rW   rX   rY   r   r)   r4   r2   r2   r2   r3   r   9  s    r   c                   @   rZ   )TestStreamFieldRenderingc                 C   s*   t | jj}| || j | |t d S N)strr;   r%   assertHTMLEqualr   rw   r
   r1   renderedr2   r2   r3   test_to_stringX     z'TestStreamFieldRendering.test_to_stringc                 C   s*   | j j }| || j | |t d S r   )r;   r%   __html__r   r   rw   r
   r   r2   r2   r3   test___html___access]  r   z-TestStreamFieldRendering.test___html___accessN)rW   rX   rY   r   r   r2   r2   r2   r3   r   W  s    r   c                   @   rZ   )TestStreamFieldDjangoRenderingc                 C   s   t |t|S r   )r   renderr   r1   stringcontextr2   r2   r3   r   d     z%TestStreamFieldDjangoRendering.renderc                 C   $   |  dd| ji}| || j d S Nz{{ instance.body }}r;   r   r;   r   r   r   r2   r2   r3   test_renderg     z*TestStreamFieldDjangoRendering.test_renderN)rW   rX   rY   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 )Njinja2)superr4   r   enginer0   	__class__r2   r3   r4   m  s   
z#TestStreamFieldJinjaRendering.setUpc                 C   s   | j ||S r   )r   from_stringr   r   r2   r2   r3   r   q  r   z$TestStreamFieldJinjaRendering.renderc                 C   r   r   r   r   r2   r2   r3   r   t  r   z)TestStreamFieldJinjaRendering.test_render)rW   rX   rY   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   sj  t dt fgdd}| |jj | t |jg  W d    n1 s(w   Y  G dd dtj	}t | dd}| |jj | t |jg  W d    n1 sZw   Y  t |dddd}| |jj | t |jg  W d    n1 sw   Y  t |dd}| |jj | t |jg  W d    d S 1 sw   Y  d S )N	paragraphFblankc                   @   "   e Zd Ze ZG dd dZdS )zOTestRequiredStreamField.test_non_blank_field_is_required.<locals>.MyStreamBlockc                   @      e Zd ZdZdS )zTTestRequiredStreamField.test_non_blank_field_is_required.<locals>.MyStreamBlock.MetaFNrW   rX   rY   requiredr2   r2   r2   r3   Meta      r   NrW   rX   rY   r   rd   r   r   r2   r2   r2   r3   MyStreamBlock      r   r   
r   r   rd   
assertTruestream_blockr   assertRaisesr   cleanStreamBlockr1   fieldr   r2   r2   r3    test_non_blank_field_is_requiredz  s6   "z8TestRequiredStreamField.test_non_blank_field_is_requiredc                 C   sZ  t dt fg}| |jj | t |jg  W d    n1 s&w   Y  G dd dtj	}t | }| |jj | t |jg  W d    n1 sVw   Y  t |dd}| |jj | t |jg  W d    n1 sw   Y  t |}| |jj | t |jg  W d    d S 1 sw   Y  d S )Nr   c                   @   r   )zUTestRequiredStreamField.test_blank_false_is_implied_by_default.<locals>.MyStreamBlockc                   @   r   )zZTestRequiredStreamField.test_blank_false_is_implied_by_default.<locals>.MyStreamBlock.MetaFNr   r2   r2   r2   r3   r     r   r   Nr   r2   r2   r2   r3   r     r   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                   @   r   )zOTestRequiredStreamField.test_blank_field_is_not_required.<locals>.MyStreamBlockc                   @   r   )zTTestRequiredStreamField.test_blank_field_is_not_required.<locals>.MyStreamBlock.MetaTNr   r2   r2   r2   r3   r     r   r   Nr   r2   r2   r2   r3   r     r   r   r   )r   r   rd   assertFalser   r   r   r   r   r2   r2   r3    test_blank_field_is_not_required  s    z8TestRequiredStreamField.test_blank_field_is_not_requiredN)rW   rX   rY   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   rt   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$   rF      )r   r'   r(   r*   r+   r%   r   r9   metamin_nummax_num)r1   r;   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   rt   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 s&w   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 sEw   Y  | |j ddgi d S )Nr   r$   rD   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 s,w   Y  |j
 d }| d| | d| | d| | t|d | jg}t jjt|d}| t}|jj	|j W d    n1 sxw   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 1rD   )r   r'   r(   r*   r+   r   r   r%   r   r   r   r   r   r9   ri   r   r   r   )r1   r;   r   ro   r%   r2   r2   r3   test_block_counts_minimums  s,   z9TestStreamFieldCountValidation.test_block_counts_minimumsc                 C   s`  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 sQw   Y  | j| j| jg}t jjt|d}| t}|jj	
|j W d    n1 sw   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/  s2   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.MetarF   r   rc   r   r5   N)rW   rX   rY   r   r   r   r2   r2   r2   r3   r   X  s    r   N)	rW   rX   rY   r   rd   rc   re   r   r   r2   r2   r2   r3   TestStreamBlockT  s    r   rF   r   rc   r   r5   rD      )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)rW   rX   rY   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 rr   )r   
setUpClassr   r'   r(   r;   )clsr   r2   r3   r   {  s   

zTestJSONStreamField.setUpClassc                 C   s&   t dt fg}| | d d S )Nr   	JSONField)r   r   rd   r9   get_internal_type)r1   r*   r2   r2   r3   test_internal_type  s   z&TestJSONStreamField.test_internal_typec                 C   :   t jjtdddgd}| |j | jj  d S rr   	r   r'   r(   r*   r+   r9   r%   render_as_blockr;   )r1   instance_textr2   r2   r3   "test_json_body_equals_to_text_body  s   z6TestJSONStreamField.test_json_body_equals_to_text_bodyc                 C   r   rr   r   )r1   instance_preserialisedr2   r2   r3   )test_json_body_create_preserialised_value  s   
z=TestJSONStreamField.test_json_body_create_preserialised_value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#   )body__contains)r   features-json_key_contains_list_matching_requires_listr   r'   rM   firstassertIsNotNoner9   rj   r;   )r1   r!   r;   r2   r2   r3   test_json_contains_lookup  s   
z-TestJSONStreamField.test_json_contains_lookup)rW   rX   rY   classmethodr   r   r   r   r	   r  r   r2   r2   r   r3   r   z  s    	r   c                   @   rZ   )TestStreamFieldPickleSupportc                 C   s   t jjdd| _d S )NrF   rv   )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"   hellor   r   )r   r  	add_childpickler+   loadsr9   r%   )r1   stream_page
serializeddeserializedserialized2deserialized2r2   r2   r3   test_pickle_support  s   



z0TestStreamFieldPickleSupport.test_pickle_supportN)rW   rX   rY   r4   r  r2   r2   r2   r3   r    s    r  c                   @   rZ   )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 )Nr   123r"   Hello world)rj   r    r!   234product
Cuddly toyz$9.95)nameprice345r   111r   r   222r   r   456
title_listitemBarnaby RudgezA Tale of Two Citiesr   )r   r   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  999r  r  colourr  r  r   r  r   )
r   rm   rn   get_block_by_content_pathr%   r9   r!   rA   r  r   )r1   r   bound_blockr2   r2   r3   test_get_block_by_content_path  s(   


z8TestGetBlockByContentPath.test_get_block_by_content_pathN)rW   rX   rY   r4   r%  r2   r2   r2   r3   r    s    r  c                   @   rZ   )"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rc   r   )r   r5   )buttonrD   wagtail.blocks.CharBlockr   Twagtail.blocks.RichTextBlockwagtail.blocks.PageChooserBlockwagtail.blocks.StructBlockr   rF   	link_textr   r   r5   rF   rD   block_lookuprD   rc   r   r)  rF   r   r0  r   r   rw   r   r   r9   ri   child_blocksrd   r   r   r  re   StructBlockPageChooserBlockr1   r   r   heading_blockparagraph_blockbutton_block
page_block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   rF   rD   r?  r2  rD   rc   r   r)  rF   r   r0  r4  r8  r2   r2   r3   *test_construct_top_level_block_from_lookup#  sL   




zMTestConstructStreamFieldFromLookup.test_construct_top_level_block_from_lookupN)rW   rX   rY   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   rd   )r1   kwargsr   r2   r3   rB  \  s    zBulletListBlock.__init__)rW   rX   rY   rB  r   r2   r2   r   r3   rA  [  s    rA  c                   @   r   )
$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)rW   rX   rY   r   r7  r   rd   r0  r2   r2   r2   r3   ButtonBlockb  s    rE  rc   Tr   r   r)  r   r%   wagtail.fields.StreamFieldr'  r*  r2   r   r+  r,  r-  r.  r/  r1  r   r3  )r   r6  r   rd   re   set_attributes_from_namedeconstructr9   )r1   rE  r   r  pathargsrC  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 )Nrc   Tr   bulletsr   r%   rF  r(  rM  r5   r*  r2   r   wagtail.blocks.ListBlock)r   r   r5   rG  r   r   rd   	ListBlockrH  rI  r9   r1   r   r  rJ  rK  rC  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 )Nrc   Tr   rM  )child_blockr   r%   rF  r(  rN  r*  r2   r   rO  rU  r   rP  rG  rQ  rS  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 )Nrc   Tr   rM  r   r%   rF  r(  rN  r*  r2   r   z.wagtail.tests.test_streamfield.BulletListBlockrP  rG  )r   r   rd   rA  rH  rI  r9   rS  r2   r2   r3   (test_deconstruct_with_listblock_subclass  s2   
	zMTestDeconstructStreamFieldWithLookup.test_deconstruct_with_listblock_subclassN)rW   rX   rY   rL  rT  rV  rW  r2   r2   r2   r3   rD  `  s
    2 #rD  )8r*   r
  django.appsr   	django.dbr   r   django.templater   r   r   django.testr   r	   django.utils.safestringr
   wagtailr   wagtail.blocksr   r   wagtail.fieldsr   wagtail.images.modelsr   wagtail.images.tests.utilsr   wagtail.modelsr   wagtail.rich_textr   wagtail.signal_handlersr   wagtail.test.testapp.modelsr   r   r   r   r   r   r[   rq   r   r   r   r   r   r   r   r   r  r  r&  rR  rA  rD  r2   r2   r2   r3   <module>   sD    	 G	a !'=g