a
    Dg                     @   s   d dl Z d dlZ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 d dlmZ d dlmZ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mZ d dlmZmZ d dl m!Z!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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 zd dl7Z7dZ8W n e9yx   dZ8Y n0 G dd deZ:G dd deZ;G dd  d eZ<G d!d" d"e6eZ=G d#d$ d$eZ>G d%d& d&eZ?G d'd( d(eZ@G d)d* d*eZAG d+d, d,eZBG d-d. d.eZCdS )/    N)patch)	HTTPErrorURLError)template)ValidationError)TestCaseoverride_settings)reverse)
make_awarenow)blocks)oembed_providers)
EmbedBlock
EmbedValue)	get_embedget_embed_hash)EmbedNotFoundException!EmbedUnsupportedProviderException)get_finders)AccessDeniedEmbedlyExceptionEmbedlyException)EmbedlyFinder)#AccessDeniedFacebookOEmbedException)FacebookOEmbedFinder)$AccessDeniedInstagramOEmbedException)InstagramOEmbedFinder)OEmbedFinder)Embed)	embed_tag)WagtailTestUtilsFTc                   @   s   e Zd Zdd Zeddigddd Zedd	d
gddd Zedd	didgddd Zeddddgddd Zeddddgddd Z	dS )TestGetFindersc                 C   s*   t  }| t|d | |d t d S N   r   r   assertEquallenassertIsInstancer   selfZfinders r)   _/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/embeds/tests/test_embeds.pytest_defaults_to_oembed0   s    z&TestGetFinders.test_defaults_to_oembedclasszwagtail.embeds.finders.oembedZWAGTAILEMBEDS_FINDERSc                 C   s*   t  }| t|d | |d t d S r!   r#   r'   r)   r)   r*   test_new_find_oembed8   s    z#TestGetFinders.test_new_find_oembedzwagtail.embeds.finders.embedlyfoo)r,   keyc                 C   s>   t  }| t|d | |d t | |d  d d S )Nr"   r   r/   )r   r$   r%   r&   r   get_keyr'   r)   r)   r*   test_new_find_embedlyA   s    	z$TestGetFinders.test_new_find_embedlybar)r,   optionsc                 C   s@   t  }| t|d | |d t | |d jddi d S )Nr"   r   r/   r3   )r   r$   r%   r&   r   r4   r'   r)   r)   r*   !test_new_find_oembed_with_optionsP   s    z0TestGetFinders.test_new_find_oembed_with_optionsz wagtail.embeds.finders.instagram
1234567890abcdefghijklmnop)r,   app_id
app_secretc                 C   s`   t  }| t|d | |d t | |d jd | |d jd | |d jd d S Nr"   r   r6   r7   F)	r   r$   r%   r&   r   r8   r9   assertIs
omitscriptr'   r)   r)   r*   'test_find_instagram_oembed_with_options\   s    
z6TestGetFinders.test_find_instagram_oembed_with_optionszwagtail.embeds.finders.facebookc                 C   s`   t  }| t|d | |d t | |d jd | |d jd | |d jd d S r:   )	r   r$   r%   r&   r   r8   r9   r;   r<   r'   r)   r)   r*   &test_find_facebook_oembed_with_optionso   s    
z5TestGetFinders.test_find_facebook_oembed_with_optionsN)
__name__
__module____qualname__r+   r   r.   r2   r5   r=   r>   r)   r)   r)   r*   r    /   sB   


	

	r    c                   @   sv   e Zd Zdd ZdddZedddd	 Zd
d ZdddZdd Z	dddZ
dd Zdd Zeg ddd ZdS )
TestEmbedsc                 C   s
   d| _ d S )Nr   	hit_countr(   r)   r)   r*   setUp   s    zTestEmbeds.setUpNc                 C   s*   |  j d7  _ d| d|r|nddddS )Nr"   Test: video    <p>Blah blah blah</p>)titletypewidthheighthtmlrC   r(   url	max_width
max_heightr)   r)   r*   dummy_finder   s    
zTestEmbeds.dummy_finderT)ZWAGTAILEMBEDS_RESPONSIVE_HTMLc                 C   s   t dd| jd}| |jd | |jd | |jd | |jd | |jd | |jd | 	|j
 | | jd	 t dd| jd | | jd	 t d
d| jd | | jd t d
| jd | | jd d S )Nwww.test.com/1234  rS   finderTest: www.test.com/1234rH    g333333?z120.0%r"   zwww.test.com/4321   )rY      )r   rU   r$   rL   rM   rN   thumbnail_urlZratioZ	ratio_css
assertTrueis_responsiverD   r(   embedr)   r)   r*   test_get_embed_responsive   s    z$TestEmbeds.test_get_embed_responsivec                 C   sV   t dd| jd}| |jd | |jd | |jd | |j | |j	 d S )NrV   rW   rX   rZ   rH   )
r   rU   r$   rL   rM   rN   assertFalser`   assertIsNonecache_untilra   r)   r)   r*   test_get_embed_nonresponsive   s    z'TestEmbeds.test_get_embed_nonresponsivec                 C   s:   |  j d7  _ d| d|r|ndddttddd	d
S )Nr"   rG   rH   rI   rJ   rK     r\   r]   )rL   rM   rN   rO   rP   rf   )rD   r
   datetimerQ   r)   r)   r*   dummy_cache_until_finder   s    
z#TestEmbeds.dummy_cache_until_finderc              	   C   s   t dd| jd}| |jttddd | | jd t dd| jd}| | jd t tjdd }||_|	  t dd| jd}| | jd | || | || | |j| d S )	NrV   rW   rX   rh   r\   r]   r"   )minutes)
r   rj   r$   rf   r
   ri   rD   r   	timedeltasave)r(   rb   Zembed_2Z	future_dtZembed_3r)   r)   r*   test_get_embed_cache_until   s&    z%TestEmbeds.test_get_embed_cache_untilc                 C   s   d| ddddddS )NrG   rH   r[   z100%rJ   rK   )rL   rM   r^   rN   rO   rP   r)   rQ   r)   r)   r*   dummy_finder_invalid_width   s    z%TestEmbeds.dummy_finder_invalid_widthc                 C   s    t dd| jd}| |j d S )NrV   rW   rX   )r   ro   re   rN   ra   r)   r)   r*   test_invalid_width   s    zTestEmbeds.test_invalid_widthc                    s.   d fdd	}t dd|d} |jd d S )Nc                    s     | |}d|d< |S )zD
            A finder which returns everything but HTML
            NrP   )rU   )rR   rS   rT   rb   rE   r)   r*   no_html_finder   s    z/TestEmbeds.test_no_html.<locals>.no_html_finderrV   rW   rX   r[   )NN)r   r$   rP   )r(   rq   rb   r)   rE   r*   test_no_html   s    zTestEmbeds.test_no_htmlr-   c                 C   s:   |  t tddd W d    n1 s,0    Y  d S )NrV   rW   rS   )assertRaisesr   r   rE   r)   r)   r*   test_no_finders_available  s    z$TestEmbeds.test_no_finders_available)NN)NN)NN)r?   r@   rA   rF   rU   r   rc   rg   rj   rn   ro   rp   rr   ru   r)   r)   r)   r*   rB      s   




rB   c                   @   s   e Zd Zdd ZdS )TestEmbedHashc                 C   s<   d}|  t|d |  t|dd |  t|dd d S )NrV   Z 9a4cfc187266026cd68160b5db572629r   Z 946fb9597a6c74ab3cef1699eff7fde7r"   Z 427830227a86093b50417e11dbd2f28e)r$   r   )r(   rR   r)   r)   r*   test_get_embed_hash  s    z!TestEmbedHash.test_get_embed_hashN)r?   r@   rA   rw   r)   r)   r)   r*   rv     s   rv   c                   @   sD   e Zd Zdd Zdd Zdd Zeddd	 Zedd
d ZdS )TestChooserc                 C   s   |    d S )N)loginrE   r)   r)   r*   rF     s    zTestChooser.setUpc                 C   s   | j d}| |jd d S )Nz/admin/embeds/chooser/   )clientgetr$   status_code)r(   rr)   r)   r*   test_chooser  s    zTestChooser.test_chooserc                 C   sN   | j d}| |jd t|j }| |d d | d|d  d S )Nz./admin/embeds/chooser/?url=http://example2.comrz   stepchooserzvalue="http://example2.com"rP   )	r{   r|   r$   r}   jsonloadscontentdecodeassertIn)r(   r~   response_jsonr)   r)   r*   test_chooser_with_edit_params  s
    z)TestChooser.test_chooser_with_edit_paramswagtail.embeds.embeds.get_embedc                 C   sj   t ddd|_| jtdddi}| |jd t|j	
 }| |d d	 | |d
 d d d S )N$<img src="http://www.example.com" />zAn example embed)rP   rL   wagtailembeds:chooser_uploadembed-chooser-urlhttp://www.example.com/rz   r   Zembed_chosenZ
embed_datarL   )r   return_valuer{   postr	   r$   r}   r   r   r   r   r(   r   responser   r)   r)   r*   test_submit_valid_embed#  s    z#TestChooser.test_submit_valid_embedc                 C   s^   t |_| jtdddi}| |jd t|j	
 }| |d d | d|d  d S )	Nr   r   r   rz   r   r   z"Cannot find an embed for this URL.rP   )r   side_effectr{   r   r	   r$   r}   r   r   r   r   r   r   r)   r)   r*   test_submit_unrecognised_embed2  s    z*TestChooser.test_submit_unrecognised_embedN)	r?   r@   rA   rF   r   r   r   r   r   r)   r)   r)   r*   rx     s   
rx   c                   @   s   e Zd Zeeddd Zeeddd Zeeddd Zeeddd	 Z	eedd
d Z
eeddd Zeeddd ZdS )TestEmbedlyzEmbedly is not installedc                 C   sz   t d^}ddd|_tddd |jddd tddjdd	d
 |jdd	dd W d    n1 sl0    Y  d S )Nembedly.Embedly.oembedphotohttp://www.example.comrM   rR   r/   r0   F)betterd   rs   )Zmaxwidthr   )r   r   r   
find_embedassert_called_withr(   oembedr)   r)   r*   1test_embedly_oembed_called_with_correct_argumentsB  s    
z=TestEmbedly.test_embedly_oembed_called_with_correct_argumentsc                 C   sR   t d6}ddddd|_| ttddjd W d    n1 sD0    Y  d S )	Nr   r   r   T  rM   rR   errorZ
error_coder/   r   r   r   rt   r   r   r   r   r)   r)   r*   test_embedly_401O  s    

zTestEmbedly.test_embedly_401c                 C   sR   t d6}ddddd|_| ttddjd W d    n1 sD0    Y  d S )	Nr   r   r   Ti  r   r/   r   r   r   r)   r)   r*   test_embedly_403^  s    

zTestEmbedly.test_embedly_403c                 C   sR   t d6}ddddd|_| ttddjd W d    n1 sD0    Y  d S )	Nr   r   r   T  r   r/   r   )r   r   rt   r   r   r   r   r)   r)   r*   test_embedly_404m  s    

zTestEmbedly.test_embedly_404c                 C   sR   t d6}ddddd|_| ttddjd W d    n1 sD0    Y  d S )	Nr   r   r   Ti  r   r/   r   )r   r   rt   r   r   r   r   r)   r)   r*   test_embedly_other_error|  s    

z$TestEmbedly.test_embedly_other_errorc                 C   s   t dh}ddd|_tddd}| |d d d	d
d|_tddd}| |d d
 W d    n1 sv0    Y  d S )Nr   r   r   r   r/   r   rP   )<img src="http://www.example.com" alt="">something else<foo>bar</foo>rM   rP   r   r   r   r   r$   r(   r   resultr)   r)   r*   test_embedly_html_conversion  s    
z(TestEmbedly.test_embedly_html_conversionc                 C   s   t d}ddd|_tddd}| |ddddd d d dd	 dd
ddddddd|_tddd}| |dd
ddddddd W d    n1 s0    Y  d S )Nr   r   r   r   r/   r   r   r[   )rL   author_nameprovider_namerM   r^   rN   rO   rP   ZAliceZBobr   )rM   r   r   rL   r^   rN   rO   rP   r   r   r)   r)   r*   test_embedly_return_value  sJ    

z%TestEmbedly.test_embedly_return_valueN)r?   r@   rA   unittestZskipIf
no_embedlyr   r   r   r   r   r   r   r)   r)   r)   r*   r   A  s   












r   c                   @   s   e Zd Zdd Zdd Zdd Zeddd	 Zeded
dd Zeded
dd Z	ededed
dd Z
ededed
dd Zdd Zdd Zeded
dd ZdS )
TestOembedc                 C   s   G dd d}| | _ d S )Nc                   @   s   e Zd Zdd ZdS )z'TestOembed.setUp.<locals>.DummyResponsec                 S   s   dS )Ns   foor)   rE   r)   r)   r*   read  s    z,TestOembed.setUp.<locals>.DummyResponse.readNr?   r@   rA   r   r)   r)   r)   r*   DummyResponse  s   r   dummy_responser(   r   r)   r)   r*   rF     s    zTestOembed.setUpc                 C   s   |  tt jd d S )Nr/   )rt   r   r   r   rE   r)   r)   r*   test_oembed_invalid_provider  s    z'TestOembed.test_oembed_invalid_providerc                 C   sX   dt di}tjtjdfi |" | tt jd W d    n1 sJ0    Y  d S )Nr   r/   urlopenhttp://www.youtube.com/watch/)	r   r   objecturllibrequestrt   r   r   r   r(   configr)   r)   r*   test_oembed_invalid_request  s    z&TestOembed.test_oembed_invalid_requesturllib.request.urlopenc                 C   s   | j |_| tt jd d S )Nz+https://www.youtube.com/watch?v=ReblZ7o7lu4)r   r   rt   r   r   r   )r(   r   r)   r)   r*   test_oembed_non_json_response  s    z(TestOembed.test_oembed_non_json_responsez
json.loadsc                 C   sN   | j |_ddd|_t d}| |d d | |d d |d d S )	Nr   r   r   r   rM   rP   r   r/   )r   r   r   r   r$   r   r(   r   r   r   r)   r)   r*   test_oembed_photo_request  s    z$TestOembed.test_oembed_photo_requestc                 C   sP   | j |_ddddddddd	d
	|_t d}| |dddddddd	d d S )N	somethingr   
test_titletest_authortest_provider_nametest_thumbail_url
test_widthtest_height	test_html)	rM   rR   rL   r   r   r^   rN   rO   rP   r   rM   rL   r   r   r^   rN   rO   rP   )r   r   r   r   r$   r   r)   r)   r*   test_oembed_return_values  s0    z$TestOembed.test_oembed_return_valueszdjango.utils.timezone.nowc                 C   sz   | j |_ddddddddd	d
d
|_ttddd|_t d}| |dddddddd	ttjdddddd	 d S )Nr   r   r   r   r   r   r   r   r   i  
rM   rR   rL   r   r   r^   rN   rO   rP   Z	cache_agerh   r\   r]   r   r"   hour	rM   rL   r   r   r^   rN   rO   rP   rf   r   r   r
   ri   r   r   r$   r(   r   r   r   r   r)   r)   r*   test_oembed_cache_until
  s6    z"TestOembed.test_oembed_cache_untilc                 C   sz   | j |_ddddddddd	d
d
|_ttddd|_t d}| |dddddddd	ttjdddddd	 d S )Nr   r   r   r   r   r   r   r   r   Z3600r   rh   r\   r]   r   r"   r   r   r   r   r)   r)   r*   !test_oembed_cache_until_as_string,  s6    z,TestOembed.test_oembed_cache_until_as_stringc                 C   s"   t tjgd}| |d d S N)	providersr   )r   r   Zyoutuber_   acceptr(   rY   r)   r)   r*   "test_oembed_accepts_known_providerN  s    z-TestOembed.test_oembed_accepts_known_providerc                 C   s"   t tjgd}| |d d S r   )r   r   Ztwitterrd   r   r   r)   r)   r*   *test_oembed_doesnt_accept_unknown_providerR  s    z5TestOembed.test_oembed_doesnt_accept_unknown_providerc                 C   s\   | j |_ddd|_t d}| |d d |jd d }| | dd d d S )	NrH   r   r   zhttps://vimeo.com/217403396rM   r   ?z%https://www.vimeo.com/api/oembed.json)r   r   r   r   r$   	call_argsget_full_urlsplit)r(   r   r   r   r   r)   r)   r*   test_endpoint_with_format_paramV  s    z*TestOembed.test_endpoint_with_format_paramN)r?   r@   rA   rF   r   r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r*   r     s0   	
r   c                   @   sD   e Zd Zdd Zdd Zeddd Zdd	 Zd
d Zdd Z	dS )TestInstagramOEmbedc                 C   s   G dd d}| | _ d S )Nc                   @   s   e Zd Zdd ZdS )z0TestInstagramOEmbed.setUp.<locals>.DummyResponsec                 S   s   dS )Ns  {
                    "type": "something",
                    "url": "http://www.example.com",
                    "title": "test_title",
                    "author_name": "test_author",
                    "provider_name": "Instagram",
                    "thumbnail_url": "test_thumbail_url",
                    "width": "test_width",
                    "height": "test_height",
                    "html": "<blockquote class=\"instagram-media\">Content</blockquote>"
                }r)   rE   r)   r)   r*   r   g  s    z5TestInstagramOEmbed.setUp.<locals>.DummyResponse.readNr   r)   r)   r)   r*   r   f  s   r   r   r   r)   r)   r*   rF   e  s    zTestInstagramOEmbed.setUpc                 C   sJ   t  }| |d | |d | |d | |d d S )Nz<https://www.instagram.com/p/CHeRxmnDSYe/?utm_source=ig_embedz=https://www.instagram.com/tv/CZMkxGaIXk3/?utm_source=ig_embedz?https://www.instagram.com/reel/CZMs3O_I22w/?utm_source=ig_embedz5https://instagr.am/p/CHeRxmnDSYe/?utm_source=ig_embed)r   r_   r   rd   r   r)   r)   r*   3test_instagram_oembed_only_accepts_new_url_patternsv  s&    zGTestInstagramOEmbed.test_instagram_oembed_only_accepts_new_url_patternsr   c                 C   sl   | j |_tdddd}| |ddddd	d
ddd |jd d }| | d | |dd d S )N123abcr8   r9   $https://instagram.com/p/CHeRxmnDSYe/r   r   r   Z	Instagramr   r   r   z8<blockquote class="instagram-media">Content</blockquote>r   r   zrhttps://graph.facebook.com/v11.0/instagram_oembed?url=https%3A%2F%2Finstagram.com%2Fp%2FCHeRxmnDSYe%2F&format=jsonAuthorizationBearer 123|abc)r   r   r   r   r$   r   r   
get_headerr(   r   r   r   r)   r)   r*   #test_instagram_oembed_return_values  s,    z7TestInstagramOEmbed.test_instagram_oembed_return_valuesc                 C   sf   t dddi d d}d|i}tjtjdfi |" | tt jd W d    n1 sX0    Y  d S )Nr   r   invalid credentialscodemsghdrsfpr   r   )	r   r   r   r   r   rt   r   r   r   r(   errr   r)   r)   r*   !test_instagram_request_denied_401  s    z5TestInstagramOEmbed.test_instagram_request_denied_401c                 C   sf   t dddi d d}d|i}tjtjdfi |" | tt jd W d    n1 sX0    Y  d S )Nz#https://instagram.com/p/badrequest/r   	Not Foundr   r   r   r   )	r   r   r   r   r   rt   r   r   r   r   r)   r)   r*    test_instagram_request_not_found  s    z4TestInstagramOEmbed.test_instagram_request_not_foundc                 C   sZ   dt ddi}tjtjdfi |" | tt jd W d    n1 sL0    Y  d S )Nr   Testing error handlingreasonr   r   )	r   r   r   r   r   rt   r   r   r   r   r)   r)   r*   test_instagram_failed_request  s    z1TestInstagramOEmbed.test_instagram_failed_requestN)
r?   r@   rA   rF   r   r   r   r   r   r  r)   r)   r)   r*   r   d  s   
r   c                   @   sD   e Zd Zdd Zdd Zeddd Zdd	 Zd
d Zdd Z	dS )TestFacebookOEmbedc                 C   s   G dd d}| | _ d S )Nc                   @   s   e Zd Zdd ZdS )z/TestFacebookOEmbed.setUp.<locals>.DummyResponsec                 S   s   dS )Ns  {
                    "type": "something",
                    "url": "http://www.example.com",
                    "title": "test_title",
                    "author_name": "test_author",
                    "provider_name": "Facebook",
                    "width": "test_width",
                    "height": "test_height",
                    "html": "<blockquote class=\"facebook-media\">Content</blockquote>"
                }r)   rE   r)   r)   r*   r     s    z4TestFacebookOEmbed.setUp.<locals>.DummyResponse.readNr   r)   r)   r)   r*   r     s   r   r   r   r)   r)   r*   rF     s    zTestFacebookOEmbed.setUpc                 C   s*   t  }| |d | |d d S )Nz9https://www.facebook.com/testuser/posts/10157389310497085https://fb.watch/ABC123eew/)r   r_   r   r   r)   r)   r*   1test_facebook_oembed_accepts_various_url_patterns  s
    zDTestFacebookOEmbed.test_facebook_oembed_accepts_various_url_patternsr   c                 C   sl   | j |_tdddd}| |ddddd d	d
dd |jd d }| | d | |dd d S )Nr   r   r   r  r   r   r   ZFacebookr   r   z7<blockquote class="facebook-media">Content</blockquote>r   r   zchttps://graph.facebook.com/v11.0/oembed_video?url=https%3A%2F%2Ffb.watch%2FABC123eew%2F&format=jsonr   r   )r   r   r   r   r$   r   r   r   r   r)   r)   r*   "test_facebook_oembed_return_values  s,    z5TestFacebookOEmbed.test_facebook_oembed_return_valuesc                 C   sf   t dddi d d}d|i}tjtjdfi |" | tt jd W d    n1 sX0    Y  d S )Nr  r   r   r   r   r   )	r   r   r   r   r   rt   r   r   r   r   r)   r)   r*    test_facebook_request_denied_401  s    z3TestFacebookOEmbed.test_facebook_request_denied_401c                 C   sf   t dddi d d}d|i}tjtjdfi |" | tt jd W d    n1 sX0    Y  d S )Nr  r   r   r   r   r   )	r   r   r   r   r   rt   r   r   r   r   r)   r)   r*   test_facebook_request_not_found  s    
z2TestFacebookOEmbed.test_facebook_request_not_foundc                 C   sZ   dt ddi}tjtjdfi |" | tt jd W d    n1 sL0    Y  d S )Nr   r   r   r   r  )	r   r   r   r   r   rt   r   r   r   r   r)   r)   r*   test_facebook_failed_request  s    z/TestFacebookOEmbed.test_facebook_failed_requestN)
r?   r@   rA   rF   r  r   r  r  r  r	  r)   r)   r)   r*   r    s   
r  c                   @   s<   e Zd Zeddd Zeddd Zeddd ZdS )	TestEmbedTagr   c                 C   s$   t dd|_td}| |d d S )Nr   rP   r   )r   r   r   r$   )r(   r   r   r)   r)   r*   test_direct_call*  s    zTestEmbedTag.test_direct_callc                 C   s4   t dd|_td}|t }| |d d S )Nr   r  H{% load wagtailembeds_tags %}{% embed "http://www.youtube.com/watch/" %})r   r   r   TemplaterenderContextr$   r(   r   tempr   r)   r)   r*   test_call_from_template2  s    z$TestEmbedTag.test_call_from_templatec                 C   s.   t |_td}|t }| |d d S )Nr  r[   )r   r   r   r  r  r  r$   r  r)   r)   r*   test_catches_embed_not_found=  s    z)TestEmbedTag.test_catches_embed_not_foundN)r?   r@   rA   r   r  r  r  r)   r)   r)   r*   r
  )  s   


r
  c                   @   s|   e Zd Zdd Zdd Zeddd Zeddd	 Zd
d Zdd Z	eddd Z
eddd Zeddd ZdS )TestEmbedBlockc                 C   sF   t dd}|d}| |t | |jd |d}| | dS )z|
        Deserialising the JSONish value of an EmbedBlock (a URL) should give us an EmbedValue
        for that URL
        Frequiredhttp://www.example.com/foor[   N)r   	to_pythonr&   r   r$   rR   re   )r(   block	block_valZempty_block_valr)   r)   r*   test_deserializeJ  s    


zTestEmbedBlock.test_deserializec                 C   sB   t dd}td}||}| |d |d }| |d d S )NFr  r  r[   )r   r   Zget_prep_valuer$   )r(   r  r  Zserialized_valZserialized_empty_valr)   r)   r*   test_serializeY  s    


zTestEmbedBlock.test_serializer   c                 C   s\   t dd|_t }|d}td}td|i}||}| d| |	dd d  d S )N<h1>Hello world!</h1>r  r  zembed: {{ embed }}rb   )
r   r   r   r  r   r  r  r  r   assert_any_callr(   r   r  r  r  contextr   r)   r)   r*   test_renderc  s    


zTestEmbedBlock.test_renderc                 C   sx   t dd|_tdt fdt fg}|ddd}td}t	d	|i}|
|}| d| |dd
d
 d
S )z
        When rendering the value of an EmbedBlock directly in a template
        (as happens when accessing it as a child of a StructBlock), the
        proper embed output should be rendered, not the URL.
        r  r  rL   rb   zA testr  )rL   rb   zembed: {{ self.embed }}r(   N)r   r   r   ZStructBlockZ	CharBlockr   r  r   r  r  r  r   r  r   r)   r)   r*   test_render_within_structblockt  s    


z-TestEmbedBlock.test_render_within_structblockc                 C   sZ   t dd}|jddii dd}| |t | |jd |jddii dd}| | dS )zu
        EmbedBlock should be able to turn a URL submitted as part of a form
        back into an EmbedValue
        Fr  Zmyembedr  )prefixr[   N)r   Zvalue_from_datadictr&   r   r$   rR   re   )r(   r  r  Z	empty_valr)   r)   r*   test_value_from_form  s    

z#TestEmbedBlock.test_value_from_formc                 C   s   t  }| |  t dd}| |  t d d}| |  t dd}| | t | | jd t tdd}| | t | | jd d S )Nr[   )defaultr  )r   re   get_defaultr&   r   r$   rR   )r(   Zblock1Zblock2Zblock3Zblock4Zblock5r)   r)   r*   test_default  s    


zTestEmbedBlock.test_defaultc                 C   st   t dd|_t }|td}| |t | |jd | t	d |d  W d    n1 sf0    Y  d S )Nr  r  +https://www.youtube.com/watch?v=_U79Wc965vwr[   )
r   r   r   cleanr   r&   r$   rR   ZassertRaisesMessager   r(   r   r  Zcleaned_valuer)   r)   r*   test_clean_required  s    z"TestEmbedBlock.test_clean_requiredc                 C   sV   t dd|_tdd}|td}| |t | |jd |d }| | d S )Nr  r  Fr  r)  )	r   r   r   r*  r   r&   r$   rR   re   r+  r)   r)   r*   test_clean_non_required  s    

z&TestEmbedBlock.test_clean_non_requiredc                 C   s   t |_tdd}| t |td W d    n1 s>0    Y  t }| t |td W d    n1 s|0    Y  d S )NFr  z#http://no-oembed-here.com/something)r   r   r   rt   r   r*  r   )r(   r   Znon_required_blockZrequired_blockr)   r)   r*   test_clean_invalid_url  s    
,z%TestEmbedBlock.test_clean_invalid_urlN)r?   r@   rA   r  r  r   r"  r#  r%  r(  r,  r-  r.  r)   r)   r)   r*   r  I  s   




r  )Dri   r   r   urllib.requestr   Zunittest.mockr   urllib.errorr   r   Zdjangor   Zdjango.core.exceptionsr   Zdjango.testr   r   Zdjango.urlsr	   Zdjango.utils.timezoner
   r   Zwagtailr   Zwagtail.embedsr   Zwagtail.embeds.blocksr   r   Zwagtail.embeds.embedsr   r   Zwagtail.embeds.exceptionsr   r   Zwagtail.embeds.findersr   Zwagtail.embeds.finders.embedlyr   r   r   Zwagtail.embeds.finders.facebookr   r   Z wagtail.embeds.finders.instagramr   r   Zwagtail.embeds.finders.oembedr   Zwagtail.embeds.modelsr   Z.wagtail.embeds.templatetags.wagtailembeds_tagsr   Zwagtail.test.utilsr   Zembedlyr   ImportErrorr    rB   rv   rx   r   r   r   r  r
  r  r)   r)   r)   r*   <module>   sX   
T 	.   lY 