diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c13416ee..8d8559ba 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,7 @@ master (unreleased) - Add/Confirm support of Django REST Framework 3.11 (#417). - Added a thorough documentation for maintainers - Pin psycopg2-binary to 2.8 in testing env to fix CI. +- Allow to create validations `IS_DATE_IN_THE_FUTURE` by passing a boolean value instead of a string. Release 7.0.0 (2021-03-11) ========================== diff --git a/demo/tests/serializers/test_validations.py b/demo/tests/serializers/test_validations.py index 2b266ad7..40434177 100644 --- a/demo/tests/serializers/test_validations.py +++ b/demo/tests/serializers/test_validations.py @@ -3,7 +3,7 @@ from formidable.models import Formidable from formidable.serializers.validation import ( MinLengthSerializer, RegexpSerializer, - ValidationSerializer + ValidationSerializer, FutureDateSerializer ) @@ -58,6 +58,24 @@ def test_invalid_regexp_value(self): serializer = RegexpSerializer(data=data) self.assertFalse(serializer.is_valid()) + def test_valid_bool_future_date_value(self): + data = { + 'field_id': self.text_field.id, + 'type': 'IS_DATE_IN_THE_FUTURE', + 'value': True, + } + serializer = FutureDateSerializer(data=data) + self.assertTrue(serializer.is_valid()) + + def test_valid_string_future_date_value(self): + data = { + 'field_id': self.text_field.id, + 'type': 'IS_DATE_IN_THE_FUTURE', + 'value': 'true', + } + serializer = FutureDateSerializer(data=data) + self.assertTrue(serializer.is_valid()) + def test_update_validations(self): list_serializer = ValidationSerializer(many=True) self.text_field.validations.create( diff --git a/formidable/serializers/validation.py b/formidable/serializers/validation.py index acc7a267..d3add7bb 100644 --- a/formidable/serializers/validation.py +++ b/formidable/serializers/validation.py @@ -128,8 +128,14 @@ class FutureDateSerializer(ValidationSerializer): type_id = 'IS_DATE_IN_THE_FUTURE' + def to_internal_value(self, data): + if isinstance(data['value'], bool): + data['value'] = str(data['value']) + data = super().to_internal_value(data) + return data + def validate_value(self, value): - if value in ['t', "true"]: - return "true" + if value in ['t', 'true', 'True']: + return 'true' else: - return "false" + return 'false'