Esempio n. 1
0
    def test_average_duration_returns_correct_value(self, rf, request):
        now = timezone.now()
        run_time = now - timedelta(seconds=60)

        job = DjangoJob.objects.create(id="test_job", next_run_time=run_time)
        request.addfinalizer(job.delete)

        DjangoJobExecution.objects.create(
            job=job,
            status=DjangoJobExecution.SUCCESS,
            run_time=run_time - timedelta(seconds=60),
            duration=5,
            finished=(run_time + timedelta(seconds=5)).timestamp(),
        )  # Old job execution

        DjangoJobExecution.objects.create(
            job=job,
            status=DjangoJobExecution.SUCCESS,
            run_time=run_time,
            duration=10,
            finished=(run_time + timedelta(seconds=10)).timestamp(),
        )  # Most recent job execution

        admin = DjangoJobAdmin(DjangoJob, None)
        admin.get_queryset(rf.get("/admin/django_apscheduler/djangojob"))

        assert admin.average_duration(job) == 7.5
Esempio n. 2
0
    def test_run_selected_jobs_enforces_timeout(self, rf, monkeypatch):
        monkeypatch.setattr(settings, "APSCHEDULER_RUN_NOW_TIMEOUT",
                            1)  # Shorten timeout to reduce test runtime

        scheduler = BackgroundScheduler()
        scheduler.add_jobstore(DjangoJobStore())
        scheduler.start()

        job = scheduler.add_job(print, trigger="interval", seconds=60)

        admin = DjangoJobAdmin(DjangoJob, None)

        r = rf.get("/django_apscheduler/djangojob/")
        # Add support for Django messaging framework
        r._messages = mock.MagicMock(BaseStorage)
        r._messages.add = mock.MagicMock()

        with mock.patch(
                "django_apscheduler.admin.BackgroundScheduler.add_listener"):
            admin.run_selected_jobs(r, DjangoJob.objects.filter(id=job.id))

        assert DjangoJobExecution.objects.count() == 0
        r._messages.add.assert_called_with(
            40,
            format_html(
                "Maximum runtime of {} seconds exceeded! Not all jobs could be completed successfully. "
                "Pending jobs: {}",
                admin._job_execution_timeout,
                ",".join({job.id}),
            ),
            "",
        )

        scheduler.shutdown()
Esempio n. 3
0
    def test_run_selected_jobs_creates_job_execution_entry(
            self, rf, monkeypatch):
        monkeypatch.setattr(settings, "APSCHEDULER_RUN_NOW_TIMEOUT",
                            1)  # Shorten timeout to reduce test runtime

        scheduler = BackgroundScheduler()
        scheduler.add_jobstore(DjangoJobStore())
        scheduler.start()

        job = scheduler.add_job(print, trigger="interval", seconds=60)

        admin = DjangoJobAdmin(DjangoJob, None)

        r = rf.get("/django_apscheduler/djangojob/")
        # Add support for Django messaging framework
        r._messages = mock.MagicMock(BaseStorage)
        r._messages.add = mock.MagicMock()

        assert not DjangoJobExecution.objects.filter(job_id=job.id).exists()

        admin.run_selected_jobs(r, DjangoJob.objects.filter(id=job.id))

        assert DjangoJobExecution.objects.filter(job_id=job.id).exists()
        r._messages.add.assert_called_with(20, f"Executed job '{job.id}'!", "")

        scheduler.shutdown()
Esempio n. 4
0
    def test_local_run_time_returns_paused_if_no_run_time_scheduled(self, rf, request):
        job = DjangoJob.objects.create(id="test_job")
        request.addfinalizer(job.delete)

        admin = DjangoJobAdmin(DjangoJob, None)
        admin.get_queryset(rf.get("/admin/django_apscheduler/djangojob"))

        assert admin.local_run_time(job) == "(paused)"
Esempio n. 5
0
    def test_average_duration_no_executions_shows_none_text(self, request):
        now = timezone.now()
        run_time = now - timedelta(seconds=60)

        job = DjangoJob.objects.create(id="test_job", next_run_time=run_time)
        request.addfinalizer(job.delete)

        admin = DjangoJobAdmin(DjangoJob, None)
        admin.get_queryset(request)

        assert admin.average_duration(job) == "None"
Esempio n. 6
0
    def test_run_selected_jobs_job_not_found_skips_execution(self, rf):
        scheduler = BackgroundScheduler()
        scheduler.add_jobstore(DjangoJobStore())
        scheduler.start()

        job = DjangoJob.objects.create(id="test_job")

        admin = DjangoJobAdmin(DjangoJob, None)

        r = rf.get("/django_apscheduler/djangojob/")
        # Add support for Django messaging framework
        r._messages = mock.MagicMock(BaseStorage)
        r._messages.add = mock.MagicMock()

        admin.run_selected_jobs(r, DjangoJob.objects.filter(id=job.id))

        assert DjangoJobExecution.objects.count() == 0
        r._messages.add.assert_called_with(
            30, "Could not find job test_job in the database! Skipping execution...", ""
        )

        scheduler.shutdown()