
    ?i                     j    d 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  G d d	e      Zy
)z,
Tests for django_cronjob_utils decorators.
    )date)TestCase)register_task)CronTask)TaskRegistryExecutionPattern)TaskNotFoundErrorc                   ^    e 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d Zd Zy)DecoratorTestsz#Tests for @register_task decorator.c                     t         j                  j                          t         j                  j                          t         j                  j                          y)z Clear registry before each test.N)r   _tasksclear_codes_configs)selfs    E/home/cursorai/projects/django-cronjob-utils/tests/test_decorators.pysetUpzDecoratorTests.setUp   s8    !!#!!###%    c                     t        dd       G d dt                     }| j                  t        j                  d             | j                  |j                  d       | j                  |j                  d       y)zTest @register_task decorator.	test-taskA001c                       e Zd ZdedefdZy)=DecoratorTests.test_register_task_decorator.<locals>.TestTaskr   returnc                     dddS NFSuccess)errormessage r   r   s     r   executezEDecoratorTests.test_register_task_decorator.<locals>.TestTask.execute       !&9==r   N__name__
__module____qualname__r   dictr"   r    r   r   TestTaskr          >D >T >r   r)   N)r   r   
assertTruer   is_registeredassertEqual	task_name	task_coder   r)   s     r   test_register_task_decoratorz+DecoratorTests.test_register_task_decorator   sg    	{F	+	>x 	> 
,	> 	22;?@++[9++V4r   c                 `   t        ddt        j                  ddd       G d dt                     }| j	                  |j
                  t        j                         | j                  |j                         | j	                  |j                  d       | j	                  |j                  d       y	)
z'Test @register_task with configuration.r   r   T   i  )execution_patternretry_on_failuremax_retriestimeoutc                       e Zd ZdedefdZy)?DecoratorTests.test_register_task_with_config.<locals>.TestTaskr   r   c                     dddS r   r    r!   s     r   r"   zGDecoratorTests.test_register_task_with_config.<locals>.TestTask.execute+   r#   r   Nr$   r    r   r   r)   r9   "   s    >D >T >r   r)   N)
r   r   ALWAYSr   r-   r4   r+   r5   r6   r7   r0   s     r   test_register_task_with_configz-DecoratorTests.test_register_task_with_config    s    	.55!

	>x 	>

	> 	335E5L5LM112--q1))40r   c                 f   t        dd       G d dt                     }t        dd       G d dt                     }| j                  t        t	        j
                               d	       | j                  dt	        j
                                | j                  dt	        j
                                y
)z/Test registering multiple tasks with decorator.task-1r   c                       e Zd ZdedefdZy)?DecoratorTests.test_register_task_multiple_tasks.<locals>.Task1r   r   c                 
    ddiS Nr   Fr    r!   s     r   r"   zGDecoratorTests.test_register_task_multiple_tasks.<locals>.Task1.execute7       ''r   Nr$   r    r   r   Task1r@   5       (D (T (r   rD   task-2A002c                       e Zd ZdedefdZy)?DecoratorTests.test_register_task_multiple_tasks.<locals>.Task2r   r   c                 
    ddiS rB   r    r!   s     r   r"   zGDecoratorTests.test_register_task_multiple_tasks.<locals>.Task2.execute<   rC   r   Nr$   r    r   r   Task2rI   :   rE   r   rK      N)r   r   r-   lenr   
list_tasksassertInr   rD   rK   s      r   !test_register_task_multiple_tasksz0DecoratorTests.test_register_task_multiple_tasks3   s    	x	(	(H 	( 
)	( 
x	(	(H 	( 
)	( 	\4467;h 7 7 9:h 7 7 9:r   c                 &   t        dd       G d dt                     } |t        ddd            }| j                  |j                  t        ddd             | j                  |j
                  d       | j                  |j                  d       y	)
z-Test decorator preserves class functionality.r   r   c                       e Zd ZdedefdZy)MDecoratorTests.test_register_task_decorator_preserves_class.<locals>.TestTaskr   r   c                     dddS r   r    r!   s     r   r"   zUDecoratorTests.test_register_task_decorator_preserves_class.<locals>.TestTask.executeG   r#   r   Nr$   r    r   r   r)   rT   E   r*   r   r)   i        )execution_dateN)r   r   r   r-   rX   r.   r/   )r   r)   tasks      r   ,test_register_task_decorator_preserves_classz;DecoratorTests.test_register_task_decorator_preserves_classC   s~    	{F	+	>x 	> 
,	>
 tD!R'89,,d4B.?@50r   c                     t        dd       G d dt                     }| j                  t              5  t        dd       G d dt                     }ddd       y# 1 sw Y   yxY w)	z.Test decorator raises error on duplicate name.r   r   c                       e Zd ZdedefdZy)?DecoratorTests.test_register_task_duplicate_name.<locals>.Task1r   r   c                 
    ddiS rB   r    r!   s     r   r"   zGDecoratorTests.test_register_task_duplicate_name.<locals>.Task1.executeT   rC   r   Nr$   r    r   r   rD   r]   R   rE   r   rD   rG   c                       e Zd ZdedefdZy)?DecoratorTests.test_register_task_duplicate_name.<locals>.Task2r   r   c                 
    ddiS rB   r    r!   s     r   r"   zGDecoratorTests.test_register_task_duplicate_name.<locals>.Task2.executeZ       #U++r   Nr$   r    r   r   rK   r`   X       , , ,r   rK   Nr   r   assertRaises
ValueErrorrP   s      r   !test_register_task_duplicate_namez0DecoratorTests.test_register_task_duplicate_nameP   s^    	{F	+	(H 	( 
,	( z*;/, , 0, +**   AA%c                     t        dd       G d dt                     }| j                  t              5  t        dd       G d dt                     }ddd       y# 1 sw Y   yxY w)	z.Test decorator raises error on duplicate code.r>   r   c                       e Zd ZdedefdZy)?DecoratorTests.test_register_task_duplicate_code.<locals>.Task1r   r   c                 
    ddiS rB   r    r!   s     r   r"   zGDecoratorTests.test_register_task_duplicate_code.<locals>.Task1.executea   rC   r   Nr$   r    r   r   rD   rk   _   rE   r   rD   rF   c                       e Zd ZdedefdZy)?DecoratorTests.test_register_task_duplicate_code.<locals>.Task2r   r   c                 
    ddiS rB   r    r!   s     r   r"   zGDecoratorTests.test_register_task_duplicate_code.<locals>.Task2.executeg   rb   r   Nr$   r    r   r   rK   rn   e   rc   r   rK   Nrd   rP   s      r   !test_register_task_duplicate_codez0DecoratorTests.test_register_task_duplicate_code]   s^    	x	(	(H 	( 
)	( z*8V,, , -, +**rh   c                 p   t        dd       G d dt                     }| j                  |j                  t        j
                         | j                  |j                         | j                  |j                  d       | j                  |j                  d       | j                  |j                         y)z-Test decorator applies default configuration.r   r   c                       e Zd ZdedefdZy)BDecoratorTests.test_register_task_default_config.<locals>.TestTaskr   r   c                 
    ddiS rB   r    r!   s     r   r"   zJDecoratorTests.test_register_task_default_config.<locals>.TestTask.executen   rC   r   Nr$   r    r   r   r)   rs   l   rE   r   r)   r   i,  N)r   r   r-   r4   r   STANDARDassertFalser5   r6   retry_delayassertIsNoner7   r0   s     r   !test_register_task_default_configz0DecoratorTests.test_register_task_default_configj   s    	{F	+	(x 	( 
,	( 	335E5N5NO223--q1--s3(**+r   c                 "   t        ddt        j                         G d dt                     }| j	                  |j
                  t        j                         | j                  |j                         | j	                  |j                  d       y)z*Test decorator with partial configuration.r   r   r4   c                       e Zd ZdedefdZy)BDecoratorTests.test_register_task_partial_config.<locals>.TestTaskr   r   c                 
    ddiS rB   r    r!   s     r   r"   zJDecoratorTests.test_register_task_partial_config.<locals>.TestTask.execute{   rC   r   Nr$   r    r   r   r)   r}   y   rE   r   r)   r   N)	r   r   RERUN_ON_FAILUREr   r-   r4   rv   r5   r6   r0   s     r   !test_register_task_partial_configz0DecoratorTests.test_register_task_partial_configw   su    	{F>N>_>_	`	(x 	( 
a	( 	335E5V5VW223--q1r   c                 2   t         j                  t         j                  t         j                  t         j                  g}t        |      D ]K  \  }}d| }d| }t        |||       G d dt                     }| j                  |j                  |       M y)z+Test decorator with all execution patterns.ztask-A00r{   c                       e Zd ZdedefdZy)@DecoratorTests.test_register_task_all_patterns.<locals>.TestTaskr   r   c                 
    ddiS rB   r    r!   s     r   r"   zHDecoratorTests.test_register_task_all_patterns.<locals>.TestTask.execute   rb   r   Nr$   r    r   r   r)   r      rc   r   r)   N)
r   ru   r;   r   RATE_LIMITED	enumerater   r   r-   r4   )r   patternsipatternr.   r/   r)   s          r   test_register_task_all_patternsz.DecoratorTests.test_register_task_all_patterns   s     %%##--))	
 $H-JAwsIaS	I9i7K,8 , L, X77A .r   c                     t        ddddd       G d dt                     }| j                  |j                         | j	                  |j
                  d       | j	                  |j                  d       y	)
z(Test decorator with retry configuration.r   r   T   iX  )r5   r6   rw   c                       e Zd ZdedefdZy)@DecoratorTests.test_register_task_retry_config.<locals>.TestTaskr   r   c                 
    ddiS rB   r    r!   s     r   r"   zHDecoratorTests.test_register_task_retry_config.<locals>.TestTask.execute   rC   r   Nr$   r    r   r   r)   r      s    (D (T (r   r)   N)r   r   r+   r5   r-   r6   rw   r0   s     r   test_register_task_retry_configz.DecoratorTests.test_register_task_retry_config   so    	!

	(x 	(

	( 	112--q1--s3r   c                 |    t        ddd       G d dt                     }| j                  |j                  d       y)z*Test decorator with timeout configuration.r   r   i   )r7   c                       e Zd ZdedefdZy)BDecoratorTests.test_register_task_timeout_config.<locals>.TestTaskr   r   c                 
    ddiS rB   r    r!   s     r   r"   zJDecoratorTests.test_register_task_timeout_config.<locals>.TestTask.execute   rC   r   Nr$   r    r   r   r)   r      rE   r   r)   N)r   r   r-   r7   r0   s     r   !test_register_task_timeout_configz0DecoratorTests.test_register_task_timeout_config   s<    	{FD	9	(x 	( 
:	( 	))40r   c                     G d dt               }t        dd       G d d|             }| j                  t        j                  d             | j                  |j                  d       | j                  |j                  d       y)z,Test decorator works with class inheritance.c                       e Zd ZdedefdZy)EDecoratorTests.test_register_task_class_inheritance.<locals>.BaseTaskr   r   c                 
    ddiS rB   r    r!   s     r   r"   zMDecoratorTests.test_register_task_class_inheritance.<locals>.BaseTask.execute   rC   r   Nr$   r    r   r   BaseTaskr      s    (D (T (r   r   r   r   c                       e Zd Zy)HDecoratorTests.test_register_task_class_inheritance.<locals>.DerivedTaskN)r%   r&   r'   r    r   r   DerivedTaskr      s    r   r   N)r   r   r+   r   r,   r-   r.   r/   )r   r   r   s      r   $test_register_task_class_inheritancez3DecoratorTests.test_register_task_class_inheritance   su    	(x 	( 
{F	+	( 	 
,	 	22;?@..<..7r   N)r%   r&   r'   __doc__r   r1   r<   rQ   rZ   rg   rp   ry   r   r   r   r   r   r    r   r   r   r      sG    -&	51&; 1,,,
2B(4"18r   r   N)r   datetimer   django.testr   django_cronjob_utils.decoratorsr   django_cronjob_utils.baser   django_cronjob_utils.registryr   r   django_cronjob_utils.exceptionsr	   r   r    r   r   <module>r      s,       9 . H =q8X q8r   