o
    h                     @   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 e9y   dZ8Y nw 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   *   t  }| t|d | |d t d S N   r   r   assertEquallenassertIsInstancer   selffinders r+   `/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/embeds/tests/test_embeds.pytest_defaults_to_oembed0   s   z&TestGetFinders.test_defaults_to_oembedclasszwagtail.embeds.finders.oembedWAGTAILEMBEDS_FINDERSc                 C   r!   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   r2   )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   r2   r6   )r   r%   r&   r'   r   r7   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   `   t  }| t|d | |d t | |d jd | |d jd | |d jd d S Nr#   r   r9   r:   F)	r   r%   r&   r'   r   r;   r<   assertIs
omitscriptr(   r+   r+   r,   'test_find_instagram_oembed_with_options\      
z6TestGetFinders.test_find_instagram_oembed_with_optionszwagtail.embeds.finders.facebookc                 C   r=   r>   )	r   r%   r&   r'   r   r;   r<   r?   r@   r(   r+   r+   r,   &test_find_facebook_oembed_with_optionso   rB   z5TestGetFinders.test_find_facebook_oembed_with_optionsN)
__name__
__module____qualname__r-   r   r1   r5   r8   rA   rC   r+   r+   r+   r,   r    /   sD    



	
	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htmlrH   r)   url	max_width
max_heightr+   r+   r,   dummy_finder   s   
zTestEmbeds.dummy_finderT)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  rX   finderTest: www.test.com/1234rM    g333333?z120.0%r#   zwww.test.com/4321   )r_      )r   rZ   r%   rQ   rR   rS   thumbnail_urlratio	ratio_css
assertTrueis_responsiverI   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 )Nr\   r]   r^   r`   rM   )
r   rZ   r%   rQ   rR   rS   assertFalserh   assertIsNonecache_untilri   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#   rL   rM   rN   rO   rP     rb   rc   )rQ   rR   rS   rT   rU   rn   )rI   r
   datetimerV   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 )	Nr\   r]   r^   rp   rb   rc   r#   )minutes)
r   rr   r%   rn   r
   rq   rI   r   	timedeltasave)r)   rj   embed_2	future_dt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 )NrL   rM   ra   z100%rO   rP   )rQ   rR   rd   rS   rT   rU   r+   rV   r+   r+   r,   dummy_finder_invalid_width   s   z%TestEmbeds.dummy_finder_invalid_widthc                 C   s    t dd| jd}| |j d S )Nr\   r]   r^   )r   rz   rm   rS   ri   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
            NrU   )rZ   )rW   rX   rY   rj   rJ   r+   r,   no_html_finder   s   z/TestEmbeds.test_no_html.<locals>.no_html_finderr\   r]   r^   ra   NN)r   r%   rU   )r)   r|   rj   r+   rJ   r,   test_no_html   s   zTestEmbeds.test_no_htmlr/   c                 C   s<   |  t tddd W d    d S 1 sw   Y  d S )Nr\   r]   rX   )assertRaisesr   r   rJ   r+   r+   r,   test_no_finders_available  s   "z$TestEmbeds.test_no_finders_availabler}   )rD   rE   rF   rK   rZ   r   rk   ro   rr   ry   rz   r{   r~   r   r+   r+   r+   r,   rG      s    




rG   c                   @      e Zd Zdd ZdS )TestEmbedHashc                 C   s<   d}|  t|d |  t|dd |  t|dd d S )Nr\    9a4cfc187266026cd68160b5db572629r    946fb9597a6c74ab3cef1699eff7fde7r#    427830227a86093b50417e11dbd2f28e)r%   r   )r)   rW   r+   r+   r,   test_get_embed_hash  s   z!TestEmbedHash.test_get_embed_hashN)rD   rE   rF   r   r+   r+   r+   r,   r         r   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)loginrJ   r+   r+   r,   rK     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.comr   stepchooserzvalue="http://example2.com"rU   )	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)rU   rQ   wagtailembeds:chooser_uploadembed-chooser-urlhttp://www.example.com/r   r   embed_chosen
embed_datarQ   )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   r   r   r   z"Cannot find an embed for this URL.rU   )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)	rD   rE   rF   rK   r   r   r   r   r   r+   r+   r+   r,   r     s    
r   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   s|   t d0}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    d S 1 s7w   Y  d S )Nembedly.Embedly.oembedphotohttp://www.example.comrR   rW   r2   r3   F)betterd   r   )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   T   t d}ddddd|_| ttddjd W d    d S 1 s#w   Y  d S )	Nr   r   r   T  rR   rW   error
error_coder2   r   r   r   r   r   r   r   r   r+   r+   r,   test_embedly_401O     

"zTestEmbedly.test_embedly_401c                 C   r   )	Nr   r   r   Ti  r   r2   r   r   r   r+   r+   r,   test_embedly_403^  r   zTestEmbedly.test_embedly_403c                 C   r   )	Nr   r   r   T  r   r2   r   )r   r   r   r   r   r   r   r+   r+   r,   test_embedly_404m  r   zTestEmbedly.test_embedly_404c                 C   r   )	Nr   r   r   Ti  r   r2   r   )r   r   r   r   r   r   r   r+   r+   r,   test_embedly_other_error|  r   z$TestEmbedly.test_embedly_other_errorc                 C   s   t d5}ddd|_tddd}| |d d d	d
d|_tddd}| |d d
 W d    d S 1 s<w   Y  d S )Nr   r   r   r   r2   r   rU   )<img src="http://www.example.com" alt="">something else<foo>bar</foo>rR   rU   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I}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    d S 1 sPw   Y  d S )Nr   r   r   r   r2   r   r   ra   )rQ   author_nameprovider_namerR   rd   rS   rT   rU   AliceBobr   )rR   r   r   rQ   rd   rS   rT   rU   r   r   r+   r+   r,   test_embedly_return_value  sL   

"z%TestEmbedly.test_embedly_return_valueN)rD   rE   rF   unittest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      G dd d}| | _ d S )Nc                   @   r   )z'TestOembed.setUp.<locals>.DummyResponsec                 S      dS )Ns   foor+   rJ   r+   r+   r,   read     z,TestOembed.setUp.<locals>.DummyResponse.readNrD   rE   rF   r   r+   r+   r+   r,   DummyResponse  r   r   dummy_responser)   r   r+   r+   r,   rK     s   zTestOembed.setUpc                 C   s   |  tt jd d S )Nr2   )r   r   r   r   rJ   r+   r+   r,   test_oembed_invalid_provider  s   z'TestOembed.test_oembed_invalid_providerc                 C   sZ   dt di}tjtjdfi | | tt jd W d    d S 1 s&w   Y  d S )Nr   r2   urlopenhttp://www.youtube.com/watch/)	r   r   objecturllibrequestr   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   r   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   rR   rU   r   r2   )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)	rR   rW   rQ   r   r   rd   rS   rT   rU   r   rR   rQ   r   r   rd   rS   rT   rU   )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   z   | 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  
rR   rW   rQ   r   r   rd   rS   rT   rU   	cache_agerp   rb   rc   r   r#   hour	rR   rQ   r   r   rd   rS   rT   rU   rn   r   r   r
   rq   r   r   r%   r)   r   r   r   r   r+   r+   r,   test_oembed_cache_until
  6   z"TestOembed.test_oembed_cache_untilc                 C   r   )Nr   r   r   r   r   r   r   r   r   3600r   rp   rb   rc   r   r#   r   r   r   r   r+   r+   r,   !test_oembed_cache_until_as_string,  r   z,TestOembed.test_oembed_cache_until_as_stringc                 C   "   t tjgd}| |d d S N)	providersr   )r   r   youtuberg   acceptr)   r_   r+   r+   r,   "test_oembed_accepts_known_providerN     z-TestOembed.test_oembed_accepts_known_providerc                 C   r   r   )r   r   twitterrl   r  r  r+   r+   r,   *test_oembed_doesnt_accept_unknown_providerR  r  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 )	NrM   r   r   zhttps://vimeo.com/217403396rR   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)rD   rE   rF   rK   r   r   r   r   r   r   r   r   r  r  r  r+   r+   r+   r,   r     s2    	
r   c                   @   D   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   r   )Nc                   @   r   )z0TestInstagramOEmbed.setUp.<locals>.DummyResponsec                 S   r   )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+   rJ   r+   r+   r,   r   g  r   z5TestInstagramOEmbed.setUp.<locals>.DummyResponse.readNr   r+   r+   r+   r,   r   f  r   r   r   r   r+   r+   r,   rK   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   rg   r  rl   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r;   r<   $https://instagram.com/p/CHeRxmnDSYe/r   r   r   	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  ,   z7TestInstagramOEmbed.test_instagram_oembed_return_valuesc                 C   h   t dddi d d}d|i}tjtjdfi | | tt jd W d    d S 1 s-w   Y  d S )Nr  r   invalid credentialscodemsghdrsfpr   r   )	r   r   r   r   r   r   r   r   r   r)   errr   r+   r+   r,   !test_instagram_request_denied_401     "z5TestInstagramOEmbed.test_instagram_request_denied_401c                 C   sh   t dddi d d}d|i}tjtjdfi | | tt jd W d    d S 1 s-w   Y  d S )Nz#https://instagram.com/p/badrequest/r   	Not Foundr  r   r   r  )	r   r   r   r   r   r   r   r   r   r#  r+   r+   r,    test_instagram_request_not_found  r&  z4TestInstagramOEmbed.test_instagram_request_not_foundc                 C   \   dt ddi}tjtjdfi | | tt jd W d    d S 1 s'w   Y  d S )Nr   Testing error handlingreasonr   r  )	r   r   r   r   r   r   r   r   r   r   r+   r+   r,   test_instagram_failed_request     "z1TestInstagramOEmbed.test_instagram_failed_requestN)
rD   rE   rF   rK   r  r   r  r%  r(  r-  r+   r+   r+   r,   r  d  s    
r  c                   @   r  )TestFacebookOEmbedc                 C   r   )Nc                   @   r   )z/TestFacebookOEmbed.setUp.<locals>.DummyResponsec                 S   r   )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+   rJ   r+   r+   r,   r     r   z4TestFacebookOEmbed.setUp.<locals>.DummyResponse.readNr   r+   r+   r+   r,   r     r   r   r   r   r+   r+   r,   rK     s   zTestFacebookOEmbed.setUpc                 C   s*   t  }| |d | |d d S )Nz9https://www.facebook.com/testuser/posts/10157389310497085https://fb.watch/ABC123eew/)r   rg   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  r0  r   r   r   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  r  z5TestFacebookOEmbed.test_facebook_oembed_return_valuesc                 C   r  )Nr0  r   r  r  r   r   )	r   r   r   r   r   r   r   r   r   r#  r+   r+   r,    test_facebook_request_denied_401  r&  z3TestFacebookOEmbed.test_facebook_request_denied_401c                 C   r  )Nr0  r   r'  r  r   r   )	r   r   r   r   r   r   r   r   r   r#  r+   r+   r,   test_facebook_request_not_found  s   
"z2TestFacebookOEmbed.test_facebook_request_not_foundc                 C   r)  )Nr   r*  r+  r   r0  )	r   r   r   r   r   r   r   r   r   r   r+   r+   r,   test_facebook_failed_request  r.  z/TestFacebookOEmbed.test_facebook_failed_requestN)
rD   rE   rF   rK   r1  r   r3  r4  r5  r6  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   rU   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   r8  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:  ra   )r   r   r   r;  r<  r=  r%   r>  r+   r+   r,   test_catches_embed_not_found=  s   z)TestEmbedTag.test_catches_embed_not_foundN)rD   rE   rF   r   r9  r@  rA  r+   r+   r+   r,   r7  )  s    


r7  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/foora   N)r   	to_pythonr'   r   r%   rW   rm   )r)   block	block_valempty_block_valr+   r+   r,   test_deserializeJ  s   


zTestEmbedBlock.test_deserializec                 C   sB   t dd}td}||}| |d |d }| |d d S )NFrC  rE  ra   )r   r   get_prep_valuer%   )r)   rG  rH  serialized_val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>r8  rE  zembed: {{ embed }}rj   )
r   r   r   rF  r   r;  r=  r<  r   assert_any_callr)   r   rG  rH  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.
        rO  r8  rQ   rj   zA testrE  )rQ   rj   zembed: {{ self.embed }}r)   N)r   r   r   StructBlock	CharBlockr   rF  r   r;  r=  r<  r   rP  rQ  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
        FrC  myembedrE  )prefixra   N)r   value_from_datadictr'   r   r%   rW   rm   )r)   rG  rH  	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 )Nra   )defaultrE  )r   rm   get_defaultr'   r   r%   rW   )r)   block1block2block3block4block5r+   r+   r,   test_default  s   


zTestEmbedBlock.test_defaultc                 C   sv   t dd|_t }|td}| |t | |jd | t	d |d  W d    d S 1 s4w   Y  d S )NrO  r8  +https://www.youtube.com/watch?v=_U79Wc965vwra   )
r   r   r   cleanr   r'   r%   rW   assertRaisesMessager   r)   r   rG  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 )NrO  r8  FrC  rd  )	r   r   r   re  r   r'   r%   rW   rm   rg  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w   Y  t }| t |td W d    d S 1 s?w   Y  d S )NFrC  z#http://no-oembed-here.com/something)r   r   r   r   r   re  r   )r)   r   non_required_blockrequired_blockr+   r+   r,   test_clean_invalid_url  s   
"z%TestEmbedBlock.test_clean_invalid_urlN)rD   rE   rF   rJ  rN  r   rS  rV  r[  rc  ri  rj  rm  r+   r+   r+   r,   rB  I  s    




rB  )Drq   r   r   urllib.requestr   unittest.mockr   urllib.errorr   r   djangor   django.core.exceptionsr   django.testr   r   django.urlsr	   django.utils.timezoner
   r   wagtailr   wagtail.embedsr   wagtail.embeds.blocksr   r   wagtail.embeds.embedsr   r   wagtail.embeds.exceptionsr   r   wagtail.embeds.findersr   wagtail.embeds.finders.embedlyr   r   r   wagtail.embeds.finders.facebookr   r    wagtail.embeds.finders.instagramr   r   wagtail.embeds.finders.oembedr   wagtail.embeds.modelsr   .wagtail.embeds.templatetags.wagtailembeds_tagsr   wagtail.test.utilsr   embedlyr   ImportErrorr    rG   r   r   r   r   r  r/  r7  rB  r+   r+   r+   r,   <module>   s\    T 	.   lY 