From 18d9dc3657b653d7439cda10cd240de1ccb56b01 Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Wed, 12 Sep 2018 17:22:45 -0700 Subject: [PATCH] Add tests for BooleanField when nullable --- tests/test_fields.py | 14 +++++++++++++- tests/test_model_serializer.py | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/tests/test_fields.py b/tests/test_fields.py index aa3391a72..8458db604 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -5,6 +5,7 @@ import unittest import uuid from decimal import ROUND_DOWN, ROUND_UP, Decimal +import django import pytest import pytz from django.core.exceptions import ValidationError as DjangoValidationError @@ -657,7 +658,7 @@ class TestBooleanField(FieldValues): class TestNullBooleanField(TestBooleanField): """ - Valid and invalid values for `BooleanField`. + Valid and invalid values for `NullBooleanField`. """ valid_inputs = { 'true': True, @@ -682,6 +683,17 @@ class TestNullBooleanField(TestBooleanField): field = serializers.NullBooleanField() +@pytest.mark.skipif(django.VERSION < (2, 1), reason='Django version < 2.1') +class TestNullableBooleanField(TestNullBooleanField): + """ + Valid and invalid values for `BooleanField` when `allow_null=True`. + """ + + @property + def field(self): + return serializers.BooleanField(allow_null=True) + + # String types... class TestCharField(FieldValues): diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 1bd1fd053..e9ed9957f 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -12,6 +12,7 @@ import decimal import sys from collections import OrderedDict +import django import pytest from django.core.exceptions import ImproperlyConfigured from django.core.validators import ( @@ -220,6 +221,25 @@ class TestRegularFieldMappings(TestCase): ) self.assertEqual(unicode_repr(TestSerializer()), expected) + # merge this into test_regular_fields / RegularFieldsModel when + # Django 2.1 is the minimum supported version + @pytest.mark.skipif(django.VERSION < (2, 1), reason='Django version < 2.1') + def test_nullable_boolean_field(self): + class NullableBooleanModel(models.Model): + field = models.BooleanField(null=True, default=False) + + class NullableBooleanSerializer(serializers.ModelSerializer): + class Meta: + model = NullableBooleanModel + fields = ['field'] + + expected = dedent(""" + NullableBooleanSerializer(): + field = BooleanField(allow_null=True, required=False) + """) + + self.assertEqual(unicode_repr(NullableBooleanSerializer()), expected) + def test_method_field(self): """ Properties and methods on the model should be allowed as `Meta.fields`