From 6e9865cb71ff45e90020d3d0dc7c40f20c760d2e Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Thu, 3 Jan 2013 23:17:31 +0000 Subject: Fix for #446. Note: Also needs applying to other relational types. --- rest_framework/tests/fields.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 rest_framework/tests/fields.py (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py new file mode 100644 index 00000000..147a9229 --- /dev/null +++ b/rest_framework/tests/fields.py @@ -0,0 +1,18 @@ +from django.db import models +from django.test import TestCase +from rest_framework import serializers + + +class NullModel(models.Model): + pass + + +class FieldTests(TestCase): + def test_pk_related_field_with_empty_string(self): + """ + Regression test for #446 + + https://github.com/tomchristie/django-rest-framework/issues/446 + """ + field = serializers.PrimaryKeyRelatedField(queryset=NullModel.objects.all()) + self.assertRaises(serializers.ValidationError, field.from_native, ('',)) -- cgit v1.2.3 From 4c86fd46d772e1fd3789d9ed2a76b9b92cce0872 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 4 Jan 2013 13:05:31 +0000 Subject: Rename module for basic relational field tests --- rest_framework/tests/fields.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 rest_framework/tests/fields.py (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py deleted file mode 100644 index 147a9229..00000000 --- a/rest_framework/tests/fields.py +++ /dev/null @@ -1,18 +0,0 @@ -from django.db import models -from django.test import TestCase -from rest_framework import serializers - - -class NullModel(models.Model): - pass - - -class FieldTests(TestCase): - def test_pk_related_field_with_empty_string(self): - """ - Regression test for #446 - - https://github.com/tomchristie/django-rest-framework/issues/446 - """ - field = serializers.PrimaryKeyRelatedField(queryset=NullModel.objects.all()) - self.assertRaises(serializers.ValidationError, field.from_native, ('',)) -- cgit v1.2.3 From 73c4e5c4603e24ec1ea9976a3c6152a797f8f041 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Sat, 12 Jan 2013 09:32:53 +0000 Subject: auto_now and auto_now_add fields should be read only by default --- rest_framework/tests/fields.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 rest_framework/tests/fields.py (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py new file mode 100644 index 00000000..b1a8161a --- /dev/null +++ b/rest_framework/tests/fields.py @@ -0,0 +1,26 @@ +""" +General tests for relational fields. +""" + +from django.db import models +from django.test import TestCase +from rest_framework import serializers + + +class TimestampedModel(models.Model): + added = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + + +class TimestampedModelSerializer(serializers.ModelSerializer): + class Meta: + model = TimestampedModel + + +class ReadOnlyFieldTests(TestCase): + def test_auto_now_fields_read_only(self): + """ + auto_now and auto_now_add fields should be readonly by default. + """ + serializer = TimestampedModelSerializer() + self.assertEquals(serializer.fields['added'].read_only, True) -- cgit v1.2.3 From d9acec3e6dd07d33f416646bc161108ea52842d6 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Sat, 12 Jan 2013 09:43:07 +0000 Subject: PK fields should only be read-only if they are an AutoField. Fixes #563 --- rest_framework/tests/fields.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index b1a8161a..a6a05941 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -12,11 +12,20 @@ class TimestampedModel(models.Model): updated = models.DateTimeField(auto_now=True) +class CharPrimaryKeyModel(models.Model): + id = models.CharField(max_length=20, primary_key=True) + + class TimestampedModelSerializer(serializers.ModelSerializer): class Meta: model = TimestampedModel +class CharPrimaryKeyModelSerializer(serializers.ModelSerializer): + class Meta: + model = CharPrimaryKeyModel + + class ReadOnlyFieldTests(TestCase): def test_auto_now_fields_read_only(self): """ @@ -24,3 +33,11 @@ class ReadOnlyFieldTests(TestCase): """ serializer = TimestampedModelSerializer() self.assertEquals(serializer.fields['added'].read_only, True) + + def test_auto_pk_fields_read_only(self): + serializer = TimestampedModelSerializer() + self.assertEquals(serializer.fields['id'].read_only, True) + + def test_non_auto_pk_fields_not_read_only(self): + serializer = CharPrimaryKeyModelSerializer() + self.assertEquals(serializer.fields['id'].read_only, False) -- cgit v1.2.3 From da6b9576c5c5f019800555108fc86887ef7e453d Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Tue, 15 Jan 2013 10:51:10 +0000 Subject: Update docstrings --- rest_framework/tests/fields.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index a6a05941..8068272d 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -1,5 +1,5 @@ """ -General tests for relational fields. +General serializer field tests. """ from django.db import models @@ -29,15 +29,21 @@ class CharPrimaryKeyModelSerializer(serializers.ModelSerializer): class ReadOnlyFieldTests(TestCase): def test_auto_now_fields_read_only(self): """ - auto_now and auto_now_add fields should be readonly by default. + auto_now and auto_now_add fields should be read_only by default. """ serializer = TimestampedModelSerializer() self.assertEquals(serializer.fields['added'].read_only, True) def test_auto_pk_fields_read_only(self): + """ + AutoField fields should be read_only by default. + """ serializer = TimestampedModelSerializer() self.assertEquals(serializer.fields['id'].read_only, True) def test_non_auto_pk_fields_not_read_only(self): + """ + PK fields other than AutoField fields should not be read_only by default. + """ serializer = CharPrimaryKeyModelSerializer() self.assertEquals(serializer.fields['id'].read_only, False) -- cgit v1.2.3