|
1 | 1 | from __future__ import absolute_import, unicode_literals
|
2 | 2 |
|
| 3 | +from itertools import combinations |
3 | 4 | from django.test import TestCase
|
4 | 5 |
|
5 | 6 | from django_celery_beat.admin import PeriodicTaskAdmin
|
6 |
| -from django_celery_beat.models import PeriodicTask |
| 7 | +from django_celery_beat.models import \ |
| 8 | + PeriodicTask, \ |
| 9 | + CrontabSchedule, \ |
| 10 | + IntervalSchedule, \ |
| 11 | + SolarSchedule |
| 12 | +from django.core.exceptions import ValidationError |
7 | 13 |
|
8 | 14 |
|
9 | 15 | class ActionsTests(TestCase):
|
@@ -51,3 +57,22 @@ def test_toggle_action_all_disabled(self):
|
51 | 57 | self.assertTrue(e1)
|
52 | 58 | self.assertTrue(e2)
|
53 | 59 | self.assertTrue(e3)
|
| 60 | + |
| 61 | + def test_validate_unique_raises_if_schedule_not_set(self): |
| 62 | + with self.assertRaises(ValidationError): |
| 63 | + PeriodicTask().validate_unique() |
| 64 | + |
| 65 | + def test_validate_unique_raises_for_multiple_schedules(self): |
| 66 | + schedules = [ |
| 67 | + ('crontab', CrontabSchedule()), |
| 68 | + ('interval', IntervalSchedule()), |
| 69 | + ('solar', SolarSchedule()), |
| 70 | + ] |
| 71 | + for options in combinations(schedules, 2): |
| 72 | + with self.assertRaises(ValidationError): |
| 73 | + PeriodicTask(**dict(options)).validate_unique() |
| 74 | + |
| 75 | + def test_validate_unique_not_raises(self): |
| 76 | + PeriodicTask(crontab=CrontabSchedule()).validate_unique() |
| 77 | + PeriodicTask(interval=IntervalSchedule()).validate_unique() |
| 78 | + PeriodicTask(solar=SolarSchedule()).validate_unique() |
0 commit comments