Ë
    ¸?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Ñ3Ô5E×5LÑ5LÔ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ó 	>ó 
,ð	>ñ
 ¤t¨D°!°RÓ'8Ô9ˆØ×Ñ˜×,Ñ,¬d°4¸¸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Õ*Ü˜8 VÓ,ô,œó ,ó -ð,÷ +×*Ñ*ú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Ñ3Ô5E×5NÑ5NÔ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Ñ3Ô5E×5VÑ5VÔ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Ö-‰JˆAˆwØ ˜s˜ˆIØ˜a˜S˜	ˆIä˜9 iÀ7Ô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<   € ä	�{ F°DÔ	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8�Xõ q8r   