|
| 1 | +from django.test import TestCase |
| 2 | +from django.utils import timezone |
| 3 | + |
| 4 | +from steady_queue.configuration import Configuration |
| 5 | +from steady_queue.models import Job, RecurringExecution, RecurringTask |
| 6 | +from tests.dummy.tasks import dummy_task |
| 7 | + |
| 8 | + |
| 9 | +class RecurringExecutionTestCase(TestCase): |
| 10 | + def test_enqueue_same_run_at_only_enqueues_once(self): |
| 11 | + recurring_task = RecurringTask.from_configuration( |
| 12 | + Configuration.RecurringTask( |
| 13 | + key="test-recurring-task", |
| 14 | + class_name="tests.dummy.tasks.dummy_task", |
| 15 | + schedule="* * * * *", |
| 16 | + arguments=dummy_task.serialize([], {}), |
| 17 | + queue_name="default", |
| 18 | + priority=0, |
| 19 | + ) |
| 20 | + ) |
| 21 | + recurring_task.save() |
| 22 | + |
| 23 | + run_at = timezone.now().replace(second=0, microsecond=0) |
| 24 | + |
| 25 | + first_result = recurring_task.enqueue(run_at=run_at) |
| 26 | + second_result = recurring_task.enqueue(run_at=run_at) |
| 27 | + |
| 28 | + self.assertNotEqual(first_result, False) |
| 29 | + self.assertFalse(second_result) |
| 30 | + |
| 31 | + self.assertEqual(Job.objects.count(), 1) |
| 32 | + self.assertEqual(RecurringExecution.objects.count(), 1) |
| 33 | + |
| 34 | + recurring_execution = RecurringExecution.objects.get() |
| 35 | + self.assertEqual(recurring_execution.task_id, recurring_task.key) |
| 36 | + self.assertEqual(recurring_execution.run_at, run_at) |
0 commit comments