o
    ýòTiø  ã                   @   s
  d dl Z d dlmZ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 d d	lmZ d d
lmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ g Zd<dd„Z d=dd„Z!e Z"e!Z#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ƒ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 Z0ed,d-d.d/„ ƒZ1G d0d1„ d1eƒZ2G d2d3„ d3eƒZ3G d4d5„ d5eƒZ4G d6d7„ d7eƒZ5G d8d9„ d9eƒZ6G d:d;„ d;eƒZ7dS )>é    N)Ú	timedeltaÚdatetime)ÚpatchÚMock)ÚOperationalError)ÚUser)Úoverride_settings)ÚTransactionTestCase)Úsettings)Útimezone)ÚInvalidTaskError)ÚtasksÚTaskScheduleÚ	TaskProxy)ÚTask)ÚCompletedTask)Ú
background)Úapp_settingsc                 C   s"   t  | ||¡}tjrt d¡ |S )z†
    We mock tasks.run_task to give other threads some time to update the database.

    Otherwise we run into a locked database.
    é   )r   Úrun_taskr   ÚBACKGROUND_TASK_RUN_ASYNCÚtimeÚsleep)ÚnameÚargsÚkwargsÚval© r   ú`/var/www/html/evchargy.com/venv/lib/python3.10/site-packages/background_task/tests/test_tasks.pyÚmocked_run_task   s   
r   c                 C   s   t  | ¡}tjrt d¡ |S )z’
    We mock tasks.mocked_run_next_task to give other threads some time to update the database.

    Otherwise we run into a locked database.
    r   )r   Úrun_next_taskr   r   r   r   )Úqueuer   r   r   r   Úmocked_run_next_task#   s   

r"   c                   C   ó   d S ©Nr   r   r   r   r   Ú
empty_task2   s   r%   c                  O   s   t  | |f¡ d S r$   )Ú	_recordedÚappend)ÚargÚkwr   r   r   Úrecord_task6   s   r*   c                   @   sT   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d„ ZdS )ÚTestBackgroundDecoratorc                 C   sR   t  ¡ tƒ}|  |t¡ |  t|tƒ¡ t  t¡}|  |t¡ |  t|tƒ¡ d S r$   )r   r   r%   ÚassertNotEqualÚ
assertTrueÚ
isinstancer   ©ÚselfÚproxyr   r   r   Útest_get_proxy<   s   
z&TestBackgroundDecorator.test_get_proxyc                 C   s`   t  ¡ tƒ}|  |jd¡ t  ¡ tƒ}|  |jd¡ t  t¡}|  t|tƒ¡ |  |jd¡ d S )Nz+background_task.tests.test_tasks.empty_taskz,background_task.tests.test_tasks.record_task)	r   r   r%   ÚassertEqualr   r*   r-   r.   r   r/   r   r   r   Útest_default_nameF   s   
z)TestBackgroundDecorator.test_default_namec                 C   s"   t jddtƒ}|  |jd¡ d S )NÚmytask©r   )r   r   r%   r3   r   r/   r   r   r   Útest_specified_nameR   s   z+TestBackgroundDecorator.test_specified_namec                 C   s8   t  ¡ tƒ}|  |jt¡ t  ¡ tƒ}|  |jt¡ d S r$   )r   r   r%   r3   Útask_functionr*   r/   r   r   r   Útest_task_functionV   s   z*TestBackgroundDecorator.test_task_functionc                 C   s    t  ¡ tƒ}|  tƒ |j¡ d S r$   ©r   r   r%   r3   r   Úscheduler/   r   r   r   Útest_default_schedule]   s   z-TestBackgroundDecorator.test_default_schedulec                 C   s(   t jddtƒ}|  tdd|j¡ d S )Né
   ©r;   ©Úrun_atr:   r/   r   r   r   Útest_schedulea   s   z%TestBackgroundDecorator.test_schedulec                 C   s    t  ¡ tƒ}|  dt|ƒ¡ d S )Nz6TaskProxy(background_task.tests.test_tasks.empty_task))r   r   r%   r3   Ústrr/   r   r   r   Útest_stre   s
   þz TestBackgroundDecorator.test_strc                 C   s(   t ƒ tƒ}|  |t¡ |  |jt¡ dS )z!check shortcut to decorator worksN)r   r%   ÚfailIfEqualr3   r8   r/   r   r   r   Útest_shortcutl   s   
z%TestBackgroundDecorator.test_shortcutc                 C   sd   t dd„ ƒ}tj ¡ }tj ¡ }| dd¡}|  |d¡ |  tj ¡ |d¡ |  tj ¡ |d¡ dS )	z4 Check launch original function in synchronous mode c                 S   s   | | S r$   r   )ÚxÚyr   r   r   Úaddt   ó   z5TestBackgroundDecorator.test_launch_sync.<locals>.addé   é   é   zTask was createdzCompleted task was createdN)r   r   ÚobjectsÚcountr   Únowr3   )r0   rH   ÚtÚctZanswerr   r   r   Útest_launch_syncr   s   


z(TestBackgroundDecorator.test_launch_syncN)Ú__name__Ú
__module__Ú__qualname__r2   r4   r7   r9   r<   rA   rC   rE   rR   r   r   r   r   r+   :   s    
r+   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚTestTaskProxyc                    s    t t| ƒ ¡  t ¡ tƒ| _d S r$   )ÚsuperrV   ÚsetUpr   r   r*   r1   ©r0   ©Ú	__class__r   r   rX   ‚   s   zTestTaskProxy.setUpc                 C   sz   t | jjg i ƒ |  di ft ¡ ¡ t | jjdgi ƒ |  di ft ¡ ¡ t | jjg ddiƒ |  dddift ¡ ¡ d S )Nr   Úhi)r\   r)   r   )r   r1   r   r3   r&   ÚpoprY   r   r   r   Útest_run_task†   s   zTestTaskProxy.test_run_task)rS   rT   rU   rX   r^   Ú__classcell__r   r   rZ   r   rV   €   s    rV   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestTaskSchedulec                 C   sP   |   dtƒ j¡ |   dtddj¡ |   dtddj¡ |   dtddj¡ d S )Nr   ©Úpriorityr   rJ   )r3   r   rb   rY   r   r   r   Útest_priority“   s   zTestTaskSchedule.test_priorityc                 C   s@   |   t|tƒ¡ |   t|tƒ¡ |   t|| ƒtddk¡ d S )Nr   ©Úseconds)Ú
failUnlessr.   r   Úabsr   )r0   Zd1Zd2r   r   r   Ú_within_one_second™   s    z#TestTaskSchedule._within_one_secondc                 C   sÖ   d dt ddfD ]}t ¡ }t|dj}|  ||¡ qt ¡ }t|dj}|  ||¡ t ¡ t dd }t|dj}|  ||¡ tddj}|  |t ¡ t dd ¡ tt dddj}|  |t ¡ t dd ¡ d S )Nr   rd   r?   é<   éZ   é#   )r   r   rO   r   r@   rh   )r0   r;   rO   r@   Úfixed_dtr   r   r   Útest_run_atž   s   zTestTaskSchedule.test_run_atc                 C   s  t  ¡ tdd }t d|i¡}|  |j|¡ |  d|j¡ |  tj|j	¡ |dtj
dœ}t |¡}|  |j|¡ |  d|j¡ |  tj
|j	¡ t d¡}|  |jt  ¡ ¡ t d¡}|  |jt  ¡ tdd ¡ t t|d¡}|  |j|¡ |  d|j¡ |  tj|j	¡ d S )Nr=   rd   r@   r   rJ   ©r@   rb   Úactionr?   )r   rO   r   r   Úcreater3   r@   rb   ZSCHEDULEro   ÚRESCHEDULE_EXISTINGrh   )r0   rl   r;   r   r   r   Útest_create²   s,   ÿ


ÿzTestTaskSchedule.test_createc                 C   sþ   t ddt jd}t  d¡ |¡}|  t ¡ tdd |j¡ |  	d|j
¡ |  	t j|j¡ t  ddi¡ |¡}|  t ¡ tdd |j¡ |  	d|j
¡ |  	t j|j¡ t j}t  d|i¡ |¡}|  t ¡ tdd |j¡ |  	d|j
¡ |  	||j¡ d S )	Nr=   rJ   rn   é   rd   rb   r   ro   )r   rq   rp   Úmergerh   r   rO   r   r@   r3   rb   ro   ÚCHECK_EXISTING)r0   Údefaultr;   ro   r   r   r   Ú
test_mergeÌ   s,   ÿÿÿÿzTestTaskSchedule.test_mergec                 C   s   |   dttdddƒ¡ d S )Nz#TaskSchedule(run_at=10, priority=0)r=   r   ©r@   rb   )r3   Úreprr   rY   r   r   r   Ú	test_reprã   s   ÿzTestTaskSchedule.test_reprN)	rS   rT   rU   rc   rh   rm   rr   rw   rz   r   r   r   r   r`   ‘   s    r`   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestSchedulingTasksc                    sh   d ˆ _ tjdd‡ fdd„ƒ}|dƒ tj ¡ }ˆ  d| ¡ ¡ |d }ˆ  d|j¡ ˆ  d|j	¡ d S )NÚtest_background_gets_scheduledr6   c                    s
   | ˆ _ d S r$   ©Úresultr~   rY   r   r   Ú
set_resultí   ó   
zFTestSchedulingTasks.test_background_gets_scheduled.<locals>.set_resultr   r   z	[[1], {}])
r   r   r   r   rM   Úallr3   rN   Ú	task_nameÚtask_params)r0   r€   Ú	all_tasksÚtaskr   rY   r   r}   ê   s   

z2TestSchedulingTasks.test_background_gets_scheduledc                 C   s¢   t j}tjdt |dddd„ ƒ}|ƒ  |dd tj ¡ }|  d| ¡ ¡ |d	 }|  d|j	¡ t
 ¡ }|  |td
d |jk ¡ |  |tdd |jk¡ d S )NÚtest_reschedule_existing©ro   ©r   r;   c                   S   r#   r$   r   r   r   r   r   Úreschedule_fnþ   ó   zCTestSchedulingTasks.test_reschedule_existing.<locals>.reschedule_fnrj   r>   r   r   éY   rd   é[   )r   rq   r   r   r   rM   r‚   r3   rN   rƒ   r   rO   rf   r   r@   )r0   Zreschedule_existingrŠ   r…   r†   rO   r   r   r   r‡   ú   ó   ÿ


z,TestSchedulingTasks.test_reschedule_existingc                 C   s¢   t j}tjdt |dddd„ ƒ}|ƒ  |dd tj ¡ }|  d| ¡ ¡ |d	 }|  d|j	¡ t
 ¡ }|  |tdd
 |jk ¡ |  |tdd
 |jk¡ d S )NÚtest_check_existingrˆ   r‰   c                   S   r#   r$   r   r   r   r   r   Úcheck_fn  r‹   z9TestSchedulingTasks.test_check_existing.<locals>.check_fnrj   r>   r   r   rd   )r   ru   r   r   r   rM   r‚   r3   rN   rƒ   r   rO   rf   r   r@   )r0   Zcheck_existingr   r…   r†   rO   r   r   r   r     rŽ   z'TestSchedulingTasks.test_check_existingN)rS   rT   rU   r}   r‡   r   r   r   r   r   r|   è   s    r|   c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚTestTaskRunnerc                    s   t t| ƒ ¡  tj| _d S r$   )rW   r‘   rX   r   Z_runnerÚrunnerrY   rZ   r   r   rX   -  s   zTestTaskRunner.setUpc                 C   s   |   | j t¡¡ d S r$   )ÚfailIfr’   Úget_task_to_runr   rY   r   r   r   Útest_get_task_to_run_no_tasks1  s   z,TestTaskRunner.test_get_task_to_run_no_tasksc                 C   s–   t j ddi ¡}| ¡  |  |jd u ¡ |  |jd u ¡ | j t	¡}|  
|d u ¡ |  
|jd u ¡ |  | jj|j¡ |  
|jd u ¡ |  d|j¡ d S )Nr5   r   )r   rM   Únew_taskÚsaverf   Ú	locked_byÚ	locked_atr’   r”   r   r“   r3   Zworker_namerƒ   ©r0   r†   Úlocked_taskr   r   r   Útest_get_task_to_run4  s   z#TestTaskRunner.test_get_task_to_run)rS   rT   rU   rX   r•   rœ   r_   r   r   rZ   r   r‘   +  s    r‘   c                   @   sD   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S )ÚTestTaskModelc                 C   sp   t j d¡}| ¡  |  |jd u ¡ |  |jd u ¡ | d¡}|  d|j¡ |  	|jd u ¡ |  |j
|j
¡ d S )Nr5   Úmylock)r   rM   r–   r—   rf   r˜   r™   Úlockr3   r“   Úpkrš   r   r   r   Útest_lock_uncontestedD  s   
z#TestTaskModel.test_lock_uncontestedc                 C   s@   t j d¡}| ¡  |  | d¡d u ¡ |  | d¡d u ¡ d S )Nr5   rž   Ú	otherlock)r   rM   r–   r—   r“   rŸ   rf   ©r0   r†   r   r   r   Útest_lock_contestedO  s   z!TestTaskModel.test_lock_contestedc                 C   sZ   t j d¡}| ¡  | d¡}ttjd d}|j| |_| ¡  |  	| d¡d u ¡ d S )Nr5   rž   rJ   rd   r¢   )
r   rM   r–   r—   rŸ   r   r   ÚBACKGROUND_TASK_MAX_RUN_TIMEr™   r“   )r0   r†   r›   Ú	expire_byr   r   r   Útest_lock_expiredX  s   
zTestTaskModel.test_lock_expiredc                 C   s@   t j d¡}|  dt|ƒ¡ t jjddd}|  dt|ƒ¡ d S )Nr5   úMy Task)Úverbose_name)r   rM   r–   r3   rB   r£   r   r   r   rC   e  s   zTestTaskModel.test_strc                 C   s<   t jjdddd}tjjd|d}| ¡  |  |j|¡ d S )NÚbobúbob@example.comÚ12345©ÚusernameÚemailÚpasswordr5   ©Úcreator)r   rM   Úcreate_userr   r–   r—   r3   r²   ©r0   Úuserr†   r   r   r   Útest_creatork  s   zTestTaskModel.test_creatorc                 C   sP   t  ¡ tdd }tjjdtj|d}| ¡  |  |j	tj¡ |  |j
|¡ d S )Nr   )Údaysr5   )ÚrepeatÚrepeat_until)r   rO   r   r   rM   r–   ÚHOURLYr—   r3   r¸   r¹   )r0   r¹   r†   r   r   r   Útest_repeatq  s
   zTestTaskModel.test_repeatc                 C   sÂ   t jjddgddidddtjjddd	d
d}| ¡  | ¡ }|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ d S )Nr5   r   ÚqÚsZmyqueuer¨   rª   r«   r¬   r­   )rƒ   r   r   rb   r!   r©   r²   )r   rM   r–   r   r³   r—   Zcreate_completed_taskr3   rƒ   r„   rb   r!   r©   r²   r¸   r¹   )r0   r†   Úcompleted_taskr   r   r   Útest_create_completed_taskx  s&   ù	z(TestTaskModel.test_create_completed_taskN)
rS   rT   rU   r¡   r¤   r§   rC   r¶   r»   r¿   r   r   r   r   r   B  s    	r   c                       s„   e Zd Z‡ f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‡  ZS )Ú	TestTasksc                    sJ   t tˆ ƒ ¡  tjdd‡ fdd„ƒ}tjdddd„ ƒ}|ˆ _|ˆ _d S )NÚ
set_fieldsr6   c                     s"   |   ¡ D ]
\}}tˆ ||ƒ qd S r$   )ÚitemsÚsetattr)ÚfieldsÚkeyÚvaluerY   r   r   rÁ   “  s   ÿz#TestTasks.setUp.<locals>.set_fieldsÚthrows_errorc                   S   ó   t dƒ‚)Nzan error©ÚRuntimeErrorr   r   r   r   rÇ   ˜  rI   z%TestTasks.setUp.<locals>.throws_error)rW   rÀ   rX   r   r   rÁ   rÇ   )r0   rÁ   rÇ   rZ   rY   r   rX     s   



zTestTasks.setUpc                 C   s   |   tƒ ¡ d S r$   )r“   r    rY   r   r   r   Ú$test_run_next_task_nothing_scheduledŸ  s   z.TestTasks.test_run_next_task_nothing_scheduledc                 C   sH   | j dd |  t| dƒ¡ |  tƒ ¡ |  t| dƒ¡ |  | j¡ d S )NT)ÚworkedrÌ   )rÁ   r“   Úhasattrrf   r    rÌ   rY   r   r   r   Ú%test_run_next_task_one_task_scheduled¢  s
   z/TestTasks.test_run_next_task_one_task_scheduledc                 C   s~   | j dd | j dd | j dd tdƒD ]}|  tƒ ¡ q|  tƒ ¡ dD ]\}}|  t| |ƒ¡ |  |t| |ƒ¡ q'd S )	NÚ1)ÚoneÚ2)ÚtwoÚ3)ÚthreerK   ))rÐ   rÏ   )rÒ   rÑ   )rÔ   rÓ   )rÁ   Úrangerf   r    r“   rÍ   r3   Úgetattr)r0   ÚiÚfieldrÆ   r   r   r   Ú*test_run_next_task_several_tasks_scheduled«  s   þz4TestTasks.test_run_next_task_several_tasks_scheduledc                 C   sº   |   ¡  tj ¡ }|  d| ¡ ¡ |d }|  tƒ ¡ tj ¡ }|  d| ¡ ¡ |d }|  d|j	¡ |  |j
d u ¡ |  d|j¡ |  |j|jk¡ |  |jd u ¡ |  |jd u ¡ d S )Nr   r   Ú )rÇ   r   rM   r‚   r3   rN   rf   r    rD   Ú
last_errorÚ	failed_atÚattemptsr@   r˜   r™   )r0   r…   Úoriginal_taskZfailed_taskr   r   r   Ú!test_run_next_task_error_handling¹  s   

z+TestTasks.test_run_next_task_error_handlingc                 C   s‚   | j dd |  t| dƒ¡ tj ¡ }|  d| ¡ ¡ |d }| d¡ |  t	ƒ ¡ |  t| dƒ¡ tj ¡ }|  d| ¡ ¡ d S )NT)Úlockedrà   r   r   Úlockname)
rÁ   r“   rÍ   r   rM   r‚   r3   rN   rŸ   r    )r0   r…   rÞ   r   r   r   Ú&test_run_next_task_does_not_run_lockedÒ  s   


z0TestTasks.test_run_next_task_does_not_run_lockedc                 C   s¶   | j dd tj ¡ }|  d| ¡ ¡ |d }| d¡}|  tƒ ¡ |  t	| dƒ¡ t
tjd d}|j| |_| ¡  |  tƒ ¡ |  dtj ¡ ¡ |  t	| dƒ¡ |  | j¡ d S )	NT)Úlock_overriddenr   r   rá   rã   rJ   rd   )rÁ   r   rM   r‚   r3   rN   rŸ   r“   r    rÍ   r   r   r¥   r™   r—   rf   rã   )r0   r…   rÞ   r›   r¦   r   r   r   Ú-test_run_next_task_unlocks_after_MAX_RUN_TIMEá  s   

z7TestTasks.test_run_next_task_unlocks_after_MAX_RUN_TIMEc                 C   sŽ   t jddddd„ ƒ}t ¡ }|ƒ  tj ¡ }|  d| ¡ ¡ |d }|  	||j
k ¡ |  	|j
| tdd	k¡ |  	|j
| td
d	k¡ d S )NZ default_schedule_used_for_run_atri   r‰   c                   S   r#   r$   r   r   r   r   r   Údefault_schedule_used_for_timeü  ó   zWTestTasks.test_default_schedule_used_for_run_at.<locals>.default_schedule_used_for_timer   r   é=   rd   é;   )r   r   r   rO   r   rM   r‚   r3   rN   rf   r@   r   )r0   rå   rO   r…   r†   r   r   r   Ú%test_default_schedule_used_for_run_atú  s   

z/TestTasks.test_default_schedule_used_for_run_atc                 C   sT   t jdddiddd„ ƒ}|ƒ  tj ¡ }|  d| ¡ ¡ |d }|  d|j¡ d S )	NÚ"default_schedule_used_for_priorityrb   rJ   r‰   c                   S   r#   r$   r   r   r   r   r   rê     r‹   z]TestTasks.test_default_schedule_used_for_priority.<locals>.default_schedule_used_for_priorityr   r   )r   r   r   rM   r‚   r3   rN   rb   )r0   rê   r…   r†   r   r   r   Ú'test_default_schedule_used_for_priority  s   ÿ

z1TestTasks.test_default_schedule_used_for_priorityc                 C   s†   t  ¡ tdd }tjd|ddœddd„ ƒ}t  ¡ jd	d
tdd }||d tj ¡ }|  	d| 
¡ ¡ |d	 }|  	||j¡ d S )Nrj   rd   Znon_default_schedule_usedrJ   rx   r‰   c                   S   r#   r$   r   r   r   r   r   rê     r‹   zTTestTasks.test_non_default_schedule_used.<locals>.default_schedule_used_for_priorityr   )Úmicrosecondri   r>   r   )r   rO   r   r   r   Úreplacer   rM   r‚   r3   rN   r@   )r0   Zdefault_run_atrê   r@   r…   r†   r   r   r   Útest_non_default_schedule_used  s   ÿ


z(TestTasks.test_non_default_schedule_usedc                 C   sÐ   t jdddd„ ƒ}|ƒ  tj ¡ }|  d| ¡ ¡ |d }|  |jd u ¡ t	j
|_| ¡  |  tƒ ¡ tj ¡ }|  d| ¡ ¡ tj ¡ }|  d| ¡ ¡ |  dtj ¡ ¡ tj ¡ d }|  |jd u ¡ d S )NÚ%test_failed_at_set_after_MAX_ATTEMPTSr6   c                   S   rÈ   )NÚfailedrÉ   r   r   r   r   Ú failed_at_set_after_MAX_ATTEMPTS*  rI   zYTestTasks.test_failed_at_set_after_MAX_ATTEMPTS.<locals>.failed_at_set_after_MAX_ATTEMPTSr   r   )r   r   r   rM   Úfind_availabler3   rN   rf   rÜ   r   ZBACKGROUND_TASK_MAX_ATTEMPTSrÝ   r—   r    r‚   r   r“   )r0   rñ   Ú	availabler†   r…   r¾   r   r   r   rï   )  s"   




z/TestTasks.test_failed_at_set_after_MAX_ATTEMPTSc                 C   sH   | j dd}|  tj ¡ d¡ tj ¡ }|  ||¡ |  |j|j¡ d S )NÚtest)rô   r   )rÁ   r3   r   rM   rN   Úfirstr    )r0   Úreturn_valuer†   r   r   r   Útest_run_task_return_valueF  s
   
z$TestTasks.test_run_task_return_valuec                 C   s$   d}| j d|d}|  |j|¡ d S )Nr¨   Útest1)rô   r©   )rÁ   r3   r©   )r0   r©   r†   r   r   r   Útest_verbose_name_paramM  s   z!TestTasks.test_verbose_name_paramc                 C   s2   t jjdddd}| jd|d}|  |j|¡ d S )Nrª   r«   r¬   r­   Útest2)rô   r²   )r   rM   r³   rÁ   r3   r²   r´   r   r   r   Útest_creator_paramR  s   zTestTasks.test_creator_param)rS   rT   rU   rX   rË   rÎ   rÙ   rß   râ   rä   ré   rë   rî   rï   r÷   rù   rû   r_   r   r   rZ   r   rÀ   Ž  s    	rÀ   c                   @   s8   e Zd Zdd„ Zedddd„ ƒZedddd	„ ƒZd
S )ÚMaxAttemptsTestCasec                 C   sF   t jdddd„ ƒ}|| _|  ¡ | _|  ¡ | _| jj| _| jj| _d S )Núfailing taskr6   c                   S   rÈ   )NÚerror)Ú	Exceptionr   r   r   r   Úfailing_task[  rI   z/MaxAttemptsTestCase.setUp.<locals>.failing_task)r   r   r   Útask1Ztask2ÚidÚtask1_idÚtask2_id©r0   r   r   r   r   rX   Z  s   




zMaxAttemptsTestCase.setUpr   ©ÚMAX_ATTEMPTSc                 C   sê   |   tjd¡ |   tj ¡ d¡ tƒ  |   tj ¡ d¡ |   tj ¡ d j| j	¡ |   t
j ¡ d¡ t
j ¡ d }|   |jd¡ |   |j| jj¡ |   |j| jj¡ |  |j¡ |  |j¡ tƒ  |   tj ¡ d¡ |   t
j ¡ d¡ d S )Nr   rJ   r   )r3   r
   r  r   rM   rN   r    r‚   r  r  r   rÝ   rƒ   r  r„   ZassertIsNotNonerÛ   rÜ   )r0   r¾   r   r   r   Útest_max_attempts_onee  s   z)MaxAttemptsTestCase.test_max_attempts_onerJ   c                 C   s<   |   tjd¡ tƒ  |   tj ¡ d¡ |   tj ¡ d¡ d S )NrJ   r   ©r3   r
   r  r    r   rM   rN   r   rY   r   r   r   Útest_max_attempts_twoy  ó   z)MaxAttemptsTestCase.test_max_attempts_twoN)rS   rT   rU   rX   r   r  r
  r   r   r   r   rü   X  s    
rü   c                   @   s6   e Zd ZG dd„ deƒZdd„ Zedddd„ ƒZd	S )
ÚInvalidTaskTestCasec                   @   s   e Zd ZdS )z(InvalidTaskTestCase.SomeInvalidTaskErrorN)rS   rT   rU   r   r   r   r   ÚSomeInvalidTaskErrorƒ  s    r  c                    s6   t jdd‡ fdd„ƒ}|ˆ _ˆ  ¡ ˆ _ˆ jjˆ _d S )Nrý   r6   c                      s
   ˆ   d¡‚)NÚinvalid)r  r   rY   r   r   r   ‡  r   z/InvalidTaskTestCase.setUp.<locals>.failing_task)r   r   r   r  r  r  r  r   rY   r   rX   †  s
   

zInvalidTaskTestCase.setUprJ   r  c                 C   s<   |   tjd¡ tƒ  |   tj ¡ d¡ |   tj ¡ d¡ d S )NrJ   r   r   r	  rY   r   r   r   Útest_invalid_task  r  z%InvalidTaskTestCase.test_invalid_taskN)rS   rT   rU   r   r  rX   r   r  r   r   r   r   r    s
    	r  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚArgumentsWithDictTestCasec                 C   s   t jdddd„ ƒ}|| _d S )Nrý   r6   c                 S   r#   r$   r   )Údr   r   r   r†   ™  ræ   z-ArgumentsWithDictTestCase.setUp.<locals>.task)r   r   r†   r£   r   r   r   rX   ˜  s   


zArgumentsWithDictTestCase.setUpc                 C   sT   |   tj ¡ d¡ dddœ}|  |¡ |   tj ¡ d¡ tƒ  |   tj ¡ d¡ d S )Nr   rJ   r   )iÎV  ig+  )r3   r   rM   rN   r†   r    )r0   r  r   r   r   Ú!test_task_with_dictionary_in_argsž  s   

z;ArgumentsWithDictTestCase.test_task_with_dictionary_in_argsN)rS   rT   rU   rX   r  r   r   r   r   r  —  s    r  Únamed_queue©r!   c                 C   s   t  | ¡ d S r$   )Úcompleted_named_queue_tasksr'   )Úmessager   r   r   Únamed_queue_taskª  s   r  c                   @   r{   )ÚNamedQueueTestCasec                 C   s&   t dƒ tdd | jdtdd d S )Nrø   r  r  úTask should be processed©Úmsg©r  r    ZassertInr  rY   r   r   r   Útest_process_queue±  s   
z%NamedQueueTestCase.test_process_queuec                 C   s"   t dƒ tƒ  | jdtdd d S )Nrú   r  r  r  rY   r   r   r   Útest_process_all_tasks¶  s   z)NamedQueueTestCase.test_process_all_tasksc                 C   s,   t dƒ tdd | jdtdd tƒ  d S )NZtest3Zother_named_queuer  zTask should be ignoredr  )r  r    ZassertNotInr  rY   r   r   r   Útest_process_other_queue»  s   

z+NamedQueueTestCase.test_process_other_queueN)rS   rT   rU   r  r  r   r   r   r   r   r  ¯  s    r  c                   @   r{   )ÚRepetitionTestCasec                 C   ó   t  ¡ dd„ ƒ}|| _d S )Nc                  _   r#   r$   r   ©r   r   r   r   r   Úmy_taskÅ  ræ   z)RepetitionTestCase.setUp.<locals>.my_task©r   r   r$  ©r0   r$  r   r   r   rX   Ä  ó   

zRepetitionTestCase.setUpc                 C   s  t  ¡ tdd }| jddtj|dd}|  |jtj¡ |  |j|¡ t	 
¡  t d¡ |  tjjtjd ¡ d¡ tjjtjd}|  |j|j¡ |  |j|j¡ |  | ¡ | ¡ ¡ |  |j|j¡ |  |j|j¡ |  |j|j tdd	¡ |  |j|j¡ d S )
Nr   ©Úweeksztest-repeatÚbarzTest repeat)Zfoor¸   r¹   r©   ç      à?©r¸   ©Úhours)r   rO   r   r$  r   rº   r3   r¸   r¹   r   r    r   r   rM   ÚfilterrN   Úgetr,   r  rƒ   ÚparamsZ	task_hashr©   r@   ©r0   r¹   Zold_taskr–   r   r   r   r»   Ê  s*   û
zRepetitionTestCase.test_repeatc                 C   sâ   t  ¡ tdd }| jdtj|dd}t  ¡ tdd |_| ¡  t 	¡  t
 d¡ |  tjjtjd ¡ d¡ tjjtjd}|  |j|j¡ |  |j|j tddd¡ |  |jt  ¡ k¡ |  |jt  ¡  tdd	k¡ d S )
Nr   r(  ztest-repetitionzTest repetition in future)r¸   r¹   r©   r+  r,  )r)  r.  r-  )r   rO   r   r$  r   rº   r@   r—   r   r    r   r   r3   rM   r/  rN   r0  r,   r  r-   r2  r   r   r   Útest_repetition_in_futureâ  s"   ü
"z,RepetitionTestCase.test_repetition_in_futureN)rS   rT   rU   rX   r»   r3  r   r   r   r   r!  Â  s    r!  c                   @   s8   e Zd Zdd„ Zedddd„ ƒZedddd„ ƒZd	S )
ÚQuerySetManagerTestCasec                 C   sx   t  ¡ dd„ ƒ}t  ¡ dd„ ƒ}tjjdddd| _tjjd	ddd| _|ƒ | _|| jd
| _|ƒ | _	|| jd
| _
d S )Nc                   S   ó   dS ©Ng        r   r   r   r   r   Úsucceeding_taský  ræ   z6QuerySetManagerTestCase.setUp.<locals>.succeeding_taskc                   S   ó   dd S ©Nr   r   r   r   r   r   r     rI   z3QuerySetManagerTestCase.setUp.<locals>.failing_taskrª   r«   r¬   r­   Zbob2r±   )r   r   r   rM   r³   Úuser1Úuser2Ztask_allZ	task_userZfailing_task_allZfailing_task_user©r0   r7  r   r   r   r   rX   ü  s   

zQuerySetManagerTestCase.setUpr   r  c                 C   s¬   |   ttj ¡ ƒd¡ |   ttj | j¡ƒd¡ |   ttj | j¡ƒd¡ tdƒD ]}t	ƒ  q)|   ttj ¡ ƒd¡ |   ttj | j¡ƒd¡ |   ttj | j¡ƒd¡ d S )Né   rJ   r   )
r3   Úlenr   rM   r‚   Ú
created_byr:  r;  rÕ   r    ©r0   r×   r   r   r   Útest_task_manager  s   z)QuerySetManagerTestCase.test_task_managerc                 C   sÐ  |   ttj | j¡ƒd¡ |   ttj | j¡ƒd¡ |   ttj ¡ ƒd¡ |   ttj | j¡ ¡ ƒd¡ |   ttjjtdddƒd¡ |   ttj 	¡ ƒd¡ |   ttj | j¡ 	¡ ƒd¡ |   ttjj	tdddƒd¡ t
dƒD ]}tƒ  qr|   ttj | j¡ƒd¡ |   ttj | j¡ƒd¡ |   ttj ¡ ƒd¡ |   ttj | j¡ ¡ ƒd¡ |   ttjjtdddƒd¡ |   ttj 	¡ ƒd¡ |   ttj | j¡ 	¡ ƒd¡ |   ttjj	tdddƒd¡ d S )Nr   r   r-  )Zwithinr=  rJ   )r3   r>  r   rM   r?  r:  r;  rð   r   Z	succeededrÕ   r    r@  r   r   r   Útest_completed_task_manager  s$      $z3QuerySetManagerTestCase.test_completed_task_managerN)rS   rT   rU   rX   r   rA  rB  r   r   r   r   r4  ú  s    

r4  c                   @   r  )ÚPriorityTestCasec                 C   sB   t  ¡ dd„ ƒ}t ¡ tdd }|d|d| _|d|d| _d S )Nc                   S   r#   r$   r   r   r   r   r   r5   0  ræ   z&PriorityTestCase.setUp.<locals>.mytaskr   )Úminuteséc   )rb   r;   éÿÿÿÿ)r   r   r   rO   r   Úhigh_priority_taskÚlow_priority_task)r0   r5   r@   r   r   r   rX   /  s
   
zPriorityTestCase.setUpc                 C   s  |   | jjd¡ |   | jjd¡ tj ¡ }|   | ¡ d¡ |   | ¡ | j¡ |   t	|ƒd | j¡ |  
tjj| jjd ¡ ¡ |  
tjj| jjd ¡ ¡ tƒ  |  tjj| jjd ¡ ¡ |  
tjj| jjd ¡ ¡ tƒ  |  tjj| jjd ¡ ¡ |  tjj| jjd ¡ ¡ d S )NrE  rF  rJ   ra   )r3   rG  rb   rH  r   rM   rò   rN   rõ   ÚlistÚassertFalser   r/  Úexistsr    r-   )r0   ró   r   r   r   rc   9  s   
 zPriorityTestCase.test_priorityN)rS   rT   rU   rX   rc   r   r   r   r   rC  -  s    
rC  c                   @   s4   e Zd Zdd„ Zedƒdd„ ƒZedƒdd„ ƒZdS )	ÚLoggingTestCasec                 C   s0   t  ¡ dd„ ƒ}t  ¡ dd„ ƒ}|| _|| _d S )Nc                   S   r5  r6  r   r   r   r   r   r7  P  ræ   z.LoggingTestCase.setUp.<locals>.succeeding_taskc                   S   r8  r9  r   r   r   r   r   r   T  rI   z+LoggingTestCase.setUp.<locals>.failing_task)r   r   r7  r   r<  r   r   r   rX   O  s   


zLoggingTestCase.setUpúbackground_task.tasks.loggerc                 C   s<   |   ¡  tƒ  |  |jj¡ |  |jj¡ |  |jj¡ d S r$   )r7  r    rJ  ÚwarningÚcalledrþ   Úcritical©r0   Úmock_loggerr   r   r   Útest_success_logging[  ó
   z$LoggingTestCase.test_success_loggingc                 C   s<   |   ¡  tƒ  |  |jj¡ |  |jj¡ |  |jj¡ d S r$   )r   r    rJ  rN  rO  r-   rþ   rP  rQ  r   r   r   Útest_error_loggingc  rT  z"LoggingTestCase.test_error_loggingN)rS   rT   rU   rX   r   rS  rU  r   r   r   r   rL  M  s    
rL  c                   @   s$   e Zd Zdd„ Zedƒdd„ ƒZdS )ÚDatabaseOutageTestCasec                 C   r"  )Nc                  _   r#   r$   r   r#  r   r   r   r$  o  ræ   z-DatabaseOutageTestCase.setUp.<locals>.my_taskr%  r&  r   r   r   rX   n  r'  zDatabaseOutageTestCase.setUprM  c                 C   sr   |   ¡  tƒ }t|_td|ƒ}tƒ  W d   ƒ n1 sw   Y  |  |jj¡ |  	|j
j¡ |  	|jj¡ d S )Nz&django.db.backends.utils.CursorWrapper)r$  r   r   Zside_effectr   r    r-   rN  rO  rJ  rþ   rP  )r0   rR  Zcursor_wrapperZpatched_methodr   r   r   Útest_dropped_db_connectiont  s   ÿz1DatabaseOutageTestCase.test_dropped_db_connectionN)rS   rT   rU   rX   r   rW  r   r   r   r   rV  l  s    rV  )NNr$   )8r   r   r   Zmockr   r   Zdjango.db.utilsr   Zdjango.contrib.auth.modelsr   Zdjango.testr   Zdjango.test.testcasesr	   Zdjango.confr
   Zdjango.utilsr   Zbackground_task.exceptionsr   Zbackground_task.tasksr   r   r   Zbackground_task.modelsr   r   Zbackground_taskr   Zbackground_task.settingsr   r&   r   r"   r   r    r%   r*   r+   rV   r`   r|   r‘   r   rÀ   rü   r  r  r  r  r  r!  r4  rC  rL  rV  r   r   r   r   Ú<module>   sT   

FWCL K)
83 