o
    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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titleliveinstance)r
   objectsget	home_page	add_childmodelroutable_pageself r    c/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/contrib/routable_page/tests.pysetUp   s   zTestRoutablePage.setUpc                 C   >   | 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      z.TestRoutablePage.test_resolve_index_route_viewc                 C   r#   )Nz/archive/year/2014/2014)r   r%   r&   archive_by_yearr(   r    r    r!   !test_resolve_archive_by_year_view&   r-   z2TestRoutablePage.test_resolve_archive_by_year_viewc                 C   B   | 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-      
z4TestRoutablePage.test_resolve_archive_by_author_viewc                 C   r2   )Nz/archive/title/some-title/r    r   
some-title)r   r%   r&   archive_by_titler(   r    r    r!   "test_resolve_archive_by_title_view6   r7   z3TestRoutablePage.test_resolve_archive_by_title_viewc                 C   r2   )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?   r7   z6TestRoutablePage.test_resolve_archive_by_category_viewc                 C   r#   )Nz/external/joe-bloggs/r4   r   r%   r&   external_viewr(   r    r    r!   test_resolve_external_viewH   r-   z+TestRoutablePage.test_resolve_external_viewc                 C   r#   )Nz/external-no-arg/r    r@   r(   r    r    r!   &test_resolve_external_view_other_routeO   r-   z7TestRoutablePage.test_resolve_external_view_other_routec                 C      | j d}| |d d S )Nr'    r   reverse_subpager&   r   urlr    r    r!   test_reverse_index_route_viewV      z.TestRoutablePage.test_reverse_index_route_viewc                 C       | j jddd}| |d d S )Nr0   r.   r*   archive/year/2014/rF   rH   r    r    r!   !test_reverse_archive_by_year_view[      z2TestRoutablePage.test_reverse_archive_by_year_viewc                 C   $   | j jdddid}| |d d S )Nr5   r3   r4   r+   archive/author/joe-bloggs/rF   rH   r    r    r!   #test_reverse_archive_by_author_view`      z4TestRoutablePage.test_reverse_archive_by_author_viewc                 C   rQ   )Nr9   r   r8   rR   archive/title/some-title/rF   rH   r    r    r!   "test_reverse_archive_by_title_viewg   rU   z3TestRoutablePage.test_reverse_archive_by_title_viewc                 C   rD   )Nname_overriddenzoverride-name-test/rF   rH   r    r    r!   test_reverse_overridden_namen   rK   z-TestRoutablePage.test_reverse_overridden_namec                 C   s<   |  t | jd W d    d S 1 sw   Y  d S )Noverride_name_test)assertRaisesr   r   rG   r   r    r    r!   0test_reverse_overridden_name_default_doesnt_works   s   "zATestRoutablePage.test_reverse_overridden_name_default_doesnt_workc                 C   rL   )NrA   r?   rM   external/joe-bloggs/rF   rH   r    r    r!   test_reverse_external_vieww   rP   z+TestRoutablePage.test_reverse_external_viewc                 C   rD   )NrA   external-no-arg/rF   rH   r    r    r!   &test_reverse_external_view_other_route|   rK   z7TestRoutablePage.test_reverse_external_view_other_routec                 C   s   |  d3 | j| jj}|j}| |d |d |df| j| jd f | |d jjd W d    d S 1 s;w   Y  d S )N)routablepagetests/routable_page_test.htmlpager   foorequestr'   )	assertTemplateUsedclientr   r   rI   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   sp   |  d) | j| jjd }|j}| |d |d |d f| jd df W d    d S 1 s1w   Y  d S )Nra   zrender-method-test/rb   r   rc   barre   rf   r   r   rI   rg   r&   rj   r    r    r!   !test_get_render_method_route_view   s   
"z2TestRoutablePage.test_get_render_method_route_viewc                 C   sp   |  d) | j| jjd }|j}| |d |d |d f| jddf W d    d S 1 s1w   Y  d S )Nz3routablepagetests/routable_page_test_alternate.htmlz#render-method-test-custom-template/rb   r   rc      fightersro   rj   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/rd   render_method_test_with_argslugrc   )	rf   r   r   rI   rg   rh   r&   ri   r+   )r   rk   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   rf   r   rI   assertContainsassertNotContains)r   rb   rk   r    r    r!   2test_get_routable_page_with_overridden_index_route   s   zCTestRoutablePage.test_get_routable_page_with_overridden_index_routec                 C   $   | j | jjd }| |d d S )NrN   zARCHIVE BY YEAR: 2014rf   r   r   rI   rx   r   rk   r    r    r!   test_get_archive_by_year_view      z.TestRoutablePage.test_get_archive_by_year_viewc                 C   r{   )Nzarchive/year/1984/z#we were always at war with eastasiar|   r}   r    r    r!   "test_earlier_view_takes_precedence   r   z3TestRoutablePage.test_earlier_view_takes_precedencec                 C   r{   )NrS   zARCHIVE BY AUTHOR: joe-bloggsr|   r}   r    r    r!   test_get_archive_by_author_view      
z0TestRoutablePage.test_get_archive_by_author_viewc                 C   r{   )NrV   zARCHIVE BY TITLE: some-titler|   r}   r    r    r!   test_get_archive_by_title_view   r   z/TestRoutablePage.test_get_archive_by_title_viewc                 C   r{   )Nzarchive/category/some-category/z"ARCHIVE BY CATEGORY: some-categoryr|   r}   r    r    r!   !test_get_archive_by_category_view   r   z2TestRoutablePage.test_get_archive_by_category_viewc                 C   r{   )Nr]   zEXTERNAL VIEW: joe-bloggsr|   r}   r    r    r!   test_get_external_view   r   z'TestRoutablePage.test_get_external_viewc                 C   r{   )Nr_   zEXTERNAL VIEW: ARG NOT SETr|   r}   r    r    r!   "test_get_external_view_other_route   r   z3TestRoutablePage.test_get_external_view_other_routec                 C   s0   G dd d}z| t _t   W t `d S t `w )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 Nr   )r   r   r   r    r    r!   __set__   s   zkTestRoutablePage.test_routable_page_can_have_instance_bound_descriptors.<locals>.InstanceDescriptor.__set__r   )__name__
__module____qualname__r   r   r    r    r    r!   InstanceDescriptor   s    
r   )r   
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   sp   t ddd dd}tjddtdd	}tjjtd
|gd | t |g W d    d S 1 s1w   Y  d S )Nz^foo/$c                 S   s   d S r   r    )rd   r    r    r!   <lambda>   s    z?TestRoutablePage.test_warning_path_with_regex.<locals>.<lambda>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   )return_value)	r   r   Warningr   r   patchobjectr&   check)r   routewarningr    r    r!   test_warning_path_with_regex   s   "z-TestRoutablePage.test_warning_path_with_regexN)#r   r   r   r   r   r"   r,   r1   r6   r:   r>   rB   rC   rJ   rO   rT   rW   rY   r\   r^   r`   rm   rp   rs   rw   rz   r~   r   r   r   r   r   r   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   rd   )r
   r   r   r   r   r   r   r   rfrI   rd   rl   r   r    r    r!   r"      s   z!TestRoutablePageTemplateTag.setUpc                 C   (   t | j| jd}| |d| jj  d S Nr'   z/%s/r	   rl   r   r&   ru   rH   r    r    r!   $test_templatetag_reverse_index_route     z@TestRoutablePageTemplateTag.test_templatetag_reverse_index_routec                 C   *   t | j| jdd}| |d| jj  d S Nr0   r/   z/%s/archive/year/2014/r   rH   r    r    r!   -test_templatetag_reverse_archive_by_year_view     zITestRoutablePageTemplateTag.test_templatetag_reverse_archive_by_year_viewc                 C   ,   t | j| jddd}| |d| jj  d S Nr5   r4   r3   z/%s/archive/author/joe-bloggs/r   rH   r    r    r!   /test_templatetag_reverse_archive_by_author_view     zKTestRoutablePageTemplateTag.test_templatetag_reverse_archive_by_author_viewc                 C   r   Nr9   r8   r   z/%s/archive/title/some-title/r   rH   r    r    r!   .test_templatetag_reverse_archive_by_title_view#     zJTestRoutablePageTemplateTag.test_templatetag_reverse_archive_by_title_viewc                 C   r   Nr=   r<   r;   z#/%s/archive/category/some-category/r   rH   r    r    r!   1test_templatetag_reverse_archive_by_category_view*  r   zMTestRoutablePageTemplateTag.test_templatetag_reverse_archive_by_category_viewc                 C   r   NrA   r4   z/%s/external/joe-bloggs/r   rH   r    r    r!   &test_templatetag_reverse_external_view6  r   zBTestRoutablePageTemplateTag.test_templatetag_reverse_external_viewc                 C   b   t dd t| j| jdd}d| jj d d }W d    n1 s$w   Y  | || d S N#wagtail.models.WAGTAIL_APPEND_SLASHFrA   r4   r$   r]   r   r   r	   rl   r   ru   r&   r   rI   expectedr    r    r!   ;test_templatetag_reverse_external_view_without_append_slash=     zWTestRoutablePageTemplateTag.test_templatetag_reverse_external_view_without_append_slashN)r   r   r   r"   r   r   r   r   r   r   r   r    r    r    r!   r      s    r   )
testserver	localhostdevelopment.local)ALLOWED_HOSTSc                   @   P   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)is_default_siter   )hostnameportroot_page_idr   r   r   r   r   rd   	HTTP_HOSTSERVER_PORT)r   r   r   creater   r   r
   r   r   r   r   r   r   rI   rd   rl   r   META)r   default_sitesecond_siter    r    r!   r"   N  s$   z8TestRoutablePageTemplateTagForSecondSiteAtSameRoot.setUpc                 C   r   r   r   rH   r    r    r!   r   d  r   zWTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_index_routec                 C   r   r   r   rH   r    r    r!   r   h  r   z`TestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_archive_by_year_viewc                 C   r   r   r   rH   r    r    r!   r   o  r   zbTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_archive_by_author_viewc                 C   r   r   r   rH   r    r    r!   r   {  r   zaTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_archive_by_title_viewc                 C   r   r   r   rH   r    r    r!   r     r   zdTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_archive_by_category_viewc                 C   r   r   r   rH   r    r    r!   r     r   zYTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_external_viewc                 C   r   r   r   r   r    r    r!   r     r   znTestRoutablePageTemplateTagForSecondSiteAtSameRoot.test_templatetag_reverse_external_view_without_append_slashNr   r   r   __doc__r"   r   r   r   r   r   r   r   r    r    r    r!   r   G  s    r   )r   r   events.localc                   @   r   )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   EventsTr   r   r   P   )r   r   	root_pager   rd   r   r   )r
   r   r   r   r   r   r   r   r   r   r   rI   rd   rl   r   r   r   )r   events_pager   r    r    r!   r"     s$   z=TestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.setUpc                 C   r   )Nr'   zhttp://localhost/%s/r   rH   r    r    r!   r     r   z\TestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_index_routec                 C   r   )Nr0   r/   z&http://localhost/%s/archive/year/2014/r   rH   r    r    r!   r        zeTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_archive_by_year_viewc                 C   r   )Nr5   r4   r   z.http://localhost/%s/archive/author/joe-bloggs/r   rH   r    r    r!   r     s   
zgTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_archive_by_author_viewc                 C   r   )Nr9   r8   r   z-http://localhost/%s/archive/title/some-title/r   rH   r    r    r!   r     s   
zfTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_archive_by_title_viewc                 C   r   )Nr=   r<   r   z3http://localhost/%s/archive/category/some-category/r   rH   r    r    r!   r     s   ziTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_archive_by_category_viewc                 C   r   )NrA   r4   z(http://localhost/%s/external/joe-bloggs/r   rH   r    r    r!   r     r   z^TestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_external_viewc                 C   sb   t dd t| j| jdd}d| jj d d }W d    n1 s$w   Y  | || d S )Nr   FrA   r4   zhttp://localhost/r$   r]   r   r   r    r    r!   r     s   zsTestRoutablePageTemplateTagForSecondSiteAtDifferentRoot.test_templatetag_reverse_external_view_without_append_slashNr   r    r    r    r!   r     s    	
	r   N)unittestr   django.corer   django.testr   r   django.test.utilsr   django.urlsr   django.urls.exceptionsr   Cwagtail.contrib.routable_page.templatetags.wagtailroutablepage_tagsr	   wagtail.modelsr
   r    wagtail.test.routablepage.modelsr   r   r   r   r   r   r    r    r    r!   <module>   s      lIW