@@ -75,20 +75,37 @@ def test_toggle_action_all_disabled(self):
75
75
self .assertTrue (e2 )
76
76
self .assertTrue (e3 )
77
77
78
- def test_validate_unique_raises_if_schedule_not_set (self ):
79
- with self .assertRaises (ValidationError ):
80
- PeriodicTask ().validate_unique ()
81
78
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 ):
83
90
schedules = [
84
91
('crontab' , CrontabSchedule ()),
85
92
('interval' , IntervalSchedule ()),
86
93
('solar' , SolarSchedule ()),
87
94
('clocked' , ClockedSchedule ())
88
95
]
96
+ expected_error_msg = (
97
+ 'Only one of clocked, interval, crontab, or solar '
98
+ 'must be set'
99
+ )
89
100
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 ])
92
109
93
110
def test_validate_unique_not_raises (self ):
94
111
PeriodicTask (crontab = CrontabSchedule ()).validate_unique ()
0 commit comments