o
    h5H                     @   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/html/ndineBlogger/venv/lib/python3.10/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html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 s$w   Y  | 	|d d S )Nwagtailimagesdefault_attrsasynclazy)decodingloading)newze<img alt="missing image" src="/media/not-found" width="0" height="0" decoding="async" loading="lazy">)
r	   unittestmockpatchobjectr   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   r9   )r	   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	   assertListEquallistextract_referencesr   r   strid)r   r&   r   r   r   test_extract_referencesI   s   z-TestImageChooserBlock.test_extract_referencesN)	__name__
__module____qualname__r    r)   r6   r7   r?   rF   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   :   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      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 )
NrM   r   1rM   Body class="comparison__child-object"class="preview-image"deletionaddition)r   rQ   rR   comparison_classr   stream_blockrO   
assertTrueis_fieldassertFalseis_child_relationr;   field_labelhtmldiffassertIsInstancer   assertInassertNotInhas_changedr   rS   
comparisonrc   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 )	NrM   r   rU   rV   rW   rX   class="preview-image deletion"class="preview-image addition")r   rQ   rR   r\   r   r]   rO   rP   r^   r_   r`   ra   r;   rb   rc   rd   r   re   rg   rh   r   r   r   test_has_changed   s6   

z0TestImageChooserBlockComparison.test_has_changedN)	rG   rH   rI   r   StreamFieldComparisonr\   r    rj   rm   r   r   r   r   rJ   U   s
    "rJ   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   d   t  }| jjddd}|||}t|}|d}| |d |	d | 
d|d  d S 	NSample alt textFr   alt_text
decorativeimgaltrt   /media/images/testsrc)r   r   rE   r"   	to_pythonr   get_soupfindr;   getre   r   r&   valuer'   soupimg_tagr   r   r   r)         

zTestImageBlock.test_renderc                 C   rp   rq   )r   r   rE   render_basicrz   r   r{   r|   r;   r}   re   r~   r   r   r   test_render_basic   r   z TestImageBlock.test_render_basicc                 C   s^   t  }| jjddd}|||}t|}|d}| |d d | 	d|d  d S )	Nrr   Trs   rv   rw   r@   rx   ry   )
r   r   rE   r"   rz   r   r{   r|   r;   re   r~   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 s#w   Y  | dt|j	j
d  d S )NFrs   z@Please add some alt text for your image or mark it as decorativert   )r   r   rE   assertRaisesr   cleanrz   re   rD   	exceptionblock_errors)r   r&   r   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   rz   r   rE   r;   contextual_alt_textr`   ru   r   r&   r   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 textFrs   )r   r   rE   rz   r;   r   r`   ru   r   r&   r   resultr   r   r   test_to_python_with_dict   s   
z'TestImageBlock.test_to_python_with_dictc                 C   s"   t dd}|d }| | d S NFr8   )r   rz   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_pythonr;   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   rz   r   rE   r   r;   )r   r&   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 )
NFr8   rs   Custom alt textzDifferent alt text   r   r      )r   r   r   rE   r;   lenr   r   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   Frs   )r   r   r   ru   get_prep_valuer;   rE   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 )NFr8   rs   )r   r   r;   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 )Nrr   Frs   )r   r   rE   get_searchable_contentrz   r;   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 s:w   Y  | d	t	|j
jd
  d S )N_argsr   r   r   r9   r@   Frs   zThis field is requiredr   )r   r
   packr^   rz   r   r   r   re   rD   r   r   )r   r&   image_block_defimage_chooser_block_defr   r   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 )
NFr8   r   r   r   r   r9   r@   rs   )r   r
   r   r`   rz   r   r   )r   r&   r   r   r   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 )NrM   123image_with_altrr   Frs   )rE   typer   rV   rt   does_not_exist)r   rQ   rR   r]   rz   r   rE   get_block_by_content_pathrM   r;   r&   namerd   r   r   r   )r   rS   pagebound_blockr   r   r   test_get_block_by_content_pathy  s0   
z-TestImageBlock.test_get_block_by_content_pathN)rG   rH   rI   r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro      s$    		ro   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   rK   rL   rN   r   r   r   r   r      rT   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 )NrM   r   FSome alt textr   ru   rt   rU   r   r   rE   rW   rX   rY   rZ   r[   )r   rQ   rR   rO   rE   rM   r\   r^   r_   r`   ra   r;   rb   rc   rd   r   re   rf   rg   r   rS   page_1page_2ri   rc   r   r   r   rj     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 )NrM   r   Fr   r   rU   r   rW   rX   rk   rl   )r   rQ   rR   rO   rE   rM   rP   r\   r^   r_   r`   ra   r;   rb   rc   rd   r   re   rg   r   r   r   r   rm     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 )NrM   r   Fza cat playing with some stringr   rU   r   z!a kitten playing with some stringrW   rX   zi<dd>a <span class="deletion">cat</span><span class="addition">kitten</span> playing with some string</dd>)r   rQ   rR   rO   rE   rM   r\   r^   r_   r`   ra   r;   rb   rc   rd   r   re   rg   r   r   r   r   test_alt_text_has_changed  s>   z2TestImageBlockComparison.test_alt_text_has_changedN)
rG   rH   rI   r   rn   r\   r    rj   rm   r   r   r   r   r   r     s    )(r   ) unittest.mockr1   django.appsr   django.testr   django.utils.safestringr   wagtail.adminr   wagtail.blocks.stream_blockr   wagtail.blocks.struct_blockr   wagtail.images.blocksr   r	   wagtail.telepathr
   wagtail.test.testapp.modelsr    wagtail.test.utils.wagtail_testsr   utilsr   r   r   r   r   rJ   ro   r   r   r   r   r   <module>   s"    >T q