diff options
Diffstat (limited to 'tests/test_relations.py')
| -rw-r--r-- | tests/test_relations.py | 178 | 
1 files changed, 13 insertions, 165 deletions
| diff --git a/tests/test_relations.py b/tests/test_relations.py index c29618ce..62353dc2 100644 --- a/tests/test_relations.py +++ b/tests/test_relations.py @@ -1,5 +1,5 @@  from .utils import mock_reverse, fail_reverse, BadType, MockObject, MockQueryset -from django.core.exceptions import ImproperlyConfigured, ValidationError +from django.core.exceptions import ImproperlyConfigured  from rest_framework import serializers  from rest_framework.test import APISimpleTestCase  import pytest @@ -30,15 +30,15 @@ class TestPrimaryKeyRelatedField(APISimpleTestCase):          assert instance is self.instance      def test_pk_related_lookup_does_not_exist(self): -        with pytest.raises(ValidationError) as excinfo: +        with pytest.raises(serializers.ValidationError) as excinfo:              self.field.to_internal_value(4) -        msg = excinfo.value.messages[0] +        msg = excinfo.value.detail[0]          assert msg == "Invalid pk '4' - object does not exist."      def test_pk_related_lookup_invalid_type(self): -        with pytest.raises(ValidationError) as excinfo: +        with pytest.raises(serializers.ValidationError) as excinfo:              self.field.to_internal_value(BadType()) -        msg = excinfo.value.messages[0] +        msg = excinfo.value.detail[0]          assert msg == 'Incorrect type. Expected pk value, received BadType.'      def test_pk_representation(self): @@ -51,7 +51,7 @@ class TestHyperlinkedIdentityField(APISimpleTestCase):          self.instance = MockObject(pk=1, name='foo')          self.field = serializers.HyperlinkedIdentityField(view_name='example')          self.field.reverse = mock_reverse -        self.field.context = {'request': True} +        self.field._context = {'request': True}      def test_representation(self):          representation = self.field.to_representation(self.instance) @@ -62,7 +62,7 @@ class TestHyperlinkedIdentityField(APISimpleTestCase):          assert representation is None      def test_representation_with_format(self): -        self.field.context['format'] = 'xml' +        self.field._context['format'] = 'xml'          representation = self.field.to_representation(self.instance)          assert representation == 'http://example.org/example/1.xml/' @@ -91,14 +91,14 @@ class TestHyperlinkedIdentityFieldWithFormat(APISimpleTestCase):          self.instance = MockObject(pk=1, name='foo')          self.field = serializers.HyperlinkedIdentityField(view_name='example', format='json')          self.field.reverse = mock_reverse -        self.field.context = {'request': True} +        self.field._context = {'request': True}      def test_representation(self):          representation = self.field.to_representation(self.instance)          assert representation == 'http://example.org/example/1/'      def test_representation_with_format(self): -        self.field.context['format'] = 'xml' +        self.field._context['format'] = 'xml'          representation = self.field.to_representation(self.instance)          assert representation == 'http://example.org/example/1.json/' @@ -120,169 +120,17 @@ class TestSlugRelatedField(APISimpleTestCase):          assert instance is self.instance      def test_slug_related_lookup_does_not_exist(self): -        with pytest.raises(ValidationError) as excinfo: +        with pytest.raises(serializers.ValidationError) as excinfo:              self.field.to_internal_value('doesnotexist') -        msg = excinfo.value.messages[0] +        msg = excinfo.value.detail[0]          assert msg == 'Object with name=doesnotexist does not exist.'      def test_slug_related_lookup_invalid_type(self): -        with pytest.raises(ValidationError) as excinfo: +        with pytest.raises(serializers.ValidationError) as excinfo:              self.field.to_internal_value(BadType()) -        msg = excinfo.value.messages[0] +        msg = excinfo.value.detail[0]          assert msg == 'Invalid value.'      def test_representation(self):          representation = self.field.to_representation(self.instance)          assert representation == self.instance.name - -# Older tests, for review... - -# """ -# General tests for relational fields. -# """ -# from __future__ import unicode_literals -# from django import get_version -# from django.db import models -# from django.test import TestCase -# from django.utils import unittest -# from rest_framework import serializers -# from tests.models import BlogPost - - -# 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.to_primative, '') -#         self.assertRaises(serializers.ValidationError, field.to_primative, []) - -#     def test_hyperlinked_related_field_with_empty_string(self): -#         field = serializers.HyperlinkedRelatedField(queryset=NullModel.objects.all(), view_name='') -#         self.assertRaises(serializers.ValidationError, field.to_primative, '') -#         self.assertRaises(serializers.ValidationError, field.to_primative, []) - -#     def test_slug_related_field_with_empty_string(self): -#         field = serializers.SlugRelatedField(queryset=NullModel.objects.all(), slug_field='pk') -#         self.assertRaises(serializers.ValidationError, field.to_primative, '') -#         self.assertRaises(serializers.ValidationError, field.to_primative, []) - - -# class TestManyRelatedMixin(TestCase): -#     def test_missing_many_to_many_related_field(self): -#         ''' -#         Regression test for #632 - -#         https://github.com/tomchristie/django-rest-framework/pull/632 -#         ''' -#         field = serializers.RelatedField(many=True, read_only=False) - -#         into = {} -#         field.field_from_native({}, None, 'field_name', into) -#         self.assertEqual(into['field_name'], []) - - -# # Regression tests for #694 (`source` attribute on related fields) - -# class RelatedFieldSourceTests(TestCase): -#     def test_related_manager_source(self): -#         """ -#         Relational fields should be able to use manager-returning methods as their source. -#         """ -#         BlogPost.objects.create(title='blah') -#         field = serializers.RelatedField(many=True, source='get_blogposts_manager') - -#         class ClassWithManagerMethod(object): -#             def get_blogposts_manager(self): -#                 return BlogPost.objects - -#         obj = ClassWithManagerMethod() -#         value = field.field_to_native(obj, 'field_name') -#         self.assertEqual(value, ['BlogPost object']) - -#     def test_related_queryset_source(self): -#         """ -#         Relational fields should be able to use queryset-returning methods as their source. -#         """ -#         BlogPost.objects.create(title='blah') -#         field = serializers.RelatedField(many=True, source='get_blogposts_queryset') - -#         class ClassWithQuerysetMethod(object): -#             def get_blogposts_queryset(self): -#                 return BlogPost.objects.all() - -#         obj = ClassWithQuerysetMethod() -#         value = field.field_to_native(obj, 'field_name') -#         self.assertEqual(value, ['BlogPost object']) - -#     def test_dotted_source(self): -#         """ -#         Source argument should support dotted.source notation. -#         """ -#         BlogPost.objects.create(title='blah') -#         field = serializers.RelatedField(many=True, source='a.b.c') - -#         class ClassWithQuerysetMethod(object): -#             a = { -#                 'b': { -#                     'c': BlogPost.objects.all() -#                 } -#             } - -#         obj = ClassWithQuerysetMethod() -#         value = field.field_to_native(obj, 'field_name') -#         self.assertEqual(value, ['BlogPost object']) - -#     # Regression for #1129 -#     def test_exception_for_incorect_fk(self): -#         """ -#         Check that the exception message are correct if the source field -#         doesn't exist. -#         """ -#         from tests.models import ManyToManySource - -#         class Meta: -#             model = ManyToManySource - -#         attrs = { -#             'name': serializers.SlugRelatedField( -#                 slug_field='name', source='banzai'), -#             'Meta': Meta, -#         } - -#         TestSerializer = type( -#             str('TestSerializer'), -#             (serializers.ModelSerializer,), -#             attrs -#         ) -#         with self.assertRaises(AttributeError): -#             TestSerializer(data={'name': 'foo'}) - - -# @unittest.skipIf(get_version() < '1.6.0', 'Upstream behaviour changed in v1.6') -# class RelatedFieldChoicesTests(TestCase): -#     """ -#     Tests for #1408 "Web browseable API doesn't have blank option on drop down list box" -#     https://github.com/tomchristie/django-rest-framework/issues/1408 -#     """ -#     def test_blank_option_is_added_to_choice_if_required_equals_false(self): -#         """ - -#         """ -#         post = BlogPost(title="Checking blank option is added") -#         post.save() - -#         queryset = BlogPost.objects.all() -#         field = serializers.RelatedField(required=False, queryset=queryset) - -#         choice_count = BlogPost.objects.count() -#         widget_count = len(field.widget.choices) - -#         self.assertEqual(widget_count, choice_count + 1, 'BLANK_CHOICE_DASH option should have been added') | 
