U
    {hwI                     @   s   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mZ d d	lmZmZ G d
d deZG dd deZedddgdG dd deZedddgdG dd deZdS )    )mock)checks)RequestFactoryTestCase)override_settings)path)NoReverseMatch)routablepageurl)PageSite)RoutablePageTest(RoutablePageWithOverriddenIndexRouteTestc                   @   s   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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"d=S )>TestRoutablePagec                 C   s.   t jjdd| _| jj| jdddd| _d S )N   idRoutable PageTtitleliveinstance)r
   objectsget	home_page	add_childmodelroutable_pageself r    k/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/contrib/routable_page/tests.pysetUp   s    zTestRoutablePage.setUpc                 C   s>   | j d\}}}| || j j | |d | |i  d S )N/r    )r   resolve_subpageassertEqualindex_router   viewargskwargsr    r    r!   test_resolve_index_route_view   s    z.TestRoutablePage.test_resolve_index_route_viewc                 C   s>   | j d\}}}| || j j | |d | |i  d S )Nz/archive/year/2014/2014)r   r$   r%   archive_by_yearr'   r    r    r!   !test_resolve_archive_by_year_view&   s    z2TestRoutablePage.test_resolve_archive_by_year_viewc                 C   sB   | j d\}}}| || j j | |d | |ddi d S )Nz/archive/author/joe-bloggs/r    author_slug
joe-bloggs)r   r$   r%   archive_by_authorr'   r    r    r!   #test_resolve_archive_by_author_view-   s    
z4TestRoutablePage.test_resolve_archive_by_author_viewc                 C   sB   | j d\}}}| || j j | |d | |ddi d S )Nz/archive/title/some-title/r    r   
some-title)r   r$   r%   archive_by_titler'   r    r    r!   "test_resolve_archive_by_title_view6   s    
z3TestRoutablePage.test_resolve_archive_by_title_viewc                 C   sB   | j d\}}}| || j j | |d | |ddi d S )Nz /archive/category/some-category/r    category_slugsome-category)r   r$   r%   archive_by_categoryr'   r    r    r!   %test_resolve_archive_by_category_view?   s    
z6TestRoutablePage.test_resolve_archive_by_category_viewc                 C   s>   | j d\}}}| || j j | |d | |i  d S )Nz/external/joe-bloggs/r1   r   r$   r%   external_viewr'   r    r    r!   test_resolve_external_viewH   s    z+TestRoutablePage.test_resolve_external_viewc                 C   s>   | j d\}}}| || j j | |d | |i  d S )Nz/external-no-arg/r    r<   r'   r    r    r!   &test_resolve_external_view_other_routeO   s    z7TestRoutablePage.test_resolve_external_view_other_routec                 C   s   | j d}| |d d S )Nr&    r   reverse_subpager%   r   urlr    r    r!   test_reverse_index_route_viewV   s    z.TestRoutablePage.test_reverse_index_route_viewc                 C   s    | j jddd}| |d d S )Nr.   r,   r)   archive/year/2014/rA   rC   r    r    r!   !test_reverse_archive_by_year_view[   s    z2TestRoutablePage.test_reverse_archive_by_year_viewc                 C   s$   | j jdddid}| |d d S )Nr2   r0   r1   r*   archive/author/joe-bloggs/rA   rC   r    r    r!   #test_reverse_archive_by_author_view`   s
     z4TestRoutablePage.test_reverse_archive_by_author_viewc                 C   s$   | j jdddid}| |d d S )Nr5   r   r4   rI   archive/title/some-title/rA   rC   r    r    r!   "test_reverse_archive_by_title_viewg   s
     z3TestRoutablePage.test_reverse_archive_by_title_viewc                 C   s   | j d}| |d d S )NZname_overriddenzoverride-name-test/rA   rC   r    r    r!   test_reverse_overridden_namen   s    z-TestRoutablePage.test_reverse_overridden_namec              	   C   s&   |  t | jd W 5 Q R X d S )NZoverride_name_test)ZassertRaisesr   r   rB   r   r    r    r!   0test_reverse_overridden_name_default_doesnt_works   s    zATestRoutablePage.test_reverse_overridden_name_default_doesnt_workc                 C   s    | j jddd}| |d d S )Nr=   r;   rF   external/joe-bloggs/rA   rC   r    r    r!   test_reverse_external_vieww   s    z+TestRoutablePage.test_reverse_external_viewc                 C   s   | j d}| |d d S )Nr=   external-no-arg/rA   rC   r    r    r!   &test_reverse_external_view_other_route|   s    z7TestRoutablePage.test_reverse_external_view_other_routec              	   C   sn   |  dZ | j| jj}|j}| |d |d |df| j| jd f | |d jjd W 5 Q R X d S )N)routablepagetests/routable_page_test.htmlpager   foorequestr&   )	assertTemplateUsedclientr   r   rD   context_datar%   routable_resolver_matchurl_namer   responsecontextr    r    r!   test_get_index_route_view   s    
 z*TestRoutablePage.test_get_index_route_viewc              	   C   sZ   |  dF | j| jjd }|j}| |d |d |d f| jd df W 5 Q R X d S )NrT   zrender-method-test/rU   r   rV   barrX   rY   r   r   rD   rZ   r%   r]   r    r    r!   !test_get_render_method_route_view   s    
z2TestRoutablePage.test_get_render_method_route_viewc              	   C   sZ   |  dF | j| jjd }|j}| |d |d |d f| jddf W 5 Q R X d S )Nz3routablepagetests/routable_page_test_alternate.htmlz#render-method-test-custom-template/rU   r   rV      Zfightersrb   r]   r    r    r!   6test_get_render_method_route_view_with_custom_template   s    

zGTestRoutablePage.test_get_render_method_route_view_with_custom_templatec                 C   sD   | j | jjd }|jd j}| |jd | |jddi d S )Nzrender-method-with-arg/foo/rW   Zrender_method_test_with_argslugrV   )	rY   r   r   rD   rZ   r[   r%   r\   r*   )r   r^   Zresolver_matchr    r    r!   *test_get_render_method_route_view_with_arg   s    
z;TestRoutablePage.test_get_render_method_route_view_with_argc                 C   s@   | j jtdddd}| j|j}| |d | |d d S )Nz#Routable Page with overridden indexTr   r   zOVERRIDDEN INDEX ROUTEzDEFAULT PAGE TEMPLATE)r   r   r   rY   r   rD   assertContainsZassertNotContains)r   rU   r^   r    r    r!   2test_get_routable_page_with_overridden_index_route   s     zCTestRoutablePage.test_get_routable_page_with_overridden_index_routec                 C   s$   | j | jjd }| |d d S )NrG   zARCHIVE BY YEAR: 2014rY   r   r   rD   rh   r   r^   r    r    r!   test_get_archive_by_year_view   s    z.TestRoutablePage.test_get_archive_by_year_viewc                 C   s$   | j | jjd }| |d d S )Nzarchive/year/1984/z#we were always at war with eastasiarj   rk   r    r    r!   "test_earlier_view_takes_precedence   s    z3TestRoutablePage.test_earlier_view_takes_precedencec                 C   s$   | j | jjd }| |d d S )NrJ   zARCHIVE BY AUTHOR: joe-bloggsrj   rk   r    r    r!   test_get_archive_by_author_view   s    
z0TestRoutablePage.test_get_archive_by_author_viewc                 C   s$   | j | jjd }| |d d S )NrL   zARCHIVE BY TITLE: some-titlerj   rk   r    r    r!   test_get_archive_by_title_view   s    z/TestRoutablePage.test_get_archive_by_title_viewc                 C   s$   | j | jjd }| |d d S )Nzarchive/category/some-category/z"ARCHIVE BY CATEGORY: some-categoryrj   rk   r    r    r!   !test_get_archive_by_category_view   s    
z2TestRoutablePage.test_get_archive_by_category_viewc                 C   s$   | j | jjd }| |d d S )NrP   zEXTERNAL VIEW: joe-bloggsrj   rk   r    r    r!   test_get_external_view   s    z'TestRoutablePage.test_get_external_viewc                 C   s$   | j | jjd }| |d d S )NrR   zEXTERNAL VIEW: ARG NOT SETrj   rk   r    r    r!   "test_get_external_view_other_route   s    z3TestRoutablePage.test_get_external_view_other_routec                 C   s.   G dd d}z| t _t   W 5 t `X d S )Nc                   @   s   e Zd ZdddZdd ZdS )zcTestRoutablePage.test_routable_page_can_have_instance_bound_descriptors.<locals>.InstanceDescriptorNc                 S   s   |d krt dS )NvalueAttributeError)r   r   clsr    r    r!   __get__   s    zkTestRoutablePage.test_routable_page_can_have_instance_bound_descriptors.<locals>.InstanceDescriptor.__get__c                 S   s   t d S Nrt   )r   r   rs   r    r    r!   __set__   s    zkTestRoutablePage.test_routable_page_can_have_instance_bound_descriptors.<locals>.InstanceDescriptor.__set__)N)__name__
__module____qualname__rw   ry   r    r    r    r!   InstanceDescriptor   s   
r}   )r   Z
descriptorget_subpage_urls)r   r}   r    r    r!   6test_routable_page_can_have_instance_bound_descriptors   s
    	zGTestRoutablePage.test_routable_page_can_have_instance_bound_descriptorsc              	   C   sZ   t ddd dd}tjddtdd	}tjjtd
|gd | t |g W 5 Q R X d S )Nz^foo/$c                 S   s   d S rx   r    )rW   r    r    r!   <lambda>       z?TestRoutablePage.test_warning_path_with_regex.<locals>.<lambda>Zpath_with_regex)nameziYour URL pattern path_with_regex has a route that contains '(?P<', begins with a '^', or ends with a '$'.z:Decorate your view with re_path if you want to use regexp.zwagtailroutablepage.W001)hintobjr   r~   )Zreturn_value)	r   r   Warningr   r   patchobjectr%   check)r   Zroutewarningr    r    r!   test_warning_path_with_regex   s      z-TestRoutablePage.test_warning_path_with_regexN)#rz   r{   r|   r   r   r"   r+   r/   r3   r6   r:   r>   r?   rE   rH   rK   rM   rN   rO   rQ   rS   r`   rc   re   rg   ri   rl   rm   rn   ro   rp   rq   rr   r   r   r    r    r    r!   r      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 )TestRoutablePageTemplateTagc                 C   sR   t jjdd| _| jjtdddd| _t | _| j| jj	| _
d| j
i| _d S )Nr   r   r   Tr   r   rW   )r
   r   r   r   r   r   r   r   rfrD   rW   r_   r   r    r    r!   r"      s    z!TestRoutablePageTemplateTag.setUpc                 C   s(   t | j| jd}| |d| jj  d S Nr&   z/%s/r	   r_   r   r%   rf   rC   r    r    r!   $test_templatetag_reverse_index_route  s    z@TestRoutablePageTemplateTag.test_templatetag_reverse_index_routec                 C   s*   t | j| jdd}| |d| jj  d S Nr.   r-   z/%s/archive/year/2014/r   rC   r    r    r!   -test_templatetag_reverse_archive_by_year_view  s       zITestRoutablePageTemplateTag.test_templatetag_reverse_archive_by_year_viewc                 C   s,   t | j| jddd}| |d| jj  d S Nr2   r1   r0   z/%s/archive/author/joe-bloggs/r   rC   r    r    r!   /test_templatetag_reverse_archive_by_author_view  s     
zKTestRoutablePageTemplateTag.test_templatetag_reverse_archive_by_author_viewc                 C   s,   t | j| jddd}| |d| jj  d S Nr5   r4   r   z/%s/archive/title/some-title/r   rC   r    r    r!   .test_templatetag_reverse_archive_by_title_view#  s       zJTestRoutablePageTemplateTag.test_templatetag_reverse_archive_by_title_viewc                 C   s,   t | j| jddd}| |d| jj  d S Nr9   r8   r7   z#/%s/archive/category/some-category/r   rC   r    r    r!   1test_templatetag_reverse_archive_by_category_view*  s     
zMTestRoutablePageTemplateTag.test_templatetag_reverse_archive_by_category_viewc                 C   s*   t | j| jdd}| |d| jj  d S Nr=   r1   z/%s/external/joe-bloggs/r   rC   r    r    r!   &test_templatetag_reverse_external_view6  s       zBTestRoutablePageTemplateTag.test_templatetag_reverse_external_viewc              	   C   sN   t dd, t| j| jdd}d| jj d d }W 5 Q R X | || d S N#wagtail.models.WAGTAIL_APPEND_SLASHFr=   r1   r#   rP   r   r   r	   r_   r   rf   r%   r   rD   expectedr    r    r!   ;test_templatetag_reverse_external_view_without_append_slash=  s       zWTestRoutablePageTemplateTag.test_templatetag_reverse_external_view_without_append_slashN)rz   r{   r|   r"   r   r   r   r   r   r   r   r    r    r    r!   r      s   r   Z
testserver	localhostdevelopment.local)ZALLOWED_HOSTSc                   @   sP   e Zd 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 )2TestRoutablePageTemplateTagForSecondSiteAtSameRootz
    When multiple sites exist on the same root page, relative URLs within that subtree should
    omit the domain, in line with #4390
    c                 C   s   t jjdd}t jjd|j|jd}tjjdd| _| jjt	dddd	| _
t | _| j| j
j| _d
| ji| _|j| jjd< |j| jjd< d S )NT)Zis_default_siter   )hostnameportroot_page_idr   r   r   r   r   rW   	HTTP_HOSTSERVER_PORT)r   r   r   creater   r   r
   r   r   r   r   r   r   rD   rW   r_   r   META)r   Zdefault_sitesecond_siter    r    r!   r"   N  s$    z8TestRoutablePageTemplateTagForSecondSiteAtSameRoot.setUpc                 C   s(   t | j| jd}| |d| jj  d S r   r   rC   r    r    r!   r   d  s    zWTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_index_routec                 C   s*   t | j| jdd}| |d| jj  d S r   r   rC   r    r    r!   r   h  s       z`TestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_archive_by_year_viewc                 C   s,   t | j| jddd}| |d| jj  d S r   r   rC   r    r    r!   r   o  s     
zbTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_archive_by_author_viewc                 C   s,   t | j| jddd}| |d| jj  d S r   r   rC   r    r    r!   r   {  s       zaTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_archive_by_title_viewc                 C   s,   t | j| jddd}| |d| jj  d S r   r   rC   r    r    r!   r     s     
zdTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_archive_by_category_viewc                 C   s*   t | j| jdd}| |d| jj  d S r   r   rC   r    r    r!   r     s       zYTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_external_viewc              	   C   sN   t dd, t| j| jdd}d| jj d d }W 5 Q R X | || d S r   r   r   r    r    r!   r     s       znTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_external_view_without_append_slashNrz   r{   r|   __doc__r"   r   r   r   r   r   r   r   r    r    r    r!   r   G  s   r   events.localc                   @   sP   e Zd 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 )7TestRoutablePageTemplateTagForSecondSiteAtDifferentRootzg
    When multiple sites exist, relative URLs between such sites should include the domain portion
    c                 C   s   t jjdd| _| jjt dddd}tjjdd|d	}| jjtd
ddd| _t	 | _
| j
| jj| _d| ji| _|j| jjd< |j| jjd< d S )Nr   r   ZEventsTr   r   r   P   )r   r   Z	root_pager   rW   r   r   )r
   r   r   r   r   r   r   r   r   r   r   rD   rW   r_   r   r   r   )r   Zevents_pager   r    r    r!   r"     s$    z=TestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.setUpc                 C   s(   t | j| jd}| |d| jj  d S )Nr&   zhttp://localhost/%s/r   rC   r    r    r!   r     s    z\TestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_index_routec                 C   s*   t | j| jdd}| |d| jj  d S )Nr.   r-   z&http://localhost/%s/archive/year/2014/r   rC   r    r    r!   r     s        
zeTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_archive_by_year_viewc                 C   s,   t | j| jddd}| |d| jj  d S )Nr2   r1   r   z.http://localhost/%s/archive/author/joe-bloggs/r   rC   r    r    r!   r     s    
zgTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_archive_by_author_viewc                 C   s,   t | j| jddd}| |d| jj  d S )Nr5   r4   r   z-http://localhost/%s/archive/title/some-title/r   rC   r    r    r!   r     s       
zfTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_archive_by_title_viewc                 C   s,   t | j| jddd}| |d| jj  d S )Nr9   r8   r   z3http://localhost/%s/archive/category/some-category/r   rC   r    r    r!   r     s    ziTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_archive_by_category_viewc                 C   s*   t | j| jdd}| |d| jj  d S )Nr=   r1   z(http://localhost/%s/external/joe-bloggs/r   rC   r    r    r!   r     s        
z^TestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_external_viewc              	   C   sN   t dd, t| j| jdd}d| jj d d }W 5 Q R X | || d S )Nr   Fr=   r1   zhttp://localhost/r#   rP   r   r   r    r    r!   r     s        zsTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_external_view_without_append_slashNr   r    r    r    r!   r     s   	
	r   N)Zunittestr   Zdjango.corer   Zdjango.testr   r   Zdjango.test.utilsr   Zdjango.urlsr   Zdjango.urls.exceptionsr   ZCwagtail.contrib.routable_page.templatetags.wagtailroutablepage_tagsr	   Zwagtail.modelsr
   r   Z wagtail.test.routablepage.modelsr   r   r   r   r   r   r    r    r    r!   <module>   s    lIW