a
    Dg5H                     @   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 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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dS )    N)apps)TestCase)
SafeString)compare)StreamValue)StructBlockValidationError)
ImageBlockImageChooserBlock)	JSContext)
StreamPage)WagtailTestUtils   )Imageget_test_bad_imageget_test_image_fileget_test_image_filenamec                   @   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 )TestImageChooserBlockc                 C   s*   t jjdt d| _t | _| j  d S )N
Test imagetitlefile)r   objectscreater   imager   	bad_imagesaveself r   _/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/images/tests/test_blocks.pysetUp   s    zTestImageChooserBlock.setUpc                 C   s4   t  }|| j}dt| jd}| || d S )Nz8<img alt="Test image" src="{}" width="640" height="480">original)r	   renderr   formatr   assertHTMLEqualr   blockhtmlZexpected_htmlr   r   r   test_render!   s    
z!TestImageChooserBlock.test_renderc                 C   sb   t  }tjjjtdddddd || j}W d    n1 sH0    Y  | 	|d d S )NZwagtailimagesZdefault_attrsasyncZlazy)ZdecodingZloading)newze<img alt="missing image" src="/media/not-found" width="0" height="0" decoding="async" loading="lazy">)
r	   unittestZmockpatchobjectr   Zget_app_configr"   r   r$   )r   r&   r'   r   r   r   %test_render_with_custom_default_attrs,   s    *z;TestImageChooserBlock.test_render_with_custom_default_attrsc                 C   s&   t  }|| j}d}| || d S )NzE<img alt="missing image" src="/media/not-found" width="0" height="0">)r	   r"   r   r$   r%   r   r   r   test_render_missing9   s
    z)TestImageChooserBlock.test_render_missingc                 C   sD   t dd}| \}}}| |d | |d | |ddi d S )NFrequiredz'wagtail.images.blocks.ImageChooserBlockr   r1   )r	   ZdeconstructassertEqual)r   r&   pathargskwargsr   r   r   test_deconstructB   s
    
z&TestImageChooserBlock.test_deconstructc                 C   sJ   t  }| t|| jtt| jjddfg | t|d g  d S )N )r	   ZassertListEquallistZextract_referencesr   r   strid)r   r&   r   r   r   test_extract_referencesI   s    z-TestImageChooserBlock.test_extract_referencesN)	__name__
__module____qualname__r    r(   r.   r/   r6   r;   r   r   r   r   r      s   		r   c                   @   s*   e Zd ZejZdd Zdd Zdd ZdS )TestImageChooserBlockComparisonc                 C   s:   t jjdt d| _t jjdt d| _tjd| _	d S NzTest image 1r   zTest image 2body
r   r   r   r   image_1image_2r   _meta	get_fieldfieldr   r   r   r   r    X   s    z%TestImageChooserBlockComparison.setUpc              
   C   s   t jd}| |t t|jd| jdfgdt t|jd| jdfgd}| |j | 	|j
 | | d | }| |t | d| | d| | d| | d	| | 	|  d S )
NrA   r   1rA   Body class="comparison__child-object"class="preview-image"deletionaddition)r   rE   rF   comparison_classr   stream_blockrC   
assertTrueis_fieldassertFalseis_child_relationr2   field_labelhtmldiffassertIsInstancer   assertInassertNotInhas_changedr   rG   
comparisonrV   r   r   r   test_hasnt_changede   s8    

z2TestImageChooserBlockComparison.test_hasnt_changedc              
   C   s   t jd}| |t t|jd| jdfgdt t|jd| jdfgd}| |j	 | 
|j | | d | }| |t | d| | d| | d| | |  d S )	NrA   r   rH   rI   rJ   rK   class="preview-image deletion"class="preview-image addition")r   rE   rF   rO   r   rP   rC   rD   rQ   rR   rS   rT   r2   rU   rV   rW   r   rX   rZ   r[   r   r   r   test_has_changed   s6    

z0TestImageChooserBlockComparison.test_has_changedN)	r<   r=   r>   r   StreamFieldComparisonrO   r    r]   r`   r   r   r   r   r?   U   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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 )$TestImageBlockc                 C   sd   t  }| jjddd}|||}t|}|d}| |d |	d | 
d|d  d S 	NSample alt textFr   alt_text
decorativeimgaltrf   /media/images/testsrc)r   r   r:   r"   	to_pythonr   get_soupfindr2   getrX   r   r&   valuer'   ZsoupZimg_tagr   r   r   r(      s    

zTestImageBlock.test_renderc                 C   sd   t  }| jjddd}|||}t|}|d}| |d |	d | 
d|d  d S rc   )r   r   r:   Zrender_basicrl   r   rm   rn   r2   ro   rX   rp   r   r   r   test_render_basic   s    

z TestImageBlock.test_render_basicc                 C   s^   t  }| jjddd}|||}t|}|d}| |d d | 	d|d  d S )	Nrd   Tre   rh   ri   r7   rj   rk   )
r   r   r:   r"   rl   r   rm   rn   r2   rX   rp   r   r   r   test_render_as_decorative   s    

z(TestImageBlock.test_render_as_decorativec                 C   sl   t  }| jjd dd}| t }||| W d    n1 sF0    Y  | dt|j	j
d  d S )NFre   z@Please add some alt text for your image or mark it as decorativerf   )r   r   r:   assertRaisesr   cleanrl   rX   r9   	exceptionblock_errors)r   r&   rq   contextr   r   r   test_no_alt_text   s    .zTestImageBlock.test_no_alt_textc                 C   sD   t  }|| jj}| |j| jj | |jd | |j d S )Nr   )r   rl   r   r:   r2   contextual_alt_textrS   rg   r   r&   rq   r   r   r   test_to_python_with_int   s
    z&TestImageBlock.test_to_python_with_intc                 C   sP   t  }| jjddd}||}| |j| jj | |jd | |j d S )NzSample textFre   )r   r   r:   rl   r2   rz   rS   rg   r   r&   rq   resultr   r   r   test_to_python_with_dict   s    
z'TestImageBlock.test_to_python_with_dictc                 C   s"   t dd}|d }| | d S NFr0   )r   rl   assertIsNoner{   r   r   r   test_to_python_with_none   s    

z'TestImageBlock.test_to_python_with_nonec                 C   s$   t dd}|g }| |g  d S r   r   bulk_to_pythonr2   r   r&   r~   r   r   r   #test_bulk_to_python_with_empty_list  s    

z2TestImageBlock.test_bulk_to_python_with_empty_listc                 C   s(   t dd}|d g}| |d g d S r   r   r   r   r   r   %test_bulk_to_python_with_list_of_none  s    
z4TestImageBlock.test_bulk_to_python_with_list_of_nonec                 C   sF   t dd}|| jj}|d | jj| jjg}| |d ||g d S r   )r   rl   r   r:   r   r2   )r   r&   Zsingle_imager~   r   r   r   %test_bulk_to_python_with_list_of_ints  s    
z4TestImageBlock.test_bulk_to_python_with_list_of_intsc                 C   s   t dd}|d d d d| jjddd| jjdddg}| t|d | |d  | |d j| jj | |d jd | |d	 j| jj | |d	 jd d S )
NFr0   re   Custom alt textzDifferent alt text   r   r      )r   r   r   r:   r2   lenr   rz   r   r   r   r   &test_bulk_to_python_with_list_of_dicts  s&    

z5TestImageBlock.test_bulk_to_python_with_list_of_dictsc                 C   s>   t  }d| j_d| j_|| j}| || jjddd d S )Nr   Fre   )r   r   rz   rg   get_prep_valuer2   r:   r{   r   r   r   test_get_prep_value,  s    z"TestImageBlock.test_get_prep_valuec                 C   s,   t dd}|d }| |d d d d d S )NFr0   re   )r   r   r2   r{   r   r   r   "test_get_prep_value_for_null_value<  s    


z1TestImageBlock.test_get_prep_value_for_null_valuec                 C   s8   t  }| jjddd}|||}| |dg d S )Nrd   Fre   )r   r   r:   Zget_searchable_contentrl   r2   r}   r   r   r   test_get_searchable_contentE  s    z*TestImageBlock.test_get_searchable_contentc                 C   s   t  }t |}|d d d }| |d d d  |d ddd}| t}|| W d    n1 st0    Y  | d	t	|j
jd
  d S )N_argsr   r   r   r1   r7   Fre   zThis field is requiredr   )r   r
   packrQ   rl   rt   r   ru   rX   r9   rv   rw   )r   r&   image_block_defimage_chooser_block_defrq   rx   r   r   r   test_required_trueQ  s     (z!TestImageBlock.test_required_truec                 C   sb   t dd}t |}|d d d }| |d d d  |d ddd	}| || d S )
NFr0   r   r   r   r   r1   r7   re   )r   r
   r   rS   rl   r   ru   )r   r&   r   r   rq   r   r   r   test_required_falseh  s    
z"TestImageBlock.test_required_falsec              	   C   s   t jd}t |jdd| jjddddgd}||jdg}| 	|j
jd | |jt | 	|jj| jj ||jdd	g}| 	|j
jd	 | 	|jd ||jdd
g}| | d S )NrA   Z123image_with_altrd   Fre   )r:   typerq   rI   rf   Zdoes_not_exist)r   rE   rF   rP   rl   r   r:   Zget_block_by_content_pathrA   r2   r&   namerW   rq   r   r   )r   rG   pageZbound_blockr   r   r   test_get_block_by_content_pathy  s0    
z-TestImageBlock.test_get_block_by_content_pathN)r<   r=   r>   r(   rr   rs   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rb      s"   		rb   c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
TestImageBlockComparisonc                 C   s:   t jjdt d| _t jjdt d| _tjd| _	d S r@   rB   r   r   r   r   r      s    zTestImageBlockComparison.setUpc                 C   s   t jd}t  }d| jjdddddg|_t  }d| jjdddddg|_| |||}| |j | 	|j
 | | d | }| |t | d	| | d
| | d| | d| | 	|  d S )NrA   r   FSome alt textr   rg   rf   rH   r   rq   r:   rJ   rK   rL   rM   rN   )r   rE   rF   rC   r:   rA   rO   rQ   rR   rS   rT   r2   rU   rV   rW   r   rX   rY   rZ   r   rG   Zpage_1Zpage_2r\   rV   r   r   r   r]     s<    z+TestImageBlockComparison.test_hasnt_changedc                 C   s   t jd}t  }d| jjdddddg|_t  }d| jjdddddg|_| |||}| |j	 | 
|j | | d | }| |t | d	| | d
| | d| | |  d S )NrA   r   Fr   r   rH   r   rJ   rK   r^   r_   )r   rE   rF   rC   r:   rA   rD   rO   rQ   rR   rS   rT   r2   rU   rV   rW   r   rX   rZ   r   r   r   r   r`     s:    z)TestImageBlockComparison.test_has_changedc                 C   s   t jd}t  }d| jjdddddg|_t  }d| jjdddddg|_| |||}| |j | 	|j
 | | d	 | }| |t | d
| | d| | |  d S )NrA   r   Fza cat playing with some stringr   rH   r   z!a kitten playing with some stringrJ   rK   zi<dd>a <span class="deletion">cat</span><span class="addition">kitten</span> playing with some string</dd>)r   rE   rF   rC   r:   rA   rO   rQ   rR   rS   rT   r2   rU   rV   rW   r   rX   rZ   r   r   r   r   test_alt_text_has_changed  s>    z2TestImageBlockComparison.test_alt_text_has_changedN)
r<   r=   r>   r   ra   rO   r    r]   r`   r   r   r   r   r   r     s
   )(r   ) Zunittest.mockr+   Zdjango.appsr   Zdjango.testr   Zdjango.utils.safestringr   Zwagtail.adminr   Zwagtail.blocks.stream_blockr   Zwagtail.blocks.struct_blockr   Zwagtail.images.blocksr   r	   Zwagtail.telepathr
   Zwagtail.test.testapp.modelsr   Z wagtail.test.utils.wagtail_testsr   utilsr   r   r   r   r   r?   rb   r   r   r   r   r   <module>   s    >T q