diff --git a/rest_framework/tests/test_non_native_fields.py b/rest_framework/tests/test_non_native_fields.py old mode 100644 new mode 100755 index 917b11213..ef8e002b9 --- a/rest_framework/tests/test_non_native_fields.py +++ b/rest_framework/tests/test_non_native_fields.py @@ -1,6 +1,9 @@ from django.db import models from django.test import TestCase + from rest_framework import serializers +from rest_framework import generics +from rest_framework.compat import patterns, url class ExampleModel(models.Model): @@ -10,6 +13,7 @@ class ExampleModel(models.Model): class ExampleSerializer(serializers.ModelSerializer): password_confirmation = serializers.CharField() + def validate_password_confirmation(self, attrs, source): password_confirmation = attrs[source] password = attrs['password'] @@ -17,6 +21,7 @@ class ExampleSerializer(serializers.ModelSerializer): raise serializers.ValidationError('Password confirmation mismatch') attrs.pop(source) return attrs + class Meta: model = ExampleModel fields = ('email', 'password', 'password_confirmation',) @@ -24,7 +29,24 @@ class ExampleSerializer(serializers.ModelSerializer): non_native_fields = ('password_confirmation',) +class ExampleView(generics.ListCreateAPIView): + """ + ExampleView + """ + model = ExampleModel + serializer_class = ExampleSerializer + +example_view = ExampleView.as_view() + + +urlpatterns = patterns('', + url(r'^example$', example_view), +) + + class NonNativeFieldTests(TestCase): + urls = 'rest_framework.tests.test_non_native_fields' + def test_non_native_fields(self): data = { 'email': 'foo@example.com', @@ -49,3 +71,11 @@ class NonNativeFieldTests(TestCase): self.assertEquals(len(serializer.errors), 1) self.assertEquals(serializer.errors['password_confirmation'], ['Password confirmation mismatch']) + + def test_non_native_fields_displayed_in_html_version(self): + """ + Ensure password_confirmation field is shown in the browsable API form + """ + response = self.client.get('/example', HTTP_ACCEPT='text/html') + self.assertContains(response, 'for="password"') + self.assertContains(response, 'for="password_confirmation"')