def test_validate_json_field(self): settings = new_serializer_class( stay_logged_in=serializers.BooleanField(default=True), ) credentials = new_serializer_class( username=serializers.StringField(required=True, blank=False, nullable=False), password=serializers.StringField(required=True, blank=False, nullable=False), settings=serializers.JSONField(validator=settings, default={}, nullable=True), ) serializer = new_serializer_class( credentials=serializers.SerializerField(credentials, required=True), ) obj = serializer.save( data={'credentials': { 'username': '******', 'password': '******', }}) self.assertEqual(obj.credentials.username, 'synic') self.assertEqual(obj.credentials.password, 'test') self.assertTrue(obj.credentials.settings['stay_logged_in'])
class DummySerializer(serializers.ModelSerializer): uuid = serializers.UUIDField(default=uuid.uuid4) name = serializers.StringField(required=True) email = serializers.EmailField(required=True) title = serializers.StringField(max_length=1000) is_awesome = serializers.BooleanField(required=False, default=True) class Meta: model = Dummy
class UserSerializer(serializers.ModelSerializer): email = serializers.EmailField(required=True) description = serializers.StringField(required=False, nullable=True) class Meta: required = ('username', 'email') model = User
def test_validate_nullable(self): serializer = new_serializer_class(name=serializers.StringField( required=True, nullable=True), ) obj = serializer.save(data={'name': None}) self.assertIsNone(obj.name)
def test_validate_is_string(self): serializer = new_serializer_class( name=serializers.StringField(max_length=4), ) with self.assertRaises(exceptions.ValidationError) as context: serializer.validate(data={'name': 12}) self.assertIn('Must be a string', context.exception.description['name'][0])
def test_string_field_min_length(self): serializer = new_serializer_class( name=serializers.StringField(min_length=3), ) with self.assertRaises(exceptions.ValidationError) as context: serializer.validate(data={'name': '12'}) self.assertEqual(context.exception.description['name'][0], 'Must be at least 3 character(s) long.')
def test_validation_order(self): serializer = new_serializer_class(name=serializers.StringField( min_length=4, max_length=2, blank=False, regex='\d\d'), ) with self.assertRaises(exceptions.ValidationError) as context: serializer.validate(data={'name': ''}) matches = ('Cannot be blank', 'be at least 4', 'match the pattern') for i, match in enumerate(matches): self.assertIn(match, context.exception.description['name'][i])
def test_fail_string_field_match_regex(self): serializer = new_serializer_class( name=serializers.StringField(regex='\d\d'), ) with self.assertRaises(exceptions.ValidationError) as context: serializer.validate(data={'name': ''}) self.assertIn( 'match the pattern', context.exception.description['name'][0], )
class UserSerializer2(serializers.ModelSerializer): user_age = serializers.IntField(source='age', required=False) description = serializers.StringField(required=False, nullable=True) class Meta: fields = ( 'uuid', 'username', 'email', 'first_name', 'last_name', 'created_at', 'updated_at', 'user_age', ) model = User
class DummySerializer(serializers.Serializer): name = serializers.StringField(required=True) email = serializers.EmailField(required=True, update_read_only=True) title = serializers.StringField(max_length=30) is_awesome = serializers.BooleanField(required=False, default=True)
def test_string_field_match_regex(self): serializer = new_serializer_class( name=serializers.StringField(regex='\d\d'), ) serializer.validate(data={'name': '22'})