
    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6D 6T 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6D 6T 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    !!#!!###%k68<nfkBnfk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'mV, "))--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&k6*)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->?nc",,&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7D 7T 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    	7H 	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MM2F;  #**11F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;/fk*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20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6x 6O( O6( 6|.X |.r   