a
    Dg4                     @   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   s   d S N r   r   r   W/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/tests/test_hooks.py	test_hook   s    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   Z_hooksr   r   r   r   tearDownClass   s    zTestLoginView.tearDownClassc                 C   sV   dd }| j d|dd* td}| ||tg W d    n1 sH0    Y  d S )Nc                   S   s   d S r   r   r   r   r   r   before_hook   s    z3TestLoginView.test_before_hook.<locals>.before_hookr   orderregister_hookr   Z	get_hooksassertEqualr   )selfr   hook_fnsr   r   r   test_before_hook   s    
zTestLoginView.test_before_hookc                 C   sV   dd }| j d|dd* td}| |t|g W d    n1 sH0    Y  d S )Nc                   S   s   d S r   r   r   r   r   r   
after_hook&   s    z1TestLoginView.test_after_hook.<locals>.after_hookr      r   r    )r#   r&   r$   r   r   r   test_after_hook%   s    
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   s   d S r   r   )xr   r   r   <lambda>4       z&TestServeHooks.setUp.<locals>.<lambda>)
r	   objectsgetpager   requestr   process_requestsessionsave)r#   Z
middlewarer   r   r   setUp1   s
    zTestServeHooks.setUpc              
      s   g   fdd} fdd} fdd}|  d| |  d|\ |  d|0 t| j| jj |  g d W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )	Nc                    s    fdd}|S )Nc                    s"    d  | |g|R i |S Nr'   appendr6   r7   argskwargsnext_fnorder_callsr   r   wrapper<   s    
zFTestServeHooks.test_serve_chain_order.<locals>.hook_1.<locals>.wrapperr   rC   rE   rD   rC   r   hook_1;   s    z5TestServeHooks.test_serve_chain_order.<locals>.hook_1c                    s    fdd}|S )Nc                    s"    d  | |g|R i |S Nr/   r=   r?   rB   r   r   rE   C   s    
zFTestServeHooks.test_serve_chain_order.<locals>.hook_2.<locals>.wrapperr   rF   rG   rH   r   hook_2B   s    z5TestServeHooks.test_serve_chain_order.<locals>.hook_2c                    s    fdd}|S )Nc                    s"    d  | |g|R i |S N   r=   r?   rB   r   r   rE   J   s    
zFTestServeHooks.test_serve_chain_order.<locals>.hook_3.<locals>.wrapperr   rF   rG   rH   r   hook_3I   s    z5TestServeHooks.test_serve_chain_order.<locals>.hook_3on_serve_pager'   r/   rM   )r!   r   r7   r6   urlr"   )r#   rI   rK   rN   r   rG   r   test_serve_chain_order8   s    z%TestServeHooks.test_serve_chain_orderc                 C   sV   dd }|  d|. t| j| jj}| |jd W d    n1 sH0    Y  d S )Nc                    s    fdd}|S )Nc                    s"    | |g|R i |}d|_ |S )N   Modified content)content)r6   r7   r@   rA   responserH   r   r   rE   Y   s    zTTestServeHooks.test_serve_chain_modification.<locals>.hook_modifier.<locals>.wrapperr   rF   r   rH   r   hook_modifierX   s    zCTestServeHooks.test_serve_chain_modification.<locals>.hook_modifierrO   rS   r!   r   r7   r6   rQ   r"   rT   )r#   rV   rU   r   r   r   test_serve_chain_modificationW   s    z,TestServeHooks.test_serve_chain_modificationc                 C   sV   dd }|  d|. t| j| jj}| |jd W d    n1 sH0    Y  d S )Nc                 S   s   dd }|S )Nc                 _   s   t dS )NZHaltedr   r?   r   r   r   rE   f   s    zRTestServeHooks.test_serve_chain_halt_execution.<locals>.hook_halt.<locals>.wrapperr   rF   r   r   r   	hook_halte   s    zATestServeHooks.test_serve_chain_halt_execution.<locals>.hook_haltrO   s   HaltedrW   )r#   rY   rU   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 sb0    Y  |  d S )Npassword)r6   Zrestriction_typer[   rO      z"wagtailcore/password_required.html)r
   r4   creater6   ZPASSWORDr!   r   clientr5   rQ   r"   status_codeZassertTemplateUseddelete)r#   ZrestrictionrU   r   r   r   !test_serve_chain_view_restrictiono   s    *z0TestServeHooks.test_serve_chain_view_restrictionc                    s4  g  g  fdd} fdd} fdd}t fdd}td	| | d
| | d
|z | d
|N t| j| jj |  g d | t	d | 
d  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s&0    Y  d S )Nc                    s    fdd}|S )Nc                    s"     d | |g|R i |S r<   r=   r?   
hook_callsrC   r   r   rE      s    
zMTestServeHooks.test_serve_always_called_last.<locals>.hook_1.<locals>.wrapperr   rF   rc   rH   r   rI      s    z<TestServeHooks.test_serve_always_called_last.<locals>.hook_1c                    s    fdd}|S )Nc                    s"     d | |g|R i |S rJ   r=   r?   rb   r   r   rE      s    
zMTestServeHooks.test_serve_always_called_last.<locals>.hook_2.<locals>.wrapperr   rF   rd   rH   r   rK      s    z<TestServeHooks.test_serve_always_called_last.<locals>.hook_2c                    s    fdd}|S )Nc                    s"     d | |g|R i |S rL   r=   r?   rb   r   r   rE      s    
zMTestServeHooks.test_serve_always_called_last.<locals>.hook_3.<locals>.wrapperr   rF   rd   rH   r   rN      s    z<TestServeHooks.test_serve_always_called_last.<locals>.hook_3c                    s"    d  | |g|R i |S )NTr=   r?   )original_serve_chainserve_calledr   r   mock_serve_chain   s    
zFTestServeHooks.test_serve_always_called_last.<locals>.mock_serve_chainzwagtail.views.serve_chainrO   rP   r'   r   )r   r   patchr!   r   r7   r6   rQ   r"   len
assertTrue)r#   rI   rK   rN   rg   r   )rc   re   rf   r   test_serve_always_called_last}   s    z,TestServeHooks.test_serve_always_called_lastc                    s  g   fdd}|  | jd |  | jd | d| 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    n1 s0    Y  d S )Nc                    s    fdd}|S )Nc                    s,    | |||d  | |g|R i |S )Nr?   r=   r?   )rC   received_paramsr   r   rE      s    zjTestServeHooks.test_check_view_restrictions_receives_correct_parameters.<locals>.hook_spy.<locals>.wrapperr   rF   rl   rH   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 NonerO   zroute_result should not be Noner'   r   r6   zHook received None as pager7   zHook received None as requestr@   rA   )
ZassertIsNotNoner6   r7   r!   r	   Zroute_for_requestrQ   r   r"   ri   )r#   rn   Zroute_resultr6   r@   rA   paramsr   rm   r   8test_check_view_restrictions_receives_correct_parameters   s$    	
zGTestServeHooks.test_check_view_restrictions_receives_correct_parametersN)r)   r*   r+   r,   r;   rR   rX   rZ   ra   rk   rp   r   r   r   r   r.   .   s   )r.   N)Zunittestr   Z"django.contrib.sessions.middlewarer   Zdjango.httpr   Zdjango.testr   r   Zwagtailr   Zwagtail.modelsr	   r
   Zwagtail.test.utilsr   Zwagtail.viewsr   r   Zwagtail.wagtail_hooksr   r   r   r.   r   r   r   r   <module>   s   