diff options
Diffstat (limited to 'rest_framework/tests/fields.py')
| -rw-r--r-- | rest_framework/tests/fields.py | 78 | 
1 files changed, 78 insertions, 0 deletions
| diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index dad69975..7a5ed718 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -4,6 +4,9 @@ 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, +                                   humanize_form_fields) +from django import forms  from decimal import Decimal  from django.db import models  from django.test import TestCase @@ -11,6 +14,9 @@ from django.core import validators  from rest_framework import serializers  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): @@ -809,3 +815,75 @@ class URLFieldTests(TestCase):          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.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) + + +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'}}) | 
