From 7df7e252f6f37cde2f130ec0a351941d8ab766f3 Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Tue, 5 Dec 2017 00:34:43 -0500 Subject: [PATCH] Test postgres field mapping --- requirements/requirements-optionals.txt | 1 + tests/test_model_serializer.py | 50 ++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/requirements/requirements-optionals.txt b/requirements/requirements-optionals.txt index f27178a3f..e0bd25091 100644 --- a/requirements/requirements-optionals.txt +++ b/requirements/requirements-optionals.txt @@ -1,5 +1,6 @@ # Optional packages which may be used with REST framework. pytz==2017.2 +psycopg2==2.7.3 markdown==2.6.4 django-guardian==1.4.9 django-filter==1.1.0 diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index c2c7fb61e..72011c447 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -21,7 +21,7 @@ from django.test import TestCase from django.utils import six from rest_framework import serializers -from rest_framework.compat import unicode_repr +from rest_framework.compat import postgres_fields, unicode_repr def dedent(blocktext): @@ -379,6 +379,54 @@ class TestGenericIPAddressFieldValidation(TestCase): '{0}'.format(s.errors)) +@pytest.mark.skipUnless(postgres_fields, 'postgres is required') +class TestPosgresFieldsMapping(TestCase): + def test_hstore_field(self): + class HStoreFieldModel(models.Model): + hstore_field = postgres_fields.HStoreField() + + class TestSerializer(serializers.ModelSerializer): + class Meta: + model = HStoreFieldModel + fields = ['hstore_field'] + + expected = dedent(""" + TestSerializer(): + hstore_field = CharMappingField() + """) + self.assertEqual(unicode_repr(TestSerializer()), expected) + + def test_array_field(self): + class ArrayFieldModel(models.Model): + array_field = postgres_fields.ArrayField(base_field=models.CharField()) + + class TestSerializer(serializers.ModelSerializer): + class Meta: + model = ArrayFieldModel + fields = ['array_field'] + + expected = dedent(""" + TestSerializer(): + array_field = ListField(child=CharField(label='Array field', validators=[])) + """) + self.assertEqual(unicode_repr(TestSerializer()), expected) + + def test_json_field(self): + class JSONFieldModel(models.Model): + json_field = postgres_fields.JSONField() + + class TestSerializer(serializers.ModelSerializer): + class Meta: + model = JSONFieldModel + fields = ['json_field'] + + expected = dedent(""" + TestSerializer(): + json_field = JSONField(style={'base_template': 'textarea.html'}) + """) + self.assertEqual(unicode_repr(TestSerializer()), expected) + + # Tests for relational field mappings. # ------------------------------------