diff --git a/task/serializers.py b/task/serializers.py index 60c1260..063323f 100644 --- a/task/serializers.py +++ b/task/serializers.py @@ -219,13 +219,16 @@ def validate_rule(self, value: str) -> str: 'changing the rule of an existing series is not allowed') return value - def validate_start(self, value: str) -> str: + def validate_start(self, value: date) -> str: if self.instance and value != self.instance.start: raise ValidationError( 'changing the start of an existing series is not allowed') + elif not self.instance and value < date.today(): + raise ValidationError( + 'the start date is not allowed to be in the past') return value - def validate_task_id(self, value: str) -> str: + def validate_task_id(self, value: int) -> str: if self.instance and value != self.instance.task_id: raise ValidationError( 'changing the task of an existing series is not allowed') diff --git a/task/tests.py b/task/tests.py index ddfa32d..e546360 100644 --- a/task/tests.py +++ b/task/tests.py @@ -3282,6 +3282,7 @@ def setUp(self): 'request': self.request, } + @freeze_time('2010-05-03') def test_validation_invalid_rule(self): serializer = TaskChunkSeriesSerializer(data={ 'task_id': self.task.pk, @@ -3294,6 +3295,7 @@ def test_validation_invalid_rule(self): set(serializer.errors.keys()), {'rule'}) + @freeze_time('2010-05-03') def test_validation_interval(self): serializer = TaskChunkSeriesSerializer(data={ 'task_id': self.task.pk, @@ -3339,6 +3341,7 @@ def test_validation_interval(self): self.assertTrue( serializer.is_valid()) + @freeze_time('2010-05-03') def test_validation_monthly(self): serializer = TaskChunkSeriesSerializer(data={ 'task_id': self.task.pk, @@ -3402,6 +3405,7 @@ def test_validation_monthly(self): self.assertTrue( serializer.is_valid()) + @freeze_time('2008-01-03') def test_validation_monthly_last_day_of_month(self): serializer = TaskChunkSeriesSerializer(data={ 'task_id': self.task.pk, @@ -3457,6 +3461,7 @@ def test_validation_monthly_last_day_of_month(self): set(serializer.errors.keys()), {'monthly_day'}) + @freeze_time('2010-05-03') def test_validation_monthlyweekday(self): serializer = TaskChunkSeriesSerializer(data={ 'task_id': self.task.pk, @@ -3635,6 +3640,23 @@ def test_validation_update_change_end(self): instance.end, date(2010, 5, 1)) + @freeze_time('2010-01-03') + def test_validation_create_start_past(self): + serializer = TaskChunkSeriesSerializer(data={ + 'task_id': self.task.pk, + 'start': '2010-01-01', # in past + 'rule': 'interval', + 'interval_days': 10, + }, context=self.context) + self.assertFalse( + serializer.is_valid()) + self.assertSetEqual( + set(serializer.errors.keys()), + { + 'start', + }) + + @freeze_time('2010-01-03') def test_validation_create_start_after_end(self): serializer = TaskChunkSeriesSerializer(data={ 'task_id': self.task.pk,