forked from encode/django-rest-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' of https://github.com/tomchristie/django-rest-f…
- Loading branch information
Showing
2 changed files
with
72 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 rest_framework.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) |