Skip to content

Commit a8b0dec

Browse files
arnau126auvipy
authored andcommitted
If no schedule is selected, raise a non-field error.
1 parent 14dee77 commit a8b0dec

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

django_celery_beat/models.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -536,11 +536,10 @@ def validate_unique(self, *args, **kwargs):
536536
if getattr(self, s)]
537537

538538
if len(selected_schedule_types) == 0:
539-
raise ValidationError({
540-
'interval': [
541-
'One of clocked, interval, crontab, or solar must be set.'
542-
]
543-
})
539+
raise ValidationError(
540+
'One of clocked, interval, crontab, or solar '
541+
'must be set.'
542+
)
544543

545544
err_msg = 'Only one of clocked, interval, crontab, '\
546545
'or solar must be set'

t/unit/test_admin.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,37 @@ def test_toggle_action_all_disabled(self):
7575
self.assertTrue(e2)
7676
self.assertTrue(e3)
7777

78-
def test_validate_unique_raises_if_schedule_not_set(self):
79-
with self.assertRaises(ValidationError):
80-
PeriodicTask().validate_unique()
8178

82-
def test_save_raises_for_multiple_schedules(self):
79+
class ValidateUniqueTests(TestCase):
80+
81+
def test_validate_unique_raises_if_schedule_not_set(self):
82+
with self.assertRaises(ValidationError) as cm:
83+
PeriodicTask(name='task0').validate_unique()
84+
self.assertEquals(
85+
cm.exception.args[0],
86+
'One of clocked, interval, crontab, or solar must be set.',
87+
)
88+
89+
def test_validate_unique_raises_for_multiple_schedules(self):
8390
schedules = [
8491
('crontab', CrontabSchedule()),
8592
('interval', IntervalSchedule()),
8693
('solar', SolarSchedule()),
8794
('clocked', ClockedSchedule())
8895
]
96+
expected_error_msg = (
97+
'Only one of clocked, interval, crontab, or solar '
98+
'must be set'
99+
)
89100
for i, options in enumerate(combinations(schedules, 2)):
90-
with self.assertRaises(ValidationError):
91-
PeriodicTask(name='task{}'.format(i), **dict(options)).save()
101+
name = 'task{}'.format(i)
102+
options_dict = dict(options)
103+
with self.assertRaises(ValidationError) as cm:
104+
PeriodicTask(name=name, **options_dict).validate_unique()
105+
errors = cm.exception.args[0]
106+
self.assertEquals(errors.keys(), options_dict.keys())
107+
for error_msg in errors.values():
108+
self.assertEquals(error_msg, [expected_error_msg])
92109

93110
def test_validate_unique_not_raises(self):
94111
PeriodicTask(crontab=CrontabSchedule()).validate_unique()

0 commit comments

Comments
 (0)