From 6b2230abcc74caba6a12c0967bbd6d447c9e8037 Mon Sep 17 00:00:00 2001 From: Vojtech Oram Date: Thu, 23 Jun 2016 13:53:16 +0200 Subject: [PATCH 1/3] #3788 Added failing TestCase for default value being ignored at BooleanField --- tests/test_serializer.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_serializer.py b/tests/test_serializer.py index 741c6ab17..bc1505351 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -4,6 +4,8 @@ from __future__ import unicode_literals import pickle import pytest +from django.db import models +from django.http import QueryDict from rest_framework import serializers from rest_framework.compat import unicode_repr @@ -309,3 +311,26 @@ class TestCacheSerializerData: pickled = pickle.dumps(serializer.data) data = pickle.loads(pickled) assert data == {'field1': 'a', 'field2': 'b'} + + +class DefaultTrueBooleanModel(models.Model): + required_data = models.CharField(max_length=255) + visible = models.BooleanField(default=True) + + +class TestSerializerDefaultTrueBoolean: + + def setup(self): + class DefaultTrueBooleanSerializer(serializers.ModelSerializer): + class Meta: + model = DefaultTrueBooleanModel + fields = ('required_data', 'visible') + + self.default_true_boolean_serializer = DefaultTrueBooleanSerializer + + def test_default_value(self): + data = QueryDict('', mutable=True) + data.update({'required_data': 'foo'}) + serializer = self.default_true_boolean_serializer(data=data) + serializer.is_valid() + assert serializer.data['visible'] From dfe37fa8f0ea25bc6d367807bc47329d130d49d7 Mon Sep 17 00:00:00 2001 From: Vojtech Oram Date: Thu, 23 Jun 2016 14:07:20 +0200 Subject: [PATCH 2/3] #3788 Moved test to module tests.test_model_serializer --- tests/test_model_serializer.py | 24 ++++++++++++++++++++++++ tests/test_serializer.py | 25 ------------------------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 096cbc8d6..7b07b5237 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -16,6 +16,7 @@ from django.core.validators import ( ) from django.db import models from django.db.models import DurationField as ModelDurationField +from django.http import QueryDict from django.test import TestCase from django.utils import six @@ -955,3 +956,26 @@ class TestMetaInheritance(TestCase): self.assertEqual(unicode_repr(ChildSerializer()), child_expected) self.assertEqual(unicode_repr(TestSerializer()), test_expected) self.assertEqual(unicode_repr(ChildSerializer()), child_expected) + + +class DefaultTrueBooleanModel(models.Model): + required_data = models.CharField(max_length=255) + visible = models.BooleanField(default=True) + + +class TestSerializerDefaultTrueBoolean(TestCase): + + def setUp(self): + class DefaultTrueBooleanSerializer(serializers.ModelSerializer): + class Meta: + model = DefaultTrueBooleanModel + fields = ('required_data', 'visible') + + self.default_true_boolean_serializer = DefaultTrueBooleanSerializer + + def test_default_value(self): + data = QueryDict('', mutable=True) + data.update({'required_data': 'foo'}) + serializer = self.default_true_boolean_serializer(data=data) + serializer.is_valid() + self.assertTrue(serializer.data['visible']) diff --git a/tests/test_serializer.py b/tests/test_serializer.py index bc1505351..741c6ab17 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -4,8 +4,6 @@ from __future__ import unicode_literals import pickle import pytest -from django.db import models -from django.http import QueryDict from rest_framework import serializers from rest_framework.compat import unicode_repr @@ -311,26 +309,3 @@ class TestCacheSerializerData: pickled = pickle.dumps(serializer.data) data = pickle.loads(pickled) assert data == {'field1': 'a', 'field2': 'b'} - - -class DefaultTrueBooleanModel(models.Model): - required_data = models.CharField(max_length=255) - visible = models.BooleanField(default=True) - - -class TestSerializerDefaultTrueBoolean: - - def setup(self): - class DefaultTrueBooleanSerializer(serializers.ModelSerializer): - class Meta: - model = DefaultTrueBooleanModel - fields = ('required_data', 'visible') - - self.default_true_boolean_serializer = DefaultTrueBooleanSerializer - - def test_default_value(self): - data = QueryDict('', mutable=True) - data.update({'required_data': 'foo'}) - serializer = self.default_true_boolean_serializer(data=data) - serializer.is_valid() - assert serializer.data['visible'] From 45f84a06b3c67e4ace59a2d4cf8cda8da5eb139e Mon Sep 17 00:00:00 2001 From: Vojtech Oram Date: Thu, 23 Jun 2016 14:51:54 +0200 Subject: [PATCH 3/3] #3788 Test purified --- tests/test_model_serializer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 7b07b5237..f2f053bf0 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -978,4 +978,4 @@ class TestSerializerDefaultTrueBoolean(TestCase): data.update({'required_data': 'foo'}) serializer = self.default_true_boolean_serializer(data=data) serializer.is_valid() - self.assertTrue(serializer.data['visible']) + self.assertNotIn('visible', serializer.validated_data)