o
    ~¨Êh‘  ã                   @   sˆ   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
mZmZ d dlmZ d dlmZmZ d d	lmZ G d
d„ deƒZdS )é    )ÚStringIO)ÚSESSION_KEY©ÚAnonymousUser)ÚSite)ÚSimpleCookie)ÚRequestFactoryÚTestCase)Ú	force_str)ÚRuleÚUrl)ÚRuleListc                       s^   e Zd Ze‡ fdd„ƒZddd„Z‡ fdd„Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Z‡  ZS )ÚViewTestc                    s   t ƒ  ¡  tƒ | _d S )N)ÚsuperÚ
setUpClassr   Úrequest_factory)Úcls©Ú	__class__© ú>/var/www/html/env/lib/python3.10/site-packages/robots/tests.pyr      s   
zViewTest.setUpClassFc                 C   s”   ddl m} | jj||d�}|s|ƒ }||_||_i |_|r(d|jd< d|jd< |jr5|j	j
 |¡|jt< tƒ |_tƒ |_||_|jdkrHd	|_|S )
Nr   r   )ÚsecureÚ443ÚSERVER_PORTÚhttpszwsgi.url_schemeÚPOSTT)Údjango.contrib.auth.modelsr   r   ÚgetÚuserÚ_cached_userÚsessionÚenvironÚis_authenticatedÚ_metaÚpkÚvalue_to_stringr   r   Úcookiesr   ÚerrorsÚLANGUAGE_CODEÚmethodÚ_dont_enforce_csrf_checks)ÚselfÚpathr   Úlangr   r   Úrequestr   r   r   Úget_request   s$   


zViewTest.get_requestc                    sþ   t ƒ  ¡  tjjdd�}tjjdd�}tjjdd�}tjjdd�}tjjdd�}tjjdd	d
�}tjjddd
�}tjjdd�}|j 	|¡ ||fD ]}	|j
 	|	¡ qI||fD ]}
|j 	|
¡ qV|j 	|¡ |j
 	|¡ |j 	|¡ |j
 	|¡ |j 	|¡ d S )Nzexample.com)Údomainzhttps://sub.example.comz/admin)Úpatternú/z/mediaÚ*é
   )ÚrobotÚcrawl_delayÚBingé   Ú	Googlebot©r5   )r   ÚsetUpr   Úobjectsr   Úcreater   r   ÚallowedÚaddÚ
disallowedÚsites)r+   Úsite_1Úsite_2Ú	url_adminÚurl_rootÚ	url_mediaÚrule_allÚrule_1Úrule_2ÚurlÚsiter   r   r   r;   *   s&   
zViewTest.setUpc                 C   s  |D ]|}|  d¡r&|  d|v ¡ |  d|v ¡ |  d|v ¡ |  d|v ¡ q|  d¡rO|  d|v ¡ |  d|v ¡ |  d|v ¡ |  d|v ¡ |  d|v ¡ q|  d¡r~|  d|v ¡ |  d|v ¡ |  d|v ¡ |  d|v ¡ |  d|v ¡ |  d	|v ¡ qd S )
NzUser-agent: *zAllow: /zDisallow: /adminzDisallow: /mediazCrawl-delay: 10zUser-agent: BingzCrawl-delay: 20zUser-agent: GooglebotzCrawl-delay)Ú
startswithÚ
assertTrueÚassertFalse)r+   ÚstanzasÚstanzar   r   r   Ú_test_stanzasD   s*   


€îzViewTest._test_stanzasc                 C   sÌ   | j dtƒ dd�}tƒ }||_| |¡|_| ¡ |_|j|jd�}|  	|d  
¡ d¡ |  |d jdd� ¡ ¡ |  |d jd	d� ¡ ¡ | |¡}| ¡  t|jƒ}|  d
|v ¡ | d¡}|  |¡ d S )Nr2   Úen©r,   r   r-   ©Úobject_listrU   é   r3   r:   r7   ú'Sitemap: http://example.com/sitemap.xmlú

)r/   r   r   r.   Úget_current_siteÚcurrent_siteÚget_querysetrU   Úget_context_dataÚassertEqualÚcountrM   ÚfilterÚexistsÚrender_to_responseÚrenderr
   ÚcontentÚsplitrQ   ©r+   r.   Úview_objÚcontextÚresponserc   rO   r   r   r   Útest_view_site_1Y   s   



zViewTest.test_view_site_1c                 C   sÞ   | j dtƒ dd�}tƒ }||_tjjdd�|_| ¡ |_	|j
|j	d�}|  |d  ¡ d¡ |  |d jdd	� ¡ ¡ |  |d jd
d	� ¡ ¡ | |¡}| ¡  t|jƒ}|  d|v ¡ |  d|v ¡ | d¡}|  |¡ d S )Nr2   rR   rS   rV   ©r$   rT   rU   r3   r:   r9   z,Sitemap: https://sub.example.com/sitemap.xmlzHost: https://sub.example.comrX   )r/   r   r   r.   r   r<   r   rZ   r[   rU   r\   r]   r^   rM   r_   r`   ra   rb   r
   rc   rd   rQ   re   r   r   r   Útest_view_site_2l   s    



zViewTest.test_view_site_2c              	   C   s–  | j dtƒ dd�}tƒ }||_tjjdd�|_| ¡ |_	| j
dd��l | j
dd��$ |j|j	d	�}| |¡}| ¡  t|jƒ}|  d
|v ¡ W d   ƒ n1 sPw   Y  | j
dd��$ |j|j	d	�}| |¡}| ¡  t|jƒ}|  d|v ¡ W d   ƒ n1 s‚w   Y  W d   ƒ n1 s‘w   Y  | j
dd��% |j|j	d	�}| |¡}| ¡  t|jƒ}|  d|v ¡ W d   ƒ d S 1 sÄw   Y  d S )Nr2   rR   rS   é   rj   T)ÚROBOTS_USE_HOST)ÚROBOTS_USE_SCHEME_IN_HOSTrT   zHost: http://example.comFzHost: example.com)r/   r   r   r.   r   r<   r   rZ   r[   rU   Úsettingsr\   ra   rb   r
   rc   rM   rN   ©r+   r.   rf   rg   rh   rc   r   r   r   Útest_use_scheme_in_host_setting€   s:   


û

û€ù

"ûz(ViewTest.test_use_scheme_in_host_settingc                 C   sÚ   | j dtƒ dd�}tƒ }||_tjjdd�|_| ¡ |_	|j
|j	d�}| |¡}| ¡  t|jƒ}|  d|v ¡ | jdd	��% |j
|j	d�}| |¡}| ¡  t|jƒ}|  d
|v ¡ W d   ƒ d S 1 sfw   Y  d S )Nr2   rR   rS   rl   rj   rT   rW   zcached-sitemap)ÚROBOTS_SITEMAP_VIEW_NAMEz-Sitemap: http://example.com/other/sitemap.xml)r/   r   r   r.   r   r<   r   rZ   r[   rU   r\   ra   rb   r
   rc   rM   ro   rp   r   r   r   Útest_cached_sitemap�   s"   




"ûzViewTest.test_cached_sitemap)F)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r/   r;   rQ   ri   rk   rq   rs   Ú__classcell__r   r   r   r   r      s    
r   N)Úior   Údjango.contrib.authr   r   r   Údjango.contrib.sites.modelsr   Údjango.httpr   Údjango.testr   r	   Údjango.utils.encodingr
   Úrobots.modelsr   r   Úrobots.viewsr   r   r   r   r   r   Ú<module>   s    