a
    DgwI                     @   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g ddG dd deZeg d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titleZliveinstance)r
   objectsget	home_page	add_childmodelroutable_pageself r   b/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/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/r0   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/r@   rB   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 )Nr1   r/   r0   r)   archive/author/joe-bloggs/r@   rB   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 )Nr4   r   r3   rH   archive/title/some-title/r@   rB   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/r@   rB   r   r   r    test_reverse_overridden_namen   s    z-TestRoutablePage.test_reverse_overridden_namec                 C   s:   |  t | jd W d    n1 s,0    Y  d S )NZoverride_name_test)assertRaisesr   r   rA   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:   rE   external/joe-bloggs/r@   rB   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/r@   rB   r   r   r    &test_reverse_external_view_other_route|   s    z7TestRoutablePage.test_reverse_external_view_other_routec                 C   s   |  dd | j| jj}|j}| |d |d |df| j| jd f | |d jjd W d    n1 st0    Y  d S )N)routablepagetests/routable_page_test.htmlpager   foorequestr%   )	assertTemplateUsedclientr   r   rC   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   sn   |  dP | j| jjd }|j}| |d |d |d f| jd df W d    n1 s`0    Y  d S )NrT   zrender-method-test/rU   r   rV   barrX   rY   r   r   rC   rZ   r$   r]   r   r   r    !test_get_render_method_route_view   s    
z2TestRoutablePage.test_get_render_method_route_viewc                 C   sn   |  dP | j| jjd }|j}| |d |d |d f| jddf W d    n1 s`0    Y  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   rC   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   rC   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 )NrF   zARCHIVE BY YEAR: 2014rY   r   r   rC   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 )NrI   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 )NrK   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   s2   G dd d}z| t _t   W t `nt `0 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 u 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   sn   t ddd dd}tjddtdd	}tjjtd
|gd" | t |g W d    n1 s`0    Y  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.   r2   r5   r9   r=   r>   rD   rG   rJ   rL   rM   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   rfrC   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   rB   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   rB   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 Nr1   r0   r/   z/%s/archive/author/joe-bloggs/r   rB   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 Nr4   r3   r   z/%s/archive/title/some-title/r   rB   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 Nr8   r7   r6   z#/%s/archive/category/some-category/r   rB   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<   r0   z/%s/external/joe-bloggs/r   rB   r   r   r    &test_templatetag_reverse_external_view6  s    zBTestRoutablePageTemplateTag.test_templatetag_reverse_external_viewc                 C   sb   t dd6 t| j| jdd}d| jj d d }W d    n1 sH0    Y  | || d S N#wagtail.models.WAGTAIL_APPEND_SLASHFr<   r0   r"   rP   r   r   r	   r_   r   rf   r$   r   rC   expectedr   r   r    ;test_templatetag_reverse_external_view_without_append_slash=  s    2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   )
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   rC   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   rB   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   rB   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   rB   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   rB   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   rB   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   rB   r   r   r    r     s    zYTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_external_viewc                 C   sb   t dd6 t| j| jdd}d| jj d d }W d    n1 sH0    Y  | || d S r   r   r   r   r   r    r     s    2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   )r   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   rC   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   rB   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   rB   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 )Nr1   r0   r   z.http://localhost/%s/archive/author/joe-bloggs/r   rB   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 )Nr4   r3   r   z-http://localhost/%s/archive/title/some-title/r   rB   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 )Nr8   r7   r   z3http://localhost/%s/archive/category/some-category/r   rB   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<   r0   z(http://localhost/%s/external/joe-bloggs/r   rB   r   r   r    r     s    z^TestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_external_viewc                 C   sb   t dd6 t| j| jdd}d| jj d d }W d    n1 sH0    Y  | || d S )Nr   Fr<   r0   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