Ë
    oAi,  ã                   óà   — 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
 ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZ  G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)z4
Tests for django_cronjob_utils management command.
é    )Údate)ÚStringIO)Úpatch)ÚTestCase)Úcall_command)ÚCommandError)ÚTaskRegistryÚExecutionPattern)ÚCronTask)ÚCronExecution)ÚTaskNotFoundErrorÚConcurrentExecutionErrorc                   ó(   — e Zd ZdZdZdZdedefd„Zy)ÚTestTaskz'Test task for management command tests.ú	test-taskÚA001r   Úreturnc                 ó   — dddœS ©NFÚSuccess)ÚerrorÚmessage© ©Úselfr   s     úM/home/cursorai/projects/django-cronjob-utils/tests/test_management_command.pyÚexecutezTestTask.execute   ó   € Ø¨9Ñ5Ð5ó    N©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	task_nameÚ	task_coder   Údictr   r   r   r   r   r      s"   „ Ù1à€IØ€Ið6˜Dð 6 Tô 6r   r   c                   ó(   — e Zd ZdZdZdZdedefd„Zy)ÚFailingTaskzTask that fails.úfailing-taskÚA002r   r   c                 ó   — ddddœS )NTúTask failedÚFAIL)r   r   Ú
error_coder   r   s     r   r   zFailingTask.execute    s   € Ø¨-ÀvÑNÐNr   Nr    r   r   r   r)   r)      s%   „ Ùà€IØ€IðO˜Dð O Tô Or   r)   c                   ó@   — e Zd ZdZdZdZej                  Zde	de
fd„Zy)ÚSkippedTaskzTask that gets skipped.úskipped-taskÚA003r   r   c                 ó   — dddœS r   r   r   s     r   r   zSkippedTask.execute+   r   r   N)r!   r"   r#   r$   r%   r&   r
   ÚSTANDARDÚexecution_patternr   r'   r   r   r   r   r1   r1   $   s.   „ Ù!à€IØ€IØ(×1Ñ1Ðð6˜Dð 6 Tô 6r   r1   c                   ój   — 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d„ Zd„ Zy)ÚManagementCommandTestsz+Tests for run_cron_task management command.c                 óZ  — t         j                  j                  «        t         j                  j                  «        t         j                  j                  «        t        j
                  ddt        «       t        j
                  ddt        «       t        j
                  ddt        «       y)zSet up test fixtures.r   r   r*   r+   r2   r3   N)	r	   Ú_tasksÚclearÚ_codesÚ_configsÚregisterr   r)   r1   )r   s    r   ÚsetUpzManagementCommandTests.setUp2   sn   € ä×Ñ×!Ñ!Ô#Ü×Ñ×!Ñ!Ô#Ü×Ñ×#Ñ#Ô%ä×Ñ˜k¨6´8Ô<Ü×Ñ˜n¨f´kÔBÜ×Ñ˜n¨f´kÕBr   c                 ób  — t        «       }t        ddd|¬«       |j                  «       }| j                  d|«       | j                  d|«       t        j
                  j                  dt        dd	d
«      ¬«      }| j                  |j                  «       | j                  |j                  «       y)zTest running a successful task.Úrun_cron_taskr   ú
2024-01-15©Ústdoutúcompleted successfullyr   r   éè  é   é   ©r&   Úexecution_dateN)r   r   ÚgetvalueÚassertInr   ÚobjectsÚgetr   Ú
assertTrueÚ	completedÚsuccess©r   ÚoutÚoutputÚ	executions       r   Útest_run_task_successz,ManagementCommandTests.test_run_task_success<   s™   € ä‹jˆÜØØØØõ		
ð —‘“ˆØ�‰Ð.°Ô7Ø�‰�i Ô(ô "×)Ñ)×-Ñ-ØÜ  a¨Ó,ð .ó 
ˆ	ð 	�‰˜	×+Ñ+Ô,Ø�‰˜	×)Ñ)Õ*r   c                 óœ  — t        «       }t        «       }t        ddd||¬«      }| j                  |d«       |j                  «       }| j	                  d|«       | j	                  d|«       t
        j                  j                  dt        d	dd
«      ¬«      }| j                  |j                  «       | j                  |j                  «       y)zTest running a failing task.rA   r*   rB   )rD   ÚstderrrG   Úfailedr-   r+   rF   rH   rI   N)r   r   ÚassertEqualrK   rL   r   rM   rN   r   rO   rP   ÚassertFalserQ   )r   rS   ÚerrÚ	exit_coderT   rU   s         r   Útest_run_task_failurez,ManagementCommandTests.test_run_task_failureR   s¶   € ä‹jˆÜ‹jˆä ØØØØØô
ˆ	ð 	×Ñ˜ AÔ&Ø—‘“ˆØ�‰�h Ô'Ø�‰�m VÔ,ô "×)Ñ)×-Ñ-ØÜ  a¨Ó,ð .ó 
ˆ	ð 	�‰˜	×+Ñ+Ô,Ø×Ñ˜×*Ñ*Õ+r   c                 óÂ   — t        «       }t        ddd|¬«      }| j                  |d«       |j                  «       }| j	                  d|«       | j	                  d|«       y)z!Test running a non-existent task.rA   znon-existent-taskrB   rC   rG   z	not foundN)r   r   rZ   rK   rL   ©r   rS   r]   rT   s       r   Útest_run_task_not_foundz.ManagementCommandTests.test_run_task_not_foundl   sY   € ä‹jˆä ØØØØô	
ˆ	ð 	×Ñ˜ AÔ&Ø—‘“ˆØ�‰�k 6Ô*Ø�‰Ð)¨6Õ2r   c                 ó  — t        «       }| j                  t        «      5 }t        ddd|¬«       ddd«       | j	                  dt        j                  «      «       | j	                  dt        |j                  «      «       y# 1 sw Y   ŒTxY w)z+Test running task with invalid date format.rA   r   zinvalid-daterC   NzInvalid date format)r   ÚassertRaisesr   r   rL   ÚstrÚ	exception)r   rS   Úcms      r   Ú!test_run_task_invalid_date_formatz8ManagementCommandTests.test_run_task_invalid_date_format|   sl   € ä‹jˆà×Ñœ|Ô,°ÜØØØØõ	÷ -ð 	�‰Ð+¬S°·±Ó->Ô?Ø�‰�n¤c¨"¯,©,Ó&7Õ8÷ -Ð,ús    BÂBc           	      ó   — t         j                  j                  ddt        ddd«      dd¬«       t	        «       }t        ddd	|¬
«      }| j                  |d«       |j                  «       }| j                  d|«       | j                  d|«       y)z&Test running a task that gets skipped.r3   r2   rF   rG   rH   T©r&   r%   rJ   rP   rQ   rA   rB   rC   r   ÚskippedzAlready executedN)	r   rM   Úcreater   r   r   rZ   rK   rL   r`   s       r   Útest_run_task_skippedz,ManagementCommandTests.test_run_task_skipped‹   sŽ   € ô 	×Ñ×$Ñ$ØØ$Ü  a¨Ó,ØØð 	%ô 	
ô ‹jˆÜ ØØØØô	
ˆ	ð 	×Ñ˜ AÔ&Ø—‘“ˆØ�‰�i Ô(Ø�‰Ð(¨&Õ1r   c           	      ór  — t         j                  j                  ddt        ddd«      dd¬«       t	        «       }t        ddd	d
|¬«       |j                  «       }| j                  d|«       t         j                  j                  dt        ddd«      ¬«      }| j                  |j                  «       d«       y)z&Test running task with --force option.r   r   rF   rG   rH   Tri   rA   rB   ú--forcerC   rE   rI   é   N©r   rM   rk   r   r   r   rK   rL   ÚfilterrZ   Úcount©r   rS   rT   Ú
executionss       r   Útest_run_task_force_optionz1ManagementCommandTests.test_run_task_force_option£   ó¸   € ô 	×Ñ×$Ñ$ØØ!Ü  a¨Ó,ØØð 	%ô 	
ô ‹jˆÜØØØØØõ	
ð —‘“ˆØ�‰Ð.°Ô7ô #×*Ñ*×1Ñ1ØÜ  a¨Ó,ð 2ó 
ˆ
ð 	×Ñ˜×)Ñ)Ó+¨QÕ/r   c           	      ór  — t         j                  j                  ddt        ddd«      dd¬«       t	        «       }t        ddd	d
|¬«       |j                  «       }| j                  d|«       t         j                  j                  dt        ddd«      ¬«      }| j                  |j                  «       d«       y)z&Test running task with --rerun option.r   r   rF   rG   rH   Tri   rA   rB   ú--rerunrC   rE   rI   ro   Nrp   rs   s       r   Útest_run_task_rerun_optionz1ManagementCommandTests.test_run_task_rerun_optionÁ   rv   r   c           	      ó  — t         j                  j                  ddt        ddd«      d¬«       t	        «       }t        ddd	|¬
«      }| j                  |d«       |j                  «       }| j                  d|j                  «       «       y)z3Test running task when concurrent execution exists.r   r   rF   rG   rH   F)r&   r%   rJ   rP   rA   rB   rC   ro   zalready runningN)
r   rM   rk   r   r   r   rZ   rK   rL   Úlowerr`   s       r   Ú"test_run_task_concurrent_executionz9ManagementCommandTests.test_run_task_concurrent_executionß   sƒ   € ô 	×Ñ×$Ñ$ØØ!Ü  a¨Ó,Øð	 	%ô 	
ô ‹jˆÜ ØØØØô	
ˆ	ð 	×Ñ˜ AÔ&Ø—‘“ˆØ�‰Ð'¨¯©«Õ8r   c                 ó®  —  G d„ dt         «      }t        j                  dd|«       t        «       }t	        ddd|¬«      }| j                  |d«       |j                  «       }| j                  d	|«       t        j                  j                  dt        d
dd«      ¬«      }| j                  |j                  «       | j                  |j                  «       y)z+Test command handles unexpected exceptions.c                   ó$   — e Zd ZdZdZdedefd„Zy)úNManagementCommandTests.test_run_task_exception_handling.<locals>.ExceptionTaskúexception-taskÚA004r   r   c                 ó   — t        d«      ‚)NúUnexpected error)ÚRuntimeErrorr   s     r   r   zVManagementCommandTests.test_run_task_exception_handling.<locals>.ExceptionTask.executeü   s   € Ü"Ð#5Ó6Ð6r   N)r!   r"   r#   r%   r&   r   r'   r   r   r   r   ÚExceptionTaskr   ø   s   „ Ø(ˆIØˆIð7 Dð 7¨Tô 7r   r…   r€   r�   rA   rB   rC   rG   rƒ   rF   rH   rI   N)r   r	   r>   r   r   rZ   rK   rL   r   rM   rN   r   rO   rP   r[   rQ   )r   r…   rS   r]   rT   rU   s         r   Ú test_run_task_exception_handlingz7ManagementCommandTests.test_run_task_exception_handlingõ   sÀ   € ô	7œHô 	7ô 	×ÑÐ.°¸ÔFä‹jˆÜ ØØØØô	
ˆ	ð 	×Ñ˜ AÔ&Ø—‘“ˆØ�‰Ð(¨&Ô1ô "×)Ñ)×-Ñ-ØÜ  a¨Ó,ð .ó 
ˆ	ð 	�‰˜	×+Ñ+Ô,Ø×Ñ˜×*Ñ*Õ+r   c                 ó  — g d¢}|D ]=  }t        «       }t        dd||¬«       |j                  «       }| j                  d|«       Œ? t        j
                  j                  d¬«      }| j                  |j                  «       d«       y	)
z&Test running task for different dates.)rB   z
2024-01-16z
2024-01-17rA   r   rC   rE   r   )r&   é   N)	r   r   rK   rL   r   rM   rq   rZ   rr   )r   ÚdatesÚdate_strrS   rT   rt   s         r   Útest_run_task_different_datesz4ManagementCommandTests.test_run_task_different_dates  s|   € â:ˆãˆHÜ“*ˆCÜØØØØõ	ð —\‘\“^ˆFØ�M‰MÐ2°FÕ;ð ô #×*Ñ*×1Ñ1¸FÐ1ÓCˆ
Ø×Ñ˜×)Ñ)Ó+¨QÕ/r   c                 ó  — t        «       }t        ddd|¬«       |j                  «       }| j                  d|«       t        j
                  j                  dt        ddd	«      ¬
«      }| j                  |j                  «       y)z/Test running task with future date (edge case).rA   r   z
2030-12-31rC   rE   r   iî  é   é   rI   N©
r   r   rK   rL   r   rM   rN   r   rO   rP   rR   s       r   Ú#test_run_task_edge_case_future_datez:ManagementCommandTests.test_run_task_edge_case_future_date)  sw   € ä‹jˆÜØØØØõ		
ð —‘“ˆØ�‰Ð.°Ô7ä!×)Ñ)×-Ñ-ØÜ  b¨"Ó-ð .ó 
ˆ	ð 	�‰˜	×+Ñ+Õ,r   c                 ó  — t        «       }t        ddd|¬«       |j                  «       }| j                  d|«       t        j
                  j                  dt        ddd«      ¬	«      }| j                  |j                  «       y
)z-Test running task with past date (edge case).rA   r   z
2020-01-01rC   rE   r   iä  rG   rI   Nr�   rR   s       r   Ú!test_run_task_edge_case_past_datez8ManagementCommandTests.test_run_task_edge_case_past_date<  sw   € ä‹jˆÜØØØØõ		
ð —‘“ˆØ�‰Ð.°Ô7ä!×)Ñ)×-Ñ-ØÜ  a¨Ó+ð .ó 
ˆ	ð 	�‰˜	×+Ñ+Õ,r   c                 ó†   — t        «       }| j                  t        «      5  t        d|¬«       ddd«       y# 1 sw Y   yxY w)z$Test command with missing arguments.rA   rC   N)r   rc   r   r   )r   rS   s     r   Útest_run_task_missing_argumentsz6ManagementCommandTests.test_run_task_missing_argumentsO  s-   € ä‹jˆà×Ñœ|Õ,Ü˜°Õ5÷ -×,Ñ,ús	    7·A c                 ó  — ddl m} ddl}|j                  «       } |«       }|j	                  |«       |j                  «       }| j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       y)zTest command help output.r   )ÚCommandNr%   r   rn   rx   )Ú6django_cronjob_utils.management.commands.run_cron_taskr–   ÚargparseÚArgumentParserÚadd_argumentsÚformat_helprL   )r   r–   r˜   ÚparserÚcmdÚhelp_outputs         r   Útest_run_task_helpz)ManagementCommandTests.test_run_task_helpV  sz   € õ 	SÛð ×(Ñ(Ó*ˆÙ‹iˆØ×Ñ˜&Ô!ð ×(Ñ(Ó*ˆð 	�‰�k ;Ô/Ø�‰�f˜kÔ*Ø�‰�i Ô-Ø�‰�i Õ-r   N)r!   r"   r#   r$   r?   rV   r^   ra   rg   rl   ru   ry   r|   r†   r‹   r�   r’   r”   rŸ   r   r   r   r8   r8   /   sR   „ Ù5òCò+ò,,ò43ò 9ò2ò00ò<0ò<9ò,,ò@0ò(-ò&-ò&6ó.r   r8   N)r$   Údatetimer   Úior   Úunittest.mockr   Údjango.testr   Údjango.core.managementr   Údjango.core.management.baser   Údjango_cronjob_utils.registryr	   r
   Údjango_cronjob_utils.baser   Údjango_cronjob_utils.modelsr   Údjango_cronjob_utils.exceptionsr   r   r   r)   r1   r8   r   r   r   Ú<module>rª      s^   ðñõ Ý Ý Ý  Ý /Ý 4ß HÝ .Ý 5ß Wô6ˆxô 6ôO�(ô Oô6�(ô 6ô|.˜Xõ |.r   