def test_check_job_status_task_sets_jobs_to_error(mocker, sample_template): mock_celery = mocker.patch('app.celery.tasks.notify_celery.send_task') job = create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(hours=2), scheduled_for=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_IN_PROGRESS) job_2 = create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=29), job_status=JOB_STATUS_IN_PROGRESS) with pytest.raises(expected_exception=JobIncompleteError) as e: check_job_status() assert str(job.id) in e.value.message assert str(job_2.id) not in e.value.message # job 2 not in celery task mock_celery.assert_called_once_with(name=TaskNames.PROCESS_INCOMPLETE_JOBS, args=([str(job.id)], ), queue=QueueNames.JOBS) assert job.job_status == JOB_STATUS_ERROR assert job_2.job_status == JOB_STATUS_IN_PROGRESS
def test_check_job_status_task_sets_jobs_to_error(mocker, sample_template): mock_celery = mocker.patch('app.celery.tasks.process_incomplete_jobs.apply_async') job = create_job( template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(hours=2), scheduled_for=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_IN_PROGRESS ) job_2 = create_job( template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=29), job_status=JOB_STATUS_IN_PROGRESS ) check_job_status() # job 2 not in celery task mock_celery.assert_called_once_with( [[str(job.id)]], queue=QueueNames.JOBS ) assert job.job_status == JOB_STATUS_ERROR assert job_2.job_status == JOB_STATUS_IN_PROGRESS
def test_check_job_status_task_raises_job_incomplete_error_for_multiple_jobs( mocker, sample_template): mock_celery = mocker.patch(SEND_TASK_MOCK_PATH) job = create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(hours=2), scheduled_for=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_IN_PROGRESS) job_2 = create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(hours=2), scheduled_for=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_IN_PROGRESS) with pytest.raises(expected_exception=JobIncompleteError) as e: check_job_status() assert str(job.id) in e.value.message assert str(job_2.id) in e.value.message mock_celery.assert_called_once_with(name=TaskNames.PROCESS_INCOMPLETE_JOBS, args=([str(job.id), str(job_2.id)], ), queue=QueueNames.JOBS)
def test_check_job_status_task_does_not_call_process_incomplete_jobs_for_non_scheduled_pending_jobs( mocker, sample_template, ): mock_celery = mocker.patch( 'app.celery.tasks.process_incomplete_jobs.apply_async') create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(hours=2), job_status=JOB_STATUS_PENDING) check_job_status() assert not mock_celery.called
def test_check_job_status_task_calls_process_incomplete_jobs_for_pending_scheduled_jobs( mocker, sample_template): mock_celery = mocker.patch( 'app.celery.tasks.process_incomplete_jobs.apply_async') job = create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(hours=2), scheduled_for=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_PENDING) check_job_status() mock_celery.assert_called_once_with([[str(job.id)]], queue=QueueNames.JOBS)
def test_check_job_status_task_calls_process_incomplete_jobs(mocker, sample_template): mock_celery = mocker.patch('app.celery.tasks.process_incomplete_jobs.apply_async') job = create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_IN_PROGRESS) create_notification(template=sample_template, job=job) check_job_status() mock_celery.assert_called_once_with( [[str(job.id)]], queue=QueueNames.JOBS )
def test_check_job_status_task_does_not_raise_error(sample_template): create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(hours=2), scheduled_for=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_FINISHED) create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_FINISHED) check_job_status()
def test_check_job_status_task_raises_job_incomplete_error_when_scheduled_job_is_not_complete(mocker, sample_template): mock_celery = mocker.patch('app.celery.tasks.notify_celery.send_task') job = create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(hours=2), scheduled_for=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_IN_PROGRESS) with pytest.raises(expected_exception=JobIncompleteError) as e: check_job_status() assert e.value.message == "Job(s) ['{}'] have not completed.".format(str(job.id)) mock_celery.assert_called_once_with( name=TaskNames.PROCESS_INCOMPLETE_JOBS, args=([str(job.id)],), queue=QueueNames.JOBS )
def test_check_job_status_task_only_sends_old_tasks(mocker, sample_template): mock_celery = mocker.patch( 'app.celery.tasks.process_incomplete_jobs.apply_async') job = create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(hours=2), scheduled_for=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=31), job_status=JOB_STATUS_IN_PROGRESS) create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(minutes=31), processing_started=datetime.utcnow() - timedelta(minutes=29), job_status=JOB_STATUS_IN_PROGRESS) create_job(template=sample_template, notification_count=3, created_at=datetime.utcnow() - timedelta(minutes=50), scheduled_for=datetime.utcnow() - timedelta(minutes=29), job_status=JOB_STATUS_PENDING) check_job_status() # jobs 2 and 3 were created less than 30 minutes ago, so are not sent to Celery task mock_celery.assert_called_once_with([[str(job.id)]], queue=QueueNames.JOBS)