o
    I<VÍ  ã                   @   s’  d dl mZmZ d dl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 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 dd„ ZG dd„ de ƒZ!G dd„ de!ƒZ"eedƒZ#eedƒZ$ee	dƒZ%ee	dƒZ&i Z'eƒ dd„ ƒZ(e fdd„Z)dd„ Z*G d d!„ d!eƒZ+G d"d#„ d#e+ƒZ,G d$d%„ d%e+ƒZ-G d&d'„ d'e+ƒZ.G d(d)„ d)e+ƒZ/G d*d+„ d+e+ƒZ0dS ),é    )Úabsolute_importÚunicode_literalsN)Úpartial)ÚExceptionInfo©Úreverse)ÚHttpResponse)ÚTestCase)ÚTemplateDoesNotExist)Údeserialize)Úcurrent_app)Ústates©Útask)Úgen_unique_idÚget_full_cls_name)Útask_webhook)ÚMockRequestc                 K   s   t | |d�S )N©Úkwargsr   )Únamer   © r   úK/var/www/html/env/lib/python3.10/site-packages/djcelery/tests/test_views.pyÚreversestar   s   r   c                   @   ó   e Zd Zdd„ ZdS )ÚMyErrorc                 C   s
   d  | ¡S )Nz$<{0.__class__.__name__}: {0.args!r}>)Úformat©Úselfr   r   r   Ú__repr__    s   
zMyError.__repr__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s    r   c                   @   s   e Zd ZdS )ÚMyRetryTaskErrorN)r    r!   r"   r   r   r   r   r#   $   s    r#   zcelery-is_task_successfulzcelery-task_statuszcelery-applyzcelery-tasksc                 C   s   t | ƒt |ƒ  }td< |S )NÚresult)ÚintÚscratch)ÚxÚyÚretr   r   r   Úmytask/   s   r*   c                 C   s   t | |fi ƒS ©N)Útype)r   Úbaser   r   r   Úcreate_exception5   s   r.   c              
   C   sJ   z| ‚ | j y$ } ztj |¡}|tt ¡ ƒjfW  Y d }~S d }~ww r+   )Ú	__class__r   ÚbackendÚprepare_exceptionr   ÚsysÚexc_infoÚ	traceback)Ú	exceptionÚexcr   r   r   Úcatch_exception9   s   €þr7   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚViewTestCasec              
   C   sZ   t |tƒr|jp	|}z|  t| d¡ƒ|¡ W d S  ty, } ztd ||¡ƒ‚d }~ww )Núutf-8z{0}: {1})Ú
isinstancer   ÚcontentÚassertEqualr   ÚdecodeÚ	TypeErrorr   )r   ÚjsonÚpyr6   r   r   r   ÚassertJSONEqualC   s   €ÿzViewTestCase.assertJSONEqualc                 G   s@   zt j| ||g|¢R Ž  W d S  ty   |  ||v ¡ Y d S w r+   )ÚDjangoTestCaseÚassertInÚAttributeErrorÚ
assertTrue)r   ÚexpectedÚsourceÚargsr   r   r   rC   J   s
   ÿzViewTestCase.assertInc                 G   sb   zt j| ||g|¢R Ž  W d S  ty0   | ¡ D ]\}}|  ||v ¡ |  || |¡ qY d S w r+   )rB   ÚassertDictContainsSubsetrD   ÚitemsrE   r<   )r   ÚaÚbrH   ÚkeyÚvaluer   r   r   rI   P   s   þÿz%ViewTestCase.assertDictContainsSubsetN)r    r!   r"   rA   rC   rI   r   r   r   r   r8   A   s    r8   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )Útest_task_applyc                 C   sN   dt j_z| j tdtjid�d ¡ |  t	d d¡ W dt j_d S dt j_w )NTÚ	task_namer   ú?x=4&y=4r$   é   F)
r   ÚconfÚCELERY_ALWAYS_EAGERÚclientÚgetÚ
task_applyr*   r   r<   r&   r   r   r   r   Ú
test_apply[   s   ÿztest_task_apply.test_applyc                 C   s|   dt j_z4d}t| jjtd|id�d ƒ}z|ƒ }W n	 ty#   Y nw |  |j	d¡ W dt j_d S W dt j_d S dt j_w )NTzxxx.does.not.existrQ   r   rR   i”  F)
r   rT   rU   r   rV   rW   rX   r
   r<   Ústatus_code)r   r   ÚactionÚresr   r   r   Ú*test_apply_raises_404_on_unregistered_taske   s    þ
ÿüz:test_task_apply.test_apply_raises_404_on_unregistered_taskN)r    r!   r"   rY   r]   r   r   r   r   rP   Y   s    
rP   c                   @   r   )Útest_registered_tasksc                 C   s2   | j  tƒ ¡}t|j d¡ƒ}|  d|d ¡ d S )Nr9   zcelery.backend_cleanupÚregular)rV   rW   Úregistered_tasksr   r;   r=   rC   )r   r?   Útasksr   r   r   Útest_list_registered_tasksy   s   z0test_registered_tasks.test_list_registered_tasksN)r    r!   r"   rb   r   r   r   r   r^   w   s    r^   c                   @   rO   )Útest_webhook_taskc                 C   óL   t dd„ ƒ}tƒ  dtddd�¡}||ƒ}|  dddœt|j d	¡ƒ¡ d S )
Nc                 S   s$   t | jd ƒ}t | jd ƒ}|| S ©Nr'   r(   )r%   ÚGET©Úrequestr'   r(   r   r   r   Úadd_webhookƒ   s   z>test_webhook_task.test_successful_request.<locals>.add_webhookz
/tasks/addé
   ©r'   r(   Úsuccessé   )ÚstatusÚretvalr9   ©r   r   rW   ÚdictrI   r   r;   r=   )r   ri   rh   Úresponser   r   r   Útest_successful_request�   s   
þz)test_webhook_task.test_successful_requestc                 C   rd   )
Nc                 S   s(   t | jd ƒ}t | jd ƒ}t|| ƒ‚re   )r%   rf   r   rg   r   r   r   Úerror_webhook‘   s   z<test_webhook_task.test_failed_request.<locals>.error_webhookz/tasks/errorrj   rk   Úfailurez<MyError: (20,)>)rn   Úreasonr9   rp   )r   rt   rh   rr   r   r   r   Útest_failed_request�   s   
ÿýz%test_webhook_task.test_failed_requestN)r    r!   r"   rs   rw   r   r   r   r   rc      s    rc   c                   @   s.   e Zd Zd
dd„Zdd„ Zdd„ Zdd	„ ZdS )Útest_task_statusNc                 C   sª   t ƒ }tjj||||d� | j t|d�¡}t|||d�}|tjjv rJtj 	|¡}|  
t|jd ƒt|jd ƒ¡ t|ƒ|d< t|jƒ|d< ||d< |  |t|d�¡ d S )	N)r4   ©Útask_id)Úidrn   r$   r   r$   r6   r4   r   )r   r   r0   Ústore_resultrV   rW   Útask_statusrq   ÚEXCEPTION_STATESÚ
get_resultr<   ÚstrrH   Úreprr   r/   rA   )r   rn   r\   r4   Úuuidr?   ÚexpectÚinstorer   r   r   ÚassertStatusForIs¡   s   ÿ z"test_task_status.assertStatusForIsc                 C   ó   |   tjd¡ d S )NzThe quick brown fox©r…   r   ÚSUCCESSr   r   r   r   Útest_success°   ó   ztest_task_status.test_successc                 C   s$   t tdƒƒ\}}|  tj||¡ d S )NÚfoo)r7   r   r…   r   ÚFAILURE)r   r6   Útbr   r   r   Útest_failure³   s   ztest_task_status.test_failurec                 C   s:   t tdƒƒ\}}t tt|ƒ|ƒƒ\}}|  tj||¡ d S )NzResource not available)r7   r   r#   r€   r…   r   ÚRETRY)r   ÚoexcÚ_r6   r�   r   r   r   Ú
test_retry·   s   ztest_task_status.test_retryr+   )r    r!   r"   r…   r‰   rŽ   r’   r   r   r   r   rx   Ÿ   s
    
rx   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Útest_task_is_successfulc                 C   sH   t ƒ }t ƒ }tj |||¡ | j t|d�¡}|  |d||dœi¡ d S )Nry   r   )r{   Úexecuted)r   r   r0   r|   rV   rW   Útask_is_successfulrA   )r   rn   Úoutcomer‚   r$   r?   r   r   r   r…   ¿   s   
ÿz)test_task_is_successful.assertStatusForIsc                 C   r†   )NTr‡   r   r   r   r   r‰   Ç   rŠ   z$test_task_is_successful.test_successc                 C   r†   ©NF)r…   r   ÚPENDINGr   r   r   r   Útest_pendingÊ   rŠ   z$test_task_is_successful.test_pendingc                 C   r†   r—   )r…   r   rŒ   r   r   r   r   rŽ   Í   rŠ   z$test_task_is_successful.test_failurec                 C   r†   r—   )r…   r   r�   r   r   r   r   r’   Ð   rŠ   z"test_task_is_successful.test_retryN)r    r!   r"   r…   r‰   r™   rŽ   r’   r   r   r   r   r“   ½   s    r“   )1Ú
__future__r   r   r2   Ú	functoolsr   Úbilliard.einfor   Údjango.core.urlresolversr   Údjango.httpr   Údjango.test.testcasesr	   rB   Údjango.templater
   Úanyjsonr   Úceleryr   r   Úcelery.taskr   Úcelery.utilsr   r   Údjcelery.viewsr   Údjcelery.tests.reqr   r   Ú	Exceptionr   r#   r•   r}   rX   r`   r&   r*   r.   r7   r8   rP   r^   rc   rx   r“   r   r   r   r   Ú<module>   sB    




 