예제 #1
0
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
    )
예제 #7
0
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)