
     h                        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d7dZ d8dZ!e Z"e!Z#d Z$d Z% G d de          Z& G d de          Z' G d de          Z( G d de          Z) G d de          Z* G d de          Z+ G d  d!e          Z, G d" d#e          Z- G d$ d%e          Z. G d& d'e          Z/g Z0 ed()          d*             Z1 G d+ d,e          Z2 G d- d.e          Z3 G d/ d0e          Z4 G d1 d2e          Z5 G d3 d4e          Z6 G d5 d6e          Z7dS )9    N)	timedeltadatetime)patchMock)OperationalError)User)override_settings)TransactionTestCase)settings)timezone)InvalidTaskError)tasksTaskSchedule	TaskProxy)Task)CompletedTask)
background)app_settingsc                 r    t          j        | ||          }t          j        rt	          j        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vals       \/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/background_task/tests/test_tasks.pymocked_run_taskr       s4     .tV
,
,C- 
1J    c                 n    t          j        |           }t          j        rt	          j        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   s     r   mocked_run_next_taskr%   #   s1     
e
$
$C- 
1Jr!   c                      d S N r(   r!   r   
empty_taskr)   2   s    Dr!   c                  >    t                               | |f           d S r'   )	_recordedappend)argkws     r   record_taskr/   6   s     c2Yr!   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestBackgroundDecoratorc                     t          j                    t                    }|                     |t                     |                     t          |t                               t          j        t                    }|                     |t                     |                     t          |t                               d S r'   )r   r   r)   assertNotEqual
assertTrue
isinstancer   selfproxys     r   test_get_proxyz&TestBackgroundDecorator.test_get_proxy<   s    " "":..E:...
5)44555  ,,E:...
5)4455555r!   c                     t          j                    t                    }|                     |j        d            t          j                    t
                    }|                     |j        d           t          j        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/   r4   r5   r   r6   s     r   test_default_namez)TestBackgroundDecorator.test_default_nameF   s    " "":..%RSSS" "";//%STTT ,,
5)44555%RSSSSSr!   c                      t          j        d          t                    }|                     |j        d           d S )Nmytaskr   )r   r   r)   r;   r   r6   s     r   test_specified_namez+TestBackgroundDecorator.test_specified_nameR   s=    / h///
;;X.....r!   c                 
    t          j                    t                    }|                     |j        t                      t          j                    t
                    }|                     |j        t
                     d S r'   )r   r   r)   r;   task_functionr/   r6   s     r   test_task_functionz*TestBackgroundDecorator.test_task_functionV   sj    " "":..,j999" "";//,k:::::r!   c                      t          j                    t                    }|                     t	                      |j                   d S r'   r   r   r)   r;   r   scheduler6   s     r   test_default_schedulez-TestBackgroundDecorator.test_default_schedule]   s<    " "":..88888r!   c                      t          j        d          t                    }|                     t	          d          |j                   d S )N
   rF   run_atrE   r6   s     r   test_schedulez%TestBackgroundDecorator.test_schedulea   sH    - "---j99R000%.AAAAAr!   c                      t          j                    t                    }|                     dt	          |                     d S )Nz6TaskProxy(background_task.tests.test_tasks.empty_task))r   r   r)   r;   strr6   s     r   test_strz TestBackgroundDecorator.test_stre   sH    " "":..EJJ	
 	
 	
 	
 	
r!   c                      t                      t                    }|                     |t                     |                     |j        t                     dS )z!check shortcut to decorator worksN)r   r)   failIfEqualr;   rB   r6   s     r   test_shortcutz%TestBackgroundDecorator.test_shortcutl   sJ    
Z((
+++,j99999r!   c                    t           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                     | |z   S r'   r(   )xys     r   addz5TestBackgroundDecorator.test_launch_sync.<locals>.addt   s    q5Lr!            zTask was createdzCompleted task was createdN)r   r   objectscountr   nowr;   )r7   rX   tctanswers        r   test_launch_syncz(TestBackgroundDecorator.test_launch_syncr   s    		 	 
	 L  "((**A###++--q2DEEE.4466<XYYYYYr!   N)__name__
__module____qualname__r9   r<   r@   rC   rG   rM   rP   rS   rb   r(   r!   r   r1   r1   :   s        6 6 6
T 
T 
T/ / /; ; ;9 9 9B B B
 
 
: : :Z Z Z Z Zr!   r1   c                   $     e Zd Z fdZd Z xZS )TestTaskProxyc                     t          t          |                                             t          j                    t
                    | _        d S r'   )superrg   setUpr   r   r/   r8   r7   	__class__s    r   rj   zTestTaskProxy.setUp   s=    mT""((***'U%''44


r!   c                    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)rn   r.   r   )r   r8   r   r;   r+   popr7   s    r   test_run_taskzTestTaskProxy.test_run_task   s    "b)))"b9==??3334&"---'2	888"tQi000"tQi)--//:::::r!   )rc   rd   re   rj   rq   __classcell__rl   s   @r   rg   rg      sG        5 5 5 5 5; ; ; ; ; ; ;r!   rg   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestTaskSchedulec                 J   |                      dt                      j                   |                      dt          d          j                   |                      dt          d          j                   |                      dt          d          j                   d S )Nr   priorityr   rY   )r;   r   rx   rp   s    r   test_priorityzTestTaskSchedule.test_priority   s    LNN3444L!444=>>>L!444=>>>L!444=>>>>>r!   c                    |                      t          |t                               |                      t          |t                               |                      t          ||z
            t	          d          k               d S )Nr   seconds)
failUnlessr5   r   absr   )r7   d1d2s      r   _within_one_secondz#TestTaskSchedule._within_one_second   sl    
2x00111
2x00111BG	!(<(<(<<=====r!   c                    d dt          d          fD ]@}t          j                    }t          |          j        }|                     ||           At          j                    }t          |          j        }|                     ||           t          j                    t          d          z   }t          |          j        }|                     ||           t          d          j        }|                     |t          j                    t          d          z              t          t          d                    j        }|                     |t          j                    t          d          z              d S )Nr   r{   rK   <   Z   #   )r   r   r^   r   rL   r   )r7   rF   r^   rL   fixed_dts        r   test_run_atzTestTaskSchedule.test_run_at   sa   q)A"6"6"67 	1 	1H,..C!2229F##FC0000lnnS)))0,,,<>>Ib$9$9$99X...5111R(((/29N9N9N(NOOOYr%:%:%:;;;B29N9N9N(NOOOOOr!   c                 J   t          j                    t          d          z   }t          j        d|i          }|                     |j        |           |                     d|j                   |                     t          j        |j	                   |dt          j
        d}t          j        |          }|                     |j        |           |                     d|j                   |                     t          j
        |j	                   t          j        d          }|                     |j        t          j                               t          j        d          }|                     |j        t          j                    t          d          z              t          j        t          |                    }|                     |j        |           |                     d|j                   |                     t          j        |j	                   d S )NrI   r{   rL   r   rY   rL   rx   actionrK   )r   r^   r   r   creater;   rL   rx   SCHEDULEr   RESCHEDULE_EXISTINGr   )r7   r   rF   s      r   test_createzTestTaskSchedule.test_create   s   <>>Ib$9$9$99&(';<<(333H-....@@@&A*>@ @&x00(333H-...98?KKK&q))@@@&r** (21F1F1F F	H 	H 	H  &|8'D'D'DEE(333H-....@@@@@r!   c                 "   t          ddt           j                  }t          j        d                              |          }|                     t          j                    t          d          z   |j                   | 	                    d|j
                   | 	                    t           j        |j                   t          j        ddi                              |          }|                     t          j                    t          d          z   |j                   | 	                    d|j
                   | 	                    t           j        |j                   t           j        }t          j        d|i                              |          }|                     t          j                    t          d          z   |j                   | 	                    d|j
                   | 	                    ||j                   d S )	NrI   rY   r      r{   rx   r   r   )r   r   r   merger   r   r^   r   rL   r;   rx   r   CHECK_EXISTING)r7   defaultrF   r   s       r   
test_mergezTestTaskSchedule.test_merge   s   b1&2&FH H H&r**009921F1F1F F (	1 	1 	1H-...98?KKK&
A77==gFF21F1F1F F (	1 	1 	1H-...98?KKK,&&'9::@@II21F1F1F F (	1 	1 	1H-...11111r!   c           	      j    |                      dt          t          dd                               d S )Nz#TaskSchedule(run_at=10, priority=0)rI   r   rL   rx   )r;   reprr   rp   s    r   	test_reprzTestTaskSchedule.test_repr   sD    > R!!D!D!DEE	G 	G 	G 	G 	Gr!   N)	rc   rd   re   ry   r   r   r   r   r   r(   r!   r   ru   ru      sy        ? ? ?> > >
P P P(A A A42 2 2.G G G G Gr!   ru   c                        e Zd Zd Zd Zd ZdS )TestSchedulingTasksc                 t    d  _         t          j        d           fd            } |d           t          j                                        }                     d|                                           |d         }                     d|j                                        d|j	                   d S )Ntest_background_gets_scheduledr?   c                     | _         d S r'   )result)r   r7   s    r   
set_resultzFTestSchedulingTasks.test_background_gets_scheduled.<locals>.set_result   s     DKKKr!   r   r   z	[[1], {}])
r   r   r   r   r\   allr;   r]   	task_nametask_params)r7   r   	all_taskstasks   `   r   r   z2TestSchedulingTasks.test_background_gets_scheduled   s    		?	@	@	@	! 	! 	! 	! 
A	@	! 	
1L$$&&	IOO--...|94>JJJd&677777r!   c                 X   t           j        }t          j        dt          |                    d             } |              |d           t          j                                        }|                     d|                                           |d         }|                     d|j	                   t          j                    }|                     |t          d	
          z   |j        k                |                     |t          d
          z   |j        k               d S )Ntest_reschedule_existingr   r   rF   c                      d S r'   r(   r(   r!   r   reschedule_fnzCTestSchedulingTasks.test_reschedule_existing.<locals>.reschedule_fn   	     Dr!   r   rJ   r   r   Y   r{   [   )r   r   r   r   r   r\   r   r;   r]   r   r   r^   r}   r   rL   )r7   reschedule_existingr   r   r   r^   s         r   r   z,TestSchedulingTasks.test_reschedule_existing   s*   *>		9".6I"J"J"J
L 
L 
L	 	
L 
L	
 	r""""L$$&&	IOO--...|3T^DDD lnni3333dkABBBi3333dkABBBBBr!   c                 X   t           j        }t          j        dt          |                    d             } |              |d           t          j                                        }|                     d|                                           |d         }|                     d|j	                   t          j                    }|                     |t          d	          z
  |j        k                |                     |t          d	          z   |j        k               d S )
Ntest_check_existingr   r   c                      d S r'   r(   r(   r!   r   check_fnz9TestSchedulingTasks.test_check_existing.<locals>.check_fn  r   r!   r   rJ   r   r   r{   )r   r   r   r   r   r\   r   r;   r]   r   r   r^   r}   r   rL   )r7   check_existingr   r   r   r^   s         r   r   z'TestSchedulingTasks.test_check_existing  s(   %4		4".n"E"E"E
G 
G 
G	 	
G 
G	
 	


"L$$&&	IOO--...|.??? lnni2222T[@AAAi2222T[@AAAAAr!   N)rc   rd   re   r   r   r   r(   r!   r   r   r      sI        8 8 8 C C C0B B B B Br!   r   c                   *     e Zd Z fdZd Zd Z xZS )TestTaskRunnerc                 x    t          t          |                                            t          j        | _        d S r'   )ri   r   rj   r   _runnerrunnerrk   s    r   rj   zTestTaskRunner.setUp-  s,    nd##))+++mr!   c                 j    |                      | j                            t                               d S r'   )failIfr   get_task_to_runr   rp   s    r   test_get_task_to_run_no_tasksz,TestTaskRunner.test_get_task_to_run_no_tasks1  s*    DK//6677777r!   c                 <   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 )Nr>   r   )r   r\   new_tasksaver}   	locked_by	locked_atr   r   r   r   r;   worker_namer   r7   r   locked_tasks      r   test_get_task_to_runz#TestTaskRunner.test_get_task_to_run4  s    |$$XB77		$.///$.///k11%88K4'(((K)T12220+2GHHHK)T1222;#899999r!   )rc   rd   re   rj   r   r   rr   rs   s   @r   r   r   +  sV        $ $ $ $ $8 8 8: : : : : : :r!   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestTaskModelc                    t           j                            d          }|                                 |                     |j        d u            |                     |j        d u            |                    d          }|                     d|j                   | 	                    |j        d u            |                     |j
        |j
                   d S )Nr>   mylock)r   r\   r   r   r}   r   r   lockr;   r   pkr   s      r   test_lock_uncontestedz#TestTaskModel.test_lock_uncontestedD  s    |$$X..		$.///$.///ii));#8999K)T1222+.11111r!   c                    t           j                            d          }|                                 |                     |                    d          d u            |                     |                    d          d u            d S )Nr>   r   	otherlock)r   r\   r   r   r   r   r}   r7   r   s     r   test_lock_contestedz!TestTaskModel.test_lock_contestedO  sr     |$$X..		DIIh''4/000		+..$677777r!   c                 j   t           j                            d          }|                                 |                    d          }t          t          j        dz             }|j        |z
  |_        |                                 | 	                    |                    d          d u            d S )Nr>   r   rY   r{   r   )
r   r\   r   r   r   r   r   BACKGROUND_TASK_MAX_RUN_TIMEr   r   )r7   r   r   	expire_bys       r   test_lock_expiredzTestTaskModel.test_lock_expiredX  s    |$$X..		ii)) |'PST'TVVV	 + 5	 A 	DIIk**d233333r!   c                    t           j                            d          }|                     dt	          |                     t           j                            dd          }|                     dt	          |                     d S )Nr>   My Task)verbose_name)r   r\   r   r;   rO   r   s     r   rP   zTestTaskModel.test_stre  so    |$$X..CII...|$$XI$FFSYY/////r!   c                     t           j                            ddd          }t          j                            d|          }|                                 |                     |j        |           d S )Nbobbob@example.com12345usernameemailpasswordr>   creator)r   r\   create_userr   r   r   r;   r   r7   userr   s      r   test_creatorzTestTaskModel.test_creatork  se    |''>OZa'bb|$$Xt$<<		t,,,,,r!   c                 N   t          j                    t          d          z   }t          j                            dt          j        |          }|                                 |                     |j	        t          j                   |                     |j
        |           d S )Nr   )daysr>   )repeatrepeat_until)r   r^   r   r   r\   r   HOURLYr   r;   r   r   )r7   r   r   s      r   test_repeatzTestTaskModel.test_repeatq  s    |~~	q(9(9(99|$$XdkP\$]]		dk222*L99999r!   c                    t           j                            ddgddidddt          j                            ddd	
                    }|                                 |                                }|                     |j        |j                   |                     |j	        |j	                   |                     |j
        |j
                   |                     |j        |j                   |                     |j        |j                   |                     |j        |j                   |                     |j        |j                   |                     |j        |j                   d S )Nr>   r   qsmyqueuer   r   r   r   r   )r   r   r   rx   r$   r   r   )r   r\   r   r   r   r   create_completed_taskr;   r   r   rx   r$   r   r   r   r   )r7   r   completed_tasks      r   test_create_completed_taskz(TestTaskModel.test_create_completed_taskx  sS   |$$:"L,,eCT_f,gg % 
 
 			335514>BBB3T5EFFF0$-@@@-tz:::4d6GHHH/>>>.<<<4d6GHHHHHr!   N)
rc   rd   re   r   r   r   rP   r   r   r   r(   r!   r   r   r   B  s        	2 	2 	28 8 84 4 40 0 0- - -: : :I I I I Ir!   r   c                   l     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z xZS )	TestTasksc                      t          t                                                      t          j        d           fd            }t          j        d          d             }| _        | _        d S )N
set_fieldsr?   c                  ^    |                                  D ]\  }}t          ||           d S r'   )itemssetattr)fieldskeyvaluer7   s      r   r   z#TestTasks.setUp.<locals>.set_fields  s=    $llnn * *
Uc5))))* *r!   throws_errorc                       t          d          )Nzan errorRuntimeErrorr(   r!   r   r   z%TestTasks.setUp.<locals>.throws_error  s    z***r!   )ri   r   rj   r   r   r   r   )r7   r   r   rl   s   `  r   rj   zTestTasks.setUp  s    i$$&&&		|	,	,	,	* 	* 	* 	* 
-	,	* 
	~	.	.	.	+ 	+ 
/	.	+ %(r!   c                 H    |                      t                                 d S r'   )r   r#   rp   s    r   $test_run_next_task_nothing_scheduledz.TestTasks.test_run_next_task_nothing_scheduled  s    MOO$$$$$r!   c                 4   |                      d           |                     t          | d                     |                     t	                                 |                     t          | d                     |                     | j                   d S )NT)workedr  )r   r   hasattrr}   r#   r  rp   s    r   %test_run_next_task_one_task_scheduledz/TestTasks.test_run_next_task_one_task_scheduled  s~    t$$$GD(++,,,(((h//000$$$$$r!   c                    |                      d           |                      d           |                      d           t          d          D ]#}|                     t                                 $|                     t                                 dD ]L\  }}|                     t          | |                     |                     |t          | |                     Md S )	N1)one2)two3)threerZ   ))r	  r  )r  r
  )r  r  )r   ranger}   r#   r   r  r;   getattr)r7   ifieldr   s       r   *test_run_next_task_several_tasks_scheduledz4TestTasks.test_run_next_task_several_tasks_scheduled  s    C   C   c"""q 	- 	-AOOMOO,,,,MOO$$$H 	: 	:LE5OOGD%00111UGD%$8$89999	: 	:r!   c                    |                                   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   r\   r   r;   r]   r}   r#   rR   
last_error	failed_atattemptsrL   r   r   )r7   r   original_taskfailed_tasks       r   !test_run_next_task_error_handlingz+TestTasks.test_run_next_task_error_handling  sI   L$$&&	IOO--...!! 	(((L$$&&	IOO--...l[3444-5666K0111 	*]-AABBB-5666-566666r!   c                 R   |                      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   r\   r   r;   r]   r   r#   )r7   r   r  s      r   &test_run_next_task_does_not_run_lockedz0TestTasks.test_run_next_task_does_not_run_locked  s    t$$$GD(++,,,L$$&&	IOO--...!!:&&&MOO$$$GD(++,,,L$$&&	IOO--.....r!   c                     |                      d           t          j                                        }|                     d|                                           |d         }|                    d          }|                     t                                 |                     t          | d                     t          t          j        dz             }|j        |z
  |_        |                                 |                     t                                 |                     dt          j                                                   |                     t          | d                     |                     | j                   d S )	NT)lock_overriddenr   r   r  r   rY   r{   )r   r   r\   r   r;   r]   r   r   r#   r  r   r   r   r   r   r}   r   )r7   r   r  r   r   s        r   -test_run_next_task_unlocks_after_MAX_RUN_TIMEz7TestTasks.test_run_next_task_unlocks_after_MAX_RUN_TIME  sI   ---L$$&&	IOO--...!!#((44MOO$$$GD"344555 |'PST'TVVV	 + 5	 A 	(((DL..00111&788999,-----r!   c                    t          j        dd          d             }t          j                    } |             t          j                                        }|                     d|                                           |d         }| 	                    ||j
        k                | 	                    |j
        |z
  t          d          k               | 	                    |j
        |z
  t          d	          k               d S )
N default_schedule_used_for_run_atr   r   c                      d S r'   r(   r(   r!   r   default_schedule_used_for_timezWTestTasks.test_default_schedule_used_for_run_at.<locals>.default_schedule_used_for_time      Dr!   r   r   =   r{   ;   )r   r   r   r^   r   r\   r   r;   r]   r}   rL   r   )r7   r%  r^   r   r   s        r   %test_default_schedule_used_for_run_atz/TestTasks.test_default_schedule_used_for_run_at  s    		AB	O	O	O	 	 
P	O	 lnn&&(((L$$&&	IOO--...|dk)***s*y/D/D/DDEEEs*y/D/D/DDEEEEEr!   c                 .   t          j        dddi          d             } |             t          j                                        }|                     d|                                           |d         }|                     d|j                   d S )N"default_schedule_used_for_priorityrx   rY   r   c                      d S r'   r(   r(   r!   r   r+  z]TestTasks.test_default_schedule_used_for_priority.<locals>.default_schedule_used_for_priority  r   r!   r   r   )r   r   r   r\   r   r;   r]   rx   )r7   r+  r   r   s       r   'test_default_schedule_used_for_priorityz1TestTasks.test_default_schedule_used_for_priority  s    		C$.?
4 
4 
4	 	
4 
4	 	+*,,,L$$&&	IOO--...|DM*****r!   c                    t          j                    t          d          z   }t          j        d|dd          d             }t          j                                        d	          t          d
          z   } ||           t          j                                        }| 	                    d|
                                           |d         }| 	                    ||j                   d S )Nr   r{   non_default_schedule_usedrY   r   r   c                      d S r'   r(   r(   r!   r   r+  zTTestTasks.test_non_default_schedule_used.<locals>.default_schedule_used_for_priority  r   r!   r   )microsecondr   rJ   r   )r   r^   r   r   r   replacer   r\   r   r;   r]   rL   )r7   default_run_atr+  rL   r   r   s         r   test_non_default_schedule_usedz(TestTasks.test_non_default_schedule_used  s    !)B*?*?*??		:.<!#L#L
N 
N 
N	 	
N 
N	 ''A'6629N9N9NN**F;;;;L$$&&	IOO--...|-----r!   c                    t          j        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_ATTEMPTSr?   c                       t          d          )Nfailedr   r(   r!   r    failed_at_set_after_MAX_ATTEMPTSzYTestTasks.test_failed_at_set_after_MAX_ATTEMPTS.<locals>.failed_at_set_after_MAX_ATTEMPTS*  s    x(((r!   r   r   )r   r   r   r\   find_availabler;   r]   r}   r  r   BACKGROUND_TASK_MAX_ATTEMPTSr  r   r#   r   r   r   )r7   r9  	availabler   r   r   s         r   r6  z/TestTasks.test_failed_at_set_after_MAX_ATTEMPTS)  s   		F	G	G	G	) 	) 
H	G	) 	)(***L//11	IOO--...|$.///$A		 	(((L//11	IOO--...L$$&&	IOO--...M17799:::&.2244Q7N,455555r!   c                 >   |                      d          }|                     t          j                                        d           t          j                                        }|                     ||           |                     |j        |j                   d S )Ntest)r>  r   )r   r;   r   r\   r]   firstr   )r7   return_valuer   s      r   test_run_task_return_valuez$TestTasks.test_run_task_return_valueF  s    F33++--q111|!!##t,,,$'22222r!   c                 n    d}|                      d|          }|                     |j        |           d S )Nr   test1)r>  r   )r   r;   r   )r7   r   r   s      r   test_verbose_name_paramz!TestTasks.test_verbose_name_paramM  s;     G,GG*L99999r!   c                     t           j                            ddd          }|                     d|          }|                     |j        |           d S )Nr   r   r   r   test2)r>  r   )r   r\   r   r   r;   r   r   s      r   test_creator_paramzTestTasks.test_creator_paramR  sS    |''>OZa'bbGT::t,,,,,r!   )rc   rd   re   rj   r  r  r  r  r  r!  r)  r-  r4  r6  rA  rD  rG  rr   rs   s   @r   r   r     s        ) ) ) ) )% % %% % %: : :7 7 72/ / /. . .2F F F"+ + +. . . 6 6 6:3 3 3: : :
- - - - - - -r!   r   c                   h    e Zd Zd Z ed          d             Z ed          d             ZdS )MaxAttemptsTestCasec                     t          j        d          d             }|| _        |                                 | _        |                                 | _        | j        j        | _        | j        j        | _        d S )Nfailing taskr?   c                       t          d          )Nerror)	Exceptionr(   r!   r   failing_taskz/MaxAttemptsTestCase.setUp.<locals>.failing_task[  s    G$$$r!   )r   r   rO  task1task2idtask1_idtask2_idr7   rO  s     r   rj   zMaxAttemptsTestCase.setUpZ  st    		~	.	.	.	% 	% 
/	.	% )&&((
&&((


r!   r   MAX_ATTEMPTSc                 p   |                      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   rY   r   )r;   r   rW  r   r\   r]   r#   r   rR  rT  r   r  r   rP  r   assertIsNotNoner  r  )r7   r   s     r   test_max_attempts_onez)MaxAttemptsTestCase.test_max_attempts_onee  s   .222++--q111++--q111))++A.14=AAA.4466:::&.2244Q70!44414:3GHHH3TZ5KLLL^6777^5666++--q111.4466:::::r!   rY   c                 *   |                      t          j        d           t                       |                      t          j                                        d           |                      t          j                                        d           d S )NrY   r   r;   r   rW  r#   r   r\   r]   r   rp   s    r   test_max_attempts_twoz)MaxAttemptsTestCase.test_max_attempts_twoy  s    .222++--q111.4466:::::r!   N)rc   rd   re   rj   r	   rZ  r]  r(   r!   r   rI  rI  X  sw        	& 	& 	& A&&&; ; '&;& A&&&; ; '&; ; ;r!   rI  c                   Z    e Zd Z G d de          Zd Z ed          d             ZdS )InvalidTaskTestCasec                       e Zd ZdS )(InvalidTaskTestCase.SomeInvalidTaskErrorN)rc   rd   re   r(   r!   r   SomeInvalidTaskErrorrb    s        r!   rc  c                      t          j        d           fd            }| _                                          _         j        j         _        d S )NrK  r?   c                  .                          d          )Ninvalid)rc  rp   s   r   rO  z/InvalidTaskTestCase.setUp.<locals>.failing_task  s    ++I666r!   )r   r   rO  rP  rR  rS  rU  s   ` r   rj   zInvalidTaskTestCase.setUp  sa    		~	.	.	.	7 	7 	7 	7 
/	.	7 )&&((

r!   rY   rV  c                 *   |                      t          j        d           t                       |                      t          j                                        d           |                      t          j                                        d           d S )NrY   r   r   r\  rp   s    r   test_invalid_taskz%InvalidTaskTestCase.test_invalid_task  r^  r!   N)rc   rd   re   r   rc  rj   r	   rh  r(   r!   r   r`  r`    sx            /   & & & A&&&; ; '&; ; ;r!   r`  c                       e Zd Zd Zd ZdS )ArgumentsWithDictTestCasec                 P    t          j        d          d             }|| _        d S )NrK  r?   c                     d S r'   r(   )ds    r   r   z-ArgumentsWithDictTestCase.setUp.<locals>.task  r&  r!   )r   r   r   r   s     r   rj   zArgumentsWithDictTestCase.setUp  s5    		~	.	.	.	 	 
/	.				r!   c                    |                      t          j                                        d           ddd}|                     |           |                      t          j                                        d           t                       |                      t          j                                        d           d S )Nr   rY   r   )iV  ig+  )r;   r   r\   r]   r   r#   )r7   rm  s     r   !test_task_with_dictionary_in_argsz;ArgumentsWithDictTestCase.test_task_with_dictionary_in_args  s    ++--q111a  		!++--q111++--q11111r!   N)rc   rd   re   rj   ro  r(   r!   r   rj  rj    s2          2 2 2 2 2r!   rj  named_queuer$   c                 :    t                               |            d S r'   )completed_named_queue_tasksr,   )messages    r   named_queue_taskru    s    &&w/////r!   c                        e Zd Zd Zd Zd ZdS )NamedQueueTestCasec                 ~    t          d           t          d           |                     dt          d           d S )NrC  rp  rq  Task should be processedmsgru  r#   assertInrs  rp   s    r   test_process_queuez%NamedQueueTestCase.test_process_queue  sA    !!!M****g:@Z[[[[[r!   c                 z    t          d           t                       |                     dt          d           d S )NrF  ry  rz  r|  rp   s    r   test_process_all_tasksz)NamedQueueTestCase.test_process_all_tasks  s9    !!!g:@Z[[[[[r!   c                     t          d           t          d           |                     dt          d           t                       d S )Ntest3other_named_queuerq  zTask should be ignoredrz  )ru  r#   assertNotInrs  rp   s    r   test_process_other_queuez+NamedQueueTestCase.test_process_other_queue  sL    !!!/0000"=C[\\\r!   N)rc   rd   re   r~  r  r  r(   r!   r   rw  rw    sG        \ \ \
\ \ \
    r!   rw  c                        e Zd Zd Zd Zd ZdS )RepetitionTestCasec                 L    t          j                    d             }|| _        d S )Nc                      d S r'   r(   r   r   s     r   my_taskz)RepetitionTestCase.setUp.<locals>.my_task  r&  r!   r   r   r  r7   r  s     r   rj   zRepetitionTestCase.setUp  0    					 	 
		r!   c                 n   t          j                    t          d          z   }|                     ddt          j        |d          }|                     |j        t          j                   |                     |j        |           t          j
                     t          j        d           |                     t          j                            t          j                                                  d           t          j                            t          j                  }|                     |j        |j                   |                     |j        |j                   |                     |                                |                                           |                     |j        |j                   |                     |j        |j                   |                     |j        |j        z
  t          d	                     |                     |j        |j                   d S )
Nr   weeksztest-repeatbarzTest repeat)foor   r   r         ?r   hours)r   r^   r   r  r   r   r;   r   r   r   r#   r   r   r\   filterr]   getr3   rR  r   params	task_hashr   rL   r7   r   old_taskr   s       r   r   zRepetitionTestCase.test_repeat  s   |~~	(:(:(::<<;%&   
 
 	$+666.===
3,,DK,@@FFHH!LLL<##4;#77HK555+X-?@@@**HOO,=,=>>>+X-?@@@.0EFFF(/HO;ia>P>P>PQQQ.0EFFFFFr!   c                    t          j                    t          d          z   }|                     dt          j        |d          }t          j                    t          d          z
  |_        |                                 t          j	                     t          j        d           |                     t          j                            t          j                                                  d           t          j                            t          j                  }|                     |j        |j                   |                     |j        |j        z
  t          dd                     |                     |j        t          j                    k               |                     |j        t          j                    z
  t          d	          k               d S )
Nr   r  ztest-repetitionzTest repetition in future)r   r   r   r  r  )r  r  r  )r   r^   r   r  r   r   rL   r   r   r#   r   r   r;   r\   r  r]   r  r3   rR  r4   r  s       r   test_repetition_in_futurez,RepetitionTestCase.test_repetition_in_future  sw   |~~	(:(:(::<<;%4	   
 
 #,..91+=+=+==
3,,DK,@@FFHH!LLL<##4;#77HK555(/HO;iaWX>Y>Y>YZZZ(,..89998<>>9ia>P>P>PPQQQQQr!   N)rc   rd   re   rj   r   r  r(   r!   r   r  r    sI          G G G0R R R R Rr!   r  c                   h    e Zd Zd Z ed          d             Z ed          d             ZdS )QuerySetManagerTestCasec                    t          j                    d             }t          j                    d             }t          j                            ddd          | _        t          j                            ddd          | _         |            | _         || j                  | _         |            | _	         || j                  | _
        d S )	Nc                      dS Ng        r(   r(   r!   r   succeeding_taskz6QuerySetManagerTestCase.setUp.<locals>.succeeding_task      3r!   c                      ddz  S Nr   r(   r(   r!   r   rO  z3QuerySetManagerTestCase.setUp.<locals>.failing_task      Q3Jr!   r   r   r   r   bob2r   )r   r   r   r\   r   user1user2task_all	task_userfailing_task_allfailing_task_userr7   r  rO  s      r   rj   zQuerySetManagerTestCase.setUp  s    					 	 
		 
				 	 
		 \--uDU`g-hh
\--vEVah-ii
'))(<<< ,!-dj!A!A!Ar!   r   rV  c                 j   |                      t          t          j                                                  d           |                      t          t          j                            | j                            d           |                      t          t          j                            | j                            d           t          d          D ]}t                       |                      t          t          j                                                  d           |                      t          t          j                            | j                            d           |                      t          t          j                            | j                            d           d S )N   rY   r   )
r;   lenr   r\   r   
created_byr  r  r  r#   r7   r  s     r   test_task_managerz)QuerySetManagerTestCase.test_task_manager  s@   T\--//00!444T\44TZ@@AA1EEET\44TZ@@AA1EEEq 	 	AOOOOT\--//00!444T\44TZ@@AA1EEET\44TZ@@AA1EEEEEr!   c           	      	   |                      t          t          j                            | j                            d           |                      t          t          j                            | j                            d           |                      t          t          j                                                  d           |                      t          t          j                            | j                                                            d           |                      t          t          j                            t          d                              d           |                      t          t          j        	                                          d           |                      t          t          j                            | j                  	                                          d           |                      t          t          j        	                    t          d                              d           t          d          D ]}t                       |                      t          t          j                            | j                            d           |                      t          t          j                            | j                            d           |                      t          t          j                                                  d           |                      t          t          j                            | j                                                            d           |                      t          t          j                            t          d                              d           |                      t          t          j        	                                          d           |                      t          t          j                            | j                  	                                          d           |                      t          t          j        	                    t          d                              d           d S )Nr   r   r  )withinr  rY   )r;   r  r   r\   r  r  r  r8  r   	succeededr  r#   r  s     r   test_completed_task_managerz3QuerySetManagerTestCase.test_completed_task_manager  s   ]2==djIIJJANNN]2==djIIJJANNN]299;;<<a@@@]2==djIIPPRRSSUVWWW]299QRASASAS9TTUUWXYYY]2<<>>??CCC]2==djIISSUUVVXYZZZ]2<<ITUDVDVDV<WWXXZ[\\\q 	 	AOOOO]2==djIIJJANNN]2==djIIJJANNN]299;;<<a@@@]2==djIIPPRRSSUVWWW]299QRASASAS9TTUUWXYYY]2<<>>??CCC]2==djIISSUUVVXYZZZ]2<<ITUDVDVDV<WWXXZ[\\\\\r!   N)rc   rd   re   rj   r	   r  r  r(   r!   r   r  r    s        B B B  A&&&F F '&F A&&&] ] '&] ] ]r!   r  c                       e Zd Zd Zd ZdS )PriorityTestCasec                     t          j                    d             }t          j                    t	          d          z
  } |d|          | _         |d|          | _        d S )Nc                      d S r'   r(   r(   r!   r   r>   z&PriorityTestCase.setUp.<locals>.mytask0  r&  r!   r   )minutesc   )rx   rF   )r   r   r   r^   r   high_priority_tasklow_priority_task)r7   r>   rL   s      r   rj   zPriorityTestCase.setUp/  sv    					 	 
		 )A"6"6"66"(&"v"F"F"F!'f!E!E!Er!   c                    |                      | j        j        d           |                      | j        j        d           t          j                                        }|                      |                                d           |                      |                                | j                   |                      t          |          d         | j                   | 
                    t          j                            | j        j                                                             | 
                    t          j                            | j        j                                                             t                       |                     t          j                            | j        j                                                             | 
                    t          j                            | j        j                                                             t                       |                     t          j                            | j        j                                                             |                     t          j                            | j        j                                                             d S )Nr  r  rY   rw   )r;   r  rx   r  r   r\   r:  r]   r?  listassertFalser   r  existsr#   r4   )r7   r<  s     r   ry   zPriorityTestCase.test_priority9  s"   092>>>/8"===L//11	**A...**D,CDDDi,d.DEEE.55t?V?_5``ggiijjj.55t?U?^5__ffhhiii-44d>U>^4__ffhhiii.55t?U?^5__ffhhiii-44d>U>^4__ffhhiii-44d>T>]4^^eegghhhhhr!   N)rc   rd   re   rj   ry   r(   r!   r   r  r  -  s:        F F Fi i i i ir!   r  c                   d    e Zd Zd Z ed          d             Z ed          d             ZdS )LoggingTestCasec                     t          j                    d             }t          j                    d             }|| _        || _        d S )Nc                      dS r  r(   r(   r!   r   r  z.LoggingTestCase.setUp.<locals>.succeeding_taskP  r  r!   c                      ddz  S r  r(   r(   r!   r   rO  z+LoggingTestCase.setUp.<locals>.failing_taskT  r  r!   )r   r   r  rO  r  s      r   rj   zLoggingTestCase.setUpO  sb    					 	 
		 
				 	 
		  /(r!   background_task.tasks.loggerc                    |                                   t                       |                     |j        j                   |                     |j        j                   |                     |j        j                   d S r'   )r  r#   r  warningcalledrM  criticalr7   mock_loggers     r   test_success_loggingz$LoggingTestCase.test_success_logging[  sq    ,3444*1222-455555r!   c                    |                                   t                       |                     |j        j                   |                     |j        j                   |                     |j        j                   d S r'   )rO  r#   r  r  r  r4   rM  r  r  s     r   test_error_loggingz"LoggingTestCase.test_error_loggingc  so    ,3444)0111-455555r!   N)rc   rd   re   rj   r   r  r  r(   r!   r   r  r  M  sq        
) 
) 
) U)**6 6 +*6 U)**6 6 +*6 6 6r!   r  c                   <    e Zd Zd Z ed          d             ZdS )DatabaseOutageTestCasec                 L    t          j                    d             }|| _        d S )Nc                      d S r'   r(   r  s     r   r  z-DatabaseOutageTestCase.setUp.<locals>.my_tasko  r&  r!   r  r  s     r   rj   zDatabaseOutageTestCase.setUpn  r  r!   r  c                    |                                   t                      }t          |_        t	          d|          5 }t                       d d d            n# 1 swxY w Y   |                     |j        j                   | 	                    |j
        j                   | 	                    |j        j                   d S )Nz&django.db.backends.utils.CursorWrapper)r  r   r   side_effectr   r#   r4   r  r  r  rM  r  )r7   r  cursor_wrapperpatched_methods       r   test_dropped_db_connectionz1DatabaseOutageTestCase.test_dropped_db_connectiont  s    %5" ;^LL 	P^OOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	+2333*1222-455555s   AA!AN)rc   rd   re   rj   r   r  r(   r!   r   r  r  l  sJ           U)**6 6 +*6 6 6r!   r  )NNr'   )8r   r   r   mockr   r   django.db.utilsr   django.contrib.auth.modelsr   django.testr	   django.test.testcasesr
   django.confr   django.utilsr   background_task.exceptionsr   background_task.tasksr   r   r   background_task.modelsr   r   background_taskr   background_task.settingsr   r+   r    r%   r   r#   r)   r/   r1   rg   ru   r   r   r   r   rI  r`  rj  rs  ru  rw  r  r  r  r  r  r(   r!   r   <module>r     s    ( ( ( ( ( ( ( (         , , , , , , + + + + + + ) ) ) ) ) ) 5 5 5 5 5 5             ! ! ! ! ! ! 7 7 7 7 7 7 @ @ @ @ @ @ @ @ @ @ ' ' ' ' ' ' 0 0 0 0 0 0 & & & & & & 1 1 1 1 1 1		 	 	 		 	 	 	 $	 	 	     CZ CZ CZ CZ CZ1 CZ CZ CZL; ; ; ; ;' ; ; ;"TG TG TG TG TG* TG TG TGn@B @B @B @B @B- @B @B @BF: : : : :( : : :.II II II II II' II II IIXG- G- G- G- G-# G- G- G-T&; &; &; &; &;- &; &; &;R; ; ; ; ;- ; ; ;,2 2 2 2 2 3 2 2 2  !  -   0 0 ! 0    ,   &5R 5R 5R 5R 5R, 5R 5R 5Rp0] 0] 0] 0] 0]1 0] 0] 0]fi i i i i* i i i@6 6 6 6 6) 6 6 6>6 6 6 6 60 6 6 6 6 6r!   