o
    h4                     @   s   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 d dlmZmZ d d	lmZ d
d ZG dd deeZG dd deeZdS )    )mock)SessionMiddlewareHttpResponse)RequestFactoryTestCase)hooks)PagePageViewRestriction)WagtailTestUtils)serveserve_chain)check_view_restrictionsc                   C      d S N r   r   r   X/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/tests/test_hooks.py	test_hook      r   c                   @   s:   e Zd ZdgZedd Zedd Zdd Zdd	 Zd
S )TestLoginView	test.jsonc                 C   s   t dt d S Ntest_hook_name)r   registerr   clsr   r   r   
setUpClass   s   zTestLoginView.setUpClassc                 C   s   t jd= d S r   )r   _hooksr   r   r   r   tearDownClass   s   zTestLoginView.tearDownClassc                 C   sX   dd }| j d|dd td}| ||tg W d    d S 1 s%w   Y  d S )Nc                   S   r   r   r   r   r   r   r   before_hook   r   z3TestLoginView.test_before_hook.<locals>.before_hookr   orderregister_hookr   	get_hooksassertEqualr   )selfr   hook_fnsr   r   r   test_before_hook   
   
"zTestLoginView.test_before_hookc                 C   sX   dd }| j d|dd td}| |t|g W d    d S 1 s%w   Y  d S )Nc                   S   r   r   r   r   r   r   r   
after_hook&   r   z1TestLoginView.test_after_hook.<locals>.after_hookr      r!   r#   )r'   r+   r(   r   r   r   test_after_hook%   r*   zTestLoginView.test_after_hookN)	__name__
__module____qualname__fixturesclassmethodr   r   r)   r-   r   r   r   r   r      s    

r   c                   @   sJ   e Zd ZdgZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )TestServeHooksr   c                 C   sF   t jjdd| _t d| _tdd }|| j | jj	  d S )N   )idz/test/c                 S   r   r   r   )xr   r   r   <lambda>4   s    z&TestServeHooks.setUp.<locals>.<lambda>)
r	   objectsgetpager   requestr   process_requestsessionsave)r'   
middlewarer   r   r   setUp1   s
   zTestServeHooks.setUpc              
      s   g   fdd} fdd} fdd}|  d|M |  d|. |  d| t| j| jj |  g d W d    n1 sCw   Y  W d    n1 sRw   Y  W d    d S W d    d S 1 sjw   Y  d S )	Nc                        fdd}|S )Nc                    "    d  | |g|R i |S Nr,   appendr:   r;   argskwargsnext_fnorder_callsr   r   wrapper<      
zFTestServeHooks.test_serve_chain_order.<locals>.hook_1.<locals>.wrapperr   rJ   rL   rK   rJ   r   hook_1;      z5TestServeHooks.test_serve_chain_order.<locals>.hook_1c                    rA   )Nc                    rB   Nr4   rD   rF   rI   r   r   rL   C   rM   zFTestServeHooks.test_serve_chain_order.<locals>.hook_2.<locals>.wrapperr   rN   rO   rP   r   hook_2B   rR   z5TestServeHooks.test_serve_chain_order.<locals>.hook_2c                    rA   )Nc                    rB   N   rD   rF   rI   r   r   rL   J   rM   zFTestServeHooks.test_serve_chain_order.<locals>.hook_3.<locals>.wrapperr   rN   rO   rP   r   hook_3I   rR   z5TestServeHooks.test_serve_chain_order.<locals>.hook_3on_serve_pager,   r4   rV   )r$   r   r;   r:   urlr&   )r'   rQ   rT   rW   r   rO   r   test_serve_chain_order8   s   "z%TestServeHooks.test_serve_chain_orderc                 C   X   dd }|  d| t| j| jj}| |jd W d    d S 1 s%w   Y  d S )Nc                    s    fdd}|S )Nc                    s"    | |g|R i |}d|_ |S )N   Modified content)content)r:   r;   rG   rH   responserP   r   r   rL   Y   s   zTTestServeHooks.test_serve_chain_modification.<locals>.hook_modifier.<locals>.wrapperr   rN   r   rP   r   hook_modifierX   s   zCTestServeHooks.test_serve_chain_modification.<locals>.hook_modifierrX   r]   r$   r   r;   r:   rZ   r&   r^   )r'   r`   r_   r   r   r   test_serve_chain_modificationW   s
   "z,TestServeHooks.test_serve_chain_modificationc                 C   r\   )Nc                 S   s   dd }|S )Nc                 _   s   t dS )NHaltedr   rF   r   r   r   rL   f   s   zRTestServeHooks.test_serve_chain_halt_execution.<locals>.hook_halt.<locals>.wrapperr   rN   r   r   r   	hook_halte   s   zATestServeHooks.test_serve_chain_halt_execution.<locals>.hook_haltrX   s   Haltedra   )r'   rd   r_   r   r   r   test_serve_chain_halt_executiond   s
   "z.TestServeHooks.test_serve_chain_halt_executionc                 C   sx   t jj| jt jdd}| dt | j| jj	}| 
|jd | |d W d    n1 s1w   Y  |  d S )Npassword)r:   restriction_typerf   rX      z"wagtailcore/password_required.html)r
   r8   creater:   PASSWORDr$   r   clientr9   rZ   r&   status_codeassertTemplateUseddelete)r'   restrictionr_   r   r   r   !test_serve_chain_view_restrictiono   s   z0TestServeHooks.test_serve_chain_view_restrictionc                    sB  g  g  fdd} fdd} fdd}t fdd}td	|r | d
|S | d
|= | d
|' t| j| jj |  g d | t	d | 
d  W d    n1 sdw   Y  W d    n1 ssw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nc                        fdd}|S )Nc                    "     d | |g|R i |S rC   rD   rF   
hook_callsrJ   r   r   rL      rM   zMTestServeHooks.test_serve_always_called_last.<locals>.hook_1.<locals>.wrapperr   rN   rt   rP   r   rQ      rR   z<TestServeHooks.test_serve_always_called_last.<locals>.hook_1c                    rq   )Nc                    rr   rS   rD   rF   rs   r   r   rL      rM   zMTestServeHooks.test_serve_always_called_last.<locals>.hook_2.<locals>.wrapperr   rN   ru   rP   r   rT      rR   z<TestServeHooks.test_serve_always_called_last.<locals>.hook_2c                    rq   )Nc                    rr   rU   rD   rF   rs   r   r   rL      rM   zMTestServeHooks.test_serve_always_called_last.<locals>.hook_3.<locals>.wrapperr   rN   ru   rP   r   rW      rR   z<TestServeHooks.test_serve_always_called_last.<locals>.hook_3c                    rB   )NTrD   rF   )original_serve_chainserve_calledr   r   mock_serve_chain   rM   zFTestServeHooks.test_serve_always_called_last.<locals>.mock_serve_chainzwagtail.views.serve_chainrX   rY   r,   r   )r   r   patchr$   r   r;   r:   rZ   r&   len
assertTrue)r'   rQ   rT   rW   rx   r   )rt   rv   rw   r   test_serve_always_called_last}   s.   "z,TestServeHooks.test_serve_always_called_lastc                    s*  g   fdd}|  | jd |  | jd | d|o t| j| jj}|  |d |r|\}}}t| j| jj | t	 d  d }|  |d	 d
 |  |d d | |d	 | j | |d | j | |d g i f | |d i  W d    d S W d    d S 1 sw   Y  d S )Nc                    rA   )Nc                    s,    | |||d  | |g|R i |S )NrF   rD   rF   )rJ   received_paramsr   r   rL      s   zjTestServeHooks.test_check_view_restrictions_receives_correct_parameters.<locals>.hook_spy.<locals>.wrapperr   rN   r}   rP   r   hook_spy   s   zYTestServeHooks.test_check_view_restrictions_receives_correct_parameters.<locals>.hook_spyzTest page should not be NonezTest request should not be NonerX   zroute_result should not be Noner,   r   r:   zHook received None as pager;   zHook received None as requestrG   rH   )
assertIsNotNoner:   r;   r$   r	   route_for_requestrZ   r   r&   rz   )r'   r   route_resultr:   rG   rH   paramsr   r~   r   8test_check_view_restrictions_receives_correct_parameters   s*   	
"zGTestServeHooks.test_check_view_restrictions_receives_correct_parametersN)r.   r/   r0   r1   r@   r[   rb   re   rp   r|   r   r   r   r   r   r3   .   s    )r3   N)unittestr   "django.contrib.sessions.middlewarer   django.httpr   django.testr   r   wagtailr   wagtail.modelsr	   r
   wagtail.test.utilsr   wagtail.viewsr   r   wagtail.wagtail_hooksr   r   r   r3   r   r   r   r   <module>   s    