|
| 1 | +import datetime |
| 2 | + |
1 | 3 | import pytest |
| 4 | +from freezefrog import FreezeTime |
2 | 5 |
|
3 | 6 | from tasktiger import Task, TaskNotFound |
4 | 7 |
|
@@ -49,3 +52,38 @@ def some_task(): |
49 | 52 |
|
50 | 53 | task = tiger.delay(some_task, max_stored_executions=11) |
51 | 54 | assert task.max_stored_executions == 11 |
| 55 | + |
| 56 | + |
| 57 | +class TestScheduledAt: |
| 58 | + FROZEN_NOW = datetime.datetime(2024, 1, 1, 12, 0, 0) |
| 59 | + |
| 60 | + def test_immediate_task_scheduled_at_equals_queue_time(self, tiger): |
| 61 | + with FreezeTime(self.FROZEN_NOW): |
| 62 | + task = tiger.delay(simple_task) |
| 63 | + assert task.scheduled_at == self.FROZEN_NOW |
| 64 | + |
| 65 | + def test_future_task_scheduled_at_equals_when(self, tiger): |
| 66 | + future = datetime.timedelta(minutes=5) |
| 67 | + with FreezeTime(self.FROZEN_NOW): |
| 68 | + task = tiger.delay(simple_task, when=future) |
| 69 | + assert task.scheduled_at == self.FROZEN_NOW + future |
| 70 | + |
| 71 | + def test_scheduled_at_survives_scheduled_to_queued_transition(self, tiger): |
| 72 | + future = datetime.timedelta(minutes=5) |
| 73 | + with FreezeTime(self.FROZEN_NOW): |
| 74 | + task = tiger.delay(simple_task, when=future) |
| 75 | + expected = self.FROZEN_NOW + future |
| 76 | + |
| 77 | + task._move(from_state="scheduled", to_state="queued") |
| 78 | + reloaded = Task.from_id(tiger, task.queue, "queued", task.id) |
| 79 | + assert reloaded.scheduled_at == expected |
| 80 | + |
| 81 | + def test_scheduled_at_persists_after_reload(self, tiger): |
| 82 | + with FreezeTime(self.FROZEN_NOW): |
| 83 | + task = tiger.delay(simple_task) |
| 84 | + reloaded = Task.from_id(tiger, task.queue, "queued", task.id) |
| 85 | + assert reloaded.scheduled_at == self.FROZEN_NOW |
| 86 | + |
| 87 | + def test_scheduled_at_none_for_unqueued_task(self, tiger): |
| 88 | + task = Task(tiger, simple_task) |
| 89 | + assert task.scheduled_at is None |
0 commit comments