diff options
| author | Andreas Pelme | 2014-03-02 12:40:30 +0100 | 
|---|---|---|
| committer | Andreas Pelme | 2014-03-02 12:40:30 +0100 | 
| commit | 971578ca345c3d3bae7fd93b87c41d43483b6f05 (patch) | |
| tree | 72a6d3d0ced5750a8ba01bedc3a6f8a936e05e2f /tests/test_multitable_inheritance.py | |
| parent | 62786a7ad64918022f11f1b95ce84adb8d798830 (diff) | |
| download | django-rest-framework-971578ca345c3d3bae7fd93b87c41d43483b6f05.tar.bz2 | |
Support for running the test suite with py.test
 * Get rid of runtests.py
 * Moved test code  from rest_framework/tests and rest_framework/runtests to tests
 * Invoke py.test from setup.py
 * Invoke py.test from Travis
 * Invoke py.test from tox
 * Changed setUpClass to be just plain setUp in test_permissions.py
 * Updated contribution guideline to show how to invoke py.test
Diffstat (limited to 'tests/test_multitable_inheritance.py')
| -rw-r--r-- | tests/test_multitable_inheritance.py | 67 | 
1 files changed, 67 insertions, 0 deletions
| diff --git a/tests/test_multitable_inheritance.py b/tests/test_multitable_inheritance.py new file mode 100644 index 00000000..ce1bf3ea --- /dev/null +++ b/tests/test_multitable_inheritance.py @@ -0,0 +1,67 @@ +from __future__ import unicode_literals +from django.db import models +from django.test import TestCase +from rest_framework import serializers +from tests.models import RESTFrameworkModel + + +# Models +class ParentModel(RESTFrameworkModel): +    name1 = models.CharField(max_length=100) + + +class ChildModel(ParentModel): +    name2 = models.CharField(max_length=100) + + +class AssociatedModel(RESTFrameworkModel): +    ref = models.OneToOneField(ParentModel, primary_key=True) +    name = models.CharField(max_length=100) + + +# Serializers +class DerivedModelSerializer(serializers.ModelSerializer): +    class Meta: +        model = ChildModel + + +class AssociatedModelSerializer(serializers.ModelSerializer): +    class Meta: +        model = AssociatedModel + + +# Tests +class IneritedModelSerializationTests(TestCase): + +    def test_multitable_inherited_model_fields_as_expected(self): +        """ +        Assert that the parent pointer field is not included in the fields +        serialized fields +        """ +        child = ChildModel(name1='parent name', name2='child name') +        serializer = DerivedModelSerializer(child) +        self.assertEqual(set(serializer.data.keys()), +                         set(['name1', 'name2', 'id'])) + +    def test_onetoone_primary_key_model_fields_as_expected(self): +        """ +        Assert that a model with a onetoone field that is the primary key is +        not treated like a derived model +        """ +        parent = ParentModel(name1='parent name') +        associate = AssociatedModel(name='hello', ref=parent) +        serializer = AssociatedModelSerializer(associate) +        self.assertEqual(set(serializer.data.keys()), +                         set(['name', 'ref'])) + +    def test_data_is_valid_without_parent_ptr(self): +        """ +        Assert that the pointer to the parent table is not a required field +        for input data +        """ +        data = { +            'name1': 'parent name', +            'name2': 'child name', +        } +        serializer = DerivedModelSerializer(data=data) +        self.assertEqual(serializer.is_valid(), True) | 
