|
5 | 5 | from datetime import datetime, timedelta
|
6 | 6 | from itertools import count
|
7 | 7 |
|
| 8 | +from django.contrib.admin.sites import AdminSite |
| 9 | +from django.contrib.messages.storage.fallback import FallbackStorage |
| 10 | +from django.test import RequestFactory |
| 11 | + |
8 | 12 | from celery.five import monotonic, text_t
|
9 | 13 | from celery.schedules import schedule, crontab
|
10 | 14 |
|
11 | 15 | from django_celery_beat import schedulers
|
| 16 | +from django_celery_beat.admin import PeriodicTaskAdmin |
12 | 17 | from django_celery_beat.models import (
|
13 | 18 | PeriodicTask, PeriodicTasks, IntervalSchedule, CrontabSchedule,
|
14 | 19 | )
|
@@ -425,3 +430,48 @@ def test_track_changes(self):
|
425 | 430 | y = PeriodicTasks.last_change()
|
426 | 431 | assert y
|
427 | 432 | assert y > x
|
| 433 | + |
| 434 | + |
| 435 | +@pytest.mark.django_db() |
| 436 | +class test_modeladmin_PeriodicTaskAdmin(SchedulerCase): |
| 437 | + @pytest.mark.django_db() |
| 438 | + @pytest.fixture(autouse=True) |
| 439 | + def setup_scheduler(self, app): |
| 440 | + self.app = app |
| 441 | + self.site = AdminSite() |
| 442 | + self.request_factory = RequestFactory() |
| 443 | + |
| 444 | + entry_name, entry = self.create_conf_entry() |
| 445 | + self.app.conf.beat_schedule = {entry_name: entry} |
| 446 | + self.m1 = PeriodicTask(name=entry_name) |
| 447 | + self.m1.task = 'celery.backend_cleanup' |
| 448 | + self.m1.save() |
| 449 | + |
| 450 | + entry_name, entry = self.create_conf_entry() |
| 451 | + self.app.conf.beat_schedule = {entry_name: entry} |
| 452 | + self.m2 = PeriodicTask(name=entry_name) |
| 453 | + self.m2.task = 'celery.backend_cleanup' |
| 454 | + self.m2.save() |
| 455 | + |
| 456 | + def patch_request(self, request): |
| 457 | + """patch request to allow for django messages storage""" |
| 458 | + setattr(request, 'session', 'session') |
| 459 | + messages = FallbackStorage(request) |
| 460 | + setattr(request, '_messages', messages) |
| 461 | + return request |
| 462 | + |
| 463 | + def test_run_task(self): |
| 464 | + ma = PeriodicTaskAdmin(PeriodicTask, self.site) |
| 465 | + self.request = self.patch_request(self.request_factory.get('/')) |
| 466 | + ma.run_tasks(self.request, PeriodicTask.objects.filter(id=self.m1.id)) |
| 467 | + assert len(self.request._messages._queued_messages) == 1 |
| 468 | + queued_message = self.request._messages._queued_messages[0].message |
| 469 | + assert queued_message == '1 task was successfully run' |
| 470 | + |
| 471 | + def test_run_tasks(self): |
| 472 | + ma = PeriodicTaskAdmin(PeriodicTask, self.site) |
| 473 | + self.request = self.patch_request(self.request_factory.get('/')) |
| 474 | + ma.run_tasks(self.request, PeriodicTask.objects.all()) |
| 475 | + assert len(self.request._messages._queued_messages) == 1 |
| 476 | + queued_message = self.request._messages._queued_messages[0].message |
| 477 | + assert queued_message == '2 tasks were successfully run' |
0 commit comments