From 4dffcb5d77a575793c1dc7c1db5242a3ac2d7345 Mon Sep 17 00:00:00 2001 From: Oscar Vilaplana Date: Sat, 18 May 2013 18:10:17 +0200 Subject: Added humanized field names and types --- rest_framework/tests/fields.py | 57 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index 6b1cdfc7..de61b011 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -4,12 +4,17 @@ General serializer field tests. from __future__ import unicode_literals from django.utils.datastructures import SortedDict import datetime +from rest_framework.fields import humanize_field, humanize_field_type +from django import forms from decimal import Decimal from django.db import models from django.test import TestCase from django.core import validators from rest_framework import serializers from rest_framework.serializers import Serializer +from rest_framework.fields import Field +from collections import namedtuple +from uuid import uuid4 class TimestampedModel(models.Model): @@ -685,3 +690,55 @@ class ChoiceFieldTests(TestCase): """ f = serializers.ChoiceField(required=False, choices=self.SAMPLE_CHOICES) self.assertEqual(f.choices, models.fields.BLANK_CHOICE_DASH + self.SAMPLE_CHOICES) + + +class HumanizedFieldType(TestCase): + def test_standard_type_classes(self): + for field_type_name in forms.fields.__all__: + field_type = getattr(forms.fields, field_type_name) + humanized = humanize_field_type(field_type) + self.assert_valid_name(humanized) + + def test_standard_type_names(self): + for field_type_name in forms.fields.__all__: + humanized = humanize_field_type(field_type_name) + self.assert_valid_name(humanized) + + def test_custom_type_name(self): + humanized = humanize_field_type('SomeCustomType') + self.assertEquals(humanized, u'Some custom type') + + def test_custom_type(self): + custom_type = namedtuple('SomeCustomType', []) + humanized = humanize_field_type(custom_type) + self.assertEquals(humanized, u'Some custom type') + + def assert_valid_name(self, humanized): + """A humanized field name is valid if it's a non-empty + unicode. + + """ + self.assertIsInstance(humanized, unicode) + self.assertTrue(humanized) + + +class HumanizedField(TestCase): + def setUp(self): + self.required_field = Field() + self.required_field.label = uuid4().hex + self.required_field.required = True + + self.optional_field = Field() + self.optional_field.label = uuid4().hex + self.optional_field.required = False + + def test_required(self): + self.assertEqual(humanize_field(self.required_field)['required'], True) + + def test_optional(self): + self.assertEqual(humanize_field(self.optional_field)['required'], + False) + + def test_label(self): + for field in (self.required_field, self.optional_field): + self.assertEqual(humanize_field(field)['label'], field.label) -- cgit v1.2.3 From fecadacab150aab48b8b84f4f0e5340ead74c287 Mon Sep 17 00:00:00 2001 From: Oscar Vilaplana Date: Sat, 18 May 2013 18:27:53 +0200 Subject: added tests for form --- rest_framework/tests/fields.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index de61b011..6a180cb8 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -4,7 +4,8 @@ General serializer field tests. from __future__ import unicode_literals from django.utils.datastructures import SortedDict import datetime -from rest_framework.fields import humanize_field, humanize_field_type +from rest_framework.fields import (humanize_field, humanize_field_type, + humanize_form_fields) from django import forms from decimal import Decimal from django.db import models @@ -742,3 +743,23 @@ class HumanizedField(TestCase): def test_label(self): for field in (self.required_field, self.optional_field): self.assertEqual(humanize_field(field)['label'], field.label) + + +class Form(forms.Form): + field1 = forms.CharField(max_length=3, label='field one') + field2 = forms.CharField(label='field two') + + +class HumanizedSerializer(TestCase): + def setUp(self): + self.serializer = TimestampedModelSerializer() + + def test_humanized(self): + humanized = humanize_form_fields(Form()) + self.assertEqual(humanized, { + 'field1': { + u'help_text': u'', u'required': True, + u'type': u'Single Character', u'label': 'field one'}, + 'field2': { + u'help_text': u'', u'required': True, + u'type': u'Single Character', u'label': 'field two'}}) -- cgit v1.2.3 From f1f5f92d899ae37d71234bf8a8a3ad52e20a253f Mon Sep 17 00:00:00 2001 From: Oscar Vilaplana Date: Sun, 19 May 2013 14:55:46 +0200 Subject: Added tests, cleaned up imports --- rest_framework/tests/fields.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index 7a5ed718..6bc37db2 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -2,21 +2,23 @@ General serializer field tests. """ from __future__ import unicode_literals -from django.utils.datastructures import SortedDict + +from collections import namedtuple +from decimal import Decimal +from uuid import uuid4 + import datetime -from rest_framework.fields import (humanize_field, humanize_field_type, - humanize_form_fields) from django import forms -from decimal import Decimal +from django.core import validators from django.db import models from django.test import TestCase -from django.core import validators +from django.utils.datastructures import SortedDict + from rest_framework import serializers +from rest_framework.fields import (humanize_field, humanize_field_type, humanize_form_fields, + Field) from rest_framework.serializers import Serializer from rest_framework.tests.models import RESTFrameworkModel -from rest_framework.fields import Field -from collections import namedtuple -from uuid import uuid4 class TimestampedModel(models.Model): -- cgit v1.2.3 From 696c053f4fbbbb302d9b214d8daf511879256a7f Mon Sep 17 00:00:00 2001 From: Oscar Vilaplana Date: Sun, 19 May 2013 15:04:43 +0200 Subject: s/Single Character/String/ --- rest_framework/tests/fields.py | 4 ++-- 1 file changed, 2 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 6bc37db2..3882b53f 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -885,7 +885,7 @@ class HumanizedSerializer(TestCase): self.assertEqual(humanized, { 'field1': { u'help_text': u'', u'required': True, - u'type': u'Single Character', u'label': 'field one'}, + u'type': u'String', u'label': 'field one'}, 'field2': { u'help_text': u'', u'required': True, - u'type': u'Single Character', u'label': 'field two'}}) + u'type': u'String', u'label': 'field two'}}) -- cgit v1.2.3 From 31893cff745b8cb62c3cc98b7103af2860eca319 Mon Sep 17 00:00:00 2001 From: Nikolaus Schlemm Date: Sun, 19 May 2013 15:12:01 +0200 Subject: * make test assertion more explicit * cleanup --- rest_framework/tests/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index 6bc37db2..d0b35241 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -846,7 +846,7 @@ class HumanizedFieldType(TestCase): """ self.assertIsInstance(humanized, unicode) - self.assertTrue(humanized) + self.assertNotEqual(humanized, '') class HumanizedField(TestCase): -- cgit v1.2.3 From 7a5cd090aa91a5d1af0d54586f36e2156e1ccc60 Mon Sep 17 00:00:00 2001 From: Oscar Vilaplana Date: Sun, 19 May 2013 15:45:33 +0200 Subject: fixed tests, added docs, renamed helper method --- rest_framework/tests/fields.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index 13df769f..85698092 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -15,8 +15,8 @@ from django.test import TestCase from django.utils.datastructures import SortedDict from rest_framework import serializers -from rest_framework.fields import (humanize_field, humanize_field_type, humanize_form_fields, - Field) +from rest_framework.fields import (humanize_field, humanize_field_type, + humanize_form_fields, Field) from rest_framework.serializers import Serializer from rest_framework.tests.models import RESTFrameworkModel @@ -882,10 +882,14 @@ class HumanizedSerializer(TestCase): def test_humanized(self): humanized = humanize_form_fields(Form()) - self.assertEqual(humanized, { - 'field1': { - u'help_text': u'', u'required': True, - u'type': u'String', u'label': 'field one'}, - 'field2': { - u'help_text': u'', u'required': True, - u'type': u'String', u'label': 'field two'}}) + expected = { + 'field1': {u'help_text': u'', + u'label': u'field one', + u'max_length': 3, + u'required': True, + u'type': u'String'}, + 'field2': {u'help_text': u'', + u'label': u'field two', + u'required': True, + u'type': u'String'}} + self.assertEqual(humanized, expected) -- cgit v1.2.3 From a1deb5eac7d6d00c6269d88fce1cc6818d8ec04a Mon Sep 17 00:00:00 2001 From: Oscar Vilaplana Date: Thu, 23 May 2013 08:26:55 +0200 Subject: simplified, moved field humanizing to Field. broken tests --- rest_framework/tests/fields.py | 91 ++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 56 deletions(-) (limited to 'rest_framework/tests/fields.py') diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index 85698092..fd1fe961 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -15,8 +15,7 @@ from django.test import TestCase from django.utils.datastructures import SortedDict from rest_framework import serializers -from rest_framework.fields import (humanize_field, humanize_field_type, - humanize_form_fields, Field) +from rest_framework.fields import Field, CharField from rest_framework.serializers import Serializer from rest_framework.tests.models import RESTFrameworkModel @@ -768,14 +767,16 @@ class SlugFieldTests(TestCase): def test_given_serializer_value(self): class SlugFieldSerializer(serializers.ModelSerializer): - slug_field = serializers.SlugField(source='slug_field', max_length=20, required=False) + slug_field = serializers.SlugField(source='slug_field', + max_length=20, required=False) class Meta: model = self.SlugFieldModel serializer = SlugFieldSerializer(data={}) self.assertEqual(serializer.is_valid(), True) - self.assertEqual(getattr(serializer.fields['slug_field'], 'max_length'), 20) + self.assertEqual(getattr(serializer.fields['slug_field'], + 'max_length'), 20) class URLFieldTests(TestCase): @@ -796,7 +797,8 @@ class URLFieldTests(TestCase): serializer = URLFieldSerializer(data={}) self.assertEqual(serializer.is_valid(), True) - self.assertEqual(getattr(serializer.fields['url_field'], 'max_length'), 200) + self.assertEqual(getattr(serializer.fields['url_field'], + 'max_length'), 200) def test_given_model_value(self): class URLFieldSerializer(serializers.ModelSerializer): @@ -805,48 +807,21 @@ class URLFieldTests(TestCase): serializer = URLFieldSerializer(data={}) self.assertEqual(serializer.is_valid(), True) - self.assertEqual(getattr(serializer.fields['url_field'], 'max_length'), 128) + self.assertEqual(getattr(serializer.fields['url_field'], + 'max_length'), 128) def test_given_serializer_value(self): class URLFieldSerializer(serializers.ModelSerializer): - url_field = serializers.URLField(source='url_field', max_length=20, required=False) + url_field = serializers.URLField(source='url_field', + max_length=20, required=False) class Meta: model = self.URLFieldWithGivenMaxLengthModel serializer = URLFieldSerializer(data={}) self.assertEqual(serializer.is_valid(), True) - self.assertEqual(getattr(serializer.fields['url_field'], 'max_length'), 20) - - -class HumanizedFieldType(TestCase): - def test_standard_type_classes(self): - for field_type_name in forms.fields.__all__: - field_type = getattr(forms.fields, field_type_name) - humanized = humanize_field_type(field_type) - self.assert_valid_name(humanized) - - def test_standard_type_names(self): - for field_type_name in forms.fields.__all__: - humanized = humanize_field_type(field_type_name) - self.assert_valid_name(humanized) - - def test_custom_type_name(self): - humanized = humanize_field_type('SomeCustomType') - self.assertEquals(humanized, u'Some custom type') - - def test_custom_type(self): - custom_type = namedtuple('SomeCustomType', []) - humanized = humanize_field_type(custom_type) - self.assertEquals(humanized, u'Some custom type') - - def assert_valid_name(self, humanized): - """A humanized field name is valid if it's a non-empty - unicode. - - """ - self.assertIsInstance(humanized, unicode) - self.assertNotEqual(humanized, '') + self.assertEqual(getattr(serializer.fields['url_field'], + 'max_length'), 20) class HumanizedField(TestCase): @@ -859,37 +834,41 @@ class HumanizedField(TestCase): self.optional_field.label = uuid4().hex self.optional_field.required = False + def test_type(self): + for field in (self.required_field, self.optional_field): + self.assertEqual(field.humanized['type'], field.type_name) + def test_required(self): - self.assertEqual(humanize_field(self.required_field)['required'], True) + self.assertEqual(self.required_field.humanized['required'], True) def test_optional(self): - self.assertEqual(humanize_field(self.optional_field)['required'], - False) + self.assertEqual(self.optional_field.humanized['required'], False) def test_label(self): for field in (self.required_field, self.optional_field): - self.assertEqual(humanize_field(field)['label'], field.label) + self.assertEqual(field.humanized['label'], field.label) -class Form(forms.Form): - field1 = forms.CharField(max_length=3, label='field one') - field2 = forms.CharField(label='field two') +class HumanizableSerializer(Serializer): + field1 = CharField(3, required=True) + field2 = CharField(10, required=False) class HumanizedSerializer(TestCase): def setUp(self): - self.serializer = TimestampedModelSerializer() + self.serializer = HumanizableSerializer() def test_humanized(self): - humanized = humanize_form_fields(Form()) + humanized = self.serializer.humanized expected = { - 'field1': {u'help_text': u'', - u'label': u'field one', + 'field1': {u'required': True, u'max_length': 3, - u'required': True, - u'type': u'String'}, - 'field2': {u'help_text': u'', - u'label': u'field two', - u'required': True, - u'type': u'String'}} - self.assertEqual(humanized, expected) + u'type': u'CharField', + u'read_only': False}, + 'field2': {u'required': False, + u'max_length': 10, + u'type': u'CharField', + u'read_only': False}} + self.assertEqual(set(expected.keys()), set(humanized.keys())) + for k, v in humanized.iteritems(): + self.assertEqual(v, expected[k]) -- cgit v1.2.3