diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2014-04-21 11:41:30 +0200 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2014-04-21 11:43:08 +0200 |
| commit | 3f76339355c1fe550dedf676feddd42a5d48be58 (patch) | |
| tree | 0498fa3033274e74addeb5df5462663b539df6ad /tests/model_inheritance | |
| parent | 471fb04a307870794e3cefb1177405b506ee1a0a (diff) | |
Fixed #22402 -- Consolidated model_inheritance tests.
The model_inheritance_same_model_name tests couldn't be run without the
model_inheritance tests. Make the problem go away by merging them.
Thanks timo for the report.
Diffstat (limited to 'tests/model_inheritance')
| -rw-r--r-- | tests/model_inheritance/same_model_name/__init__.py | 0 | ||||
| -rw-r--r-- | tests/model_inheritance/same_model_name/models.py | 19 | ||||
| -rw-r--r-- | tests/model_inheritance/tests.py | 42 |
3 files changed, 59 insertions, 2 deletions
diff --git a/tests/model_inheritance/same_model_name/__init__.py b/tests/model_inheritance/same_model_name/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/model_inheritance/same_model_name/__init__.py diff --git a/tests/model_inheritance/same_model_name/models.py b/tests/model_inheritance/same_model_name/models.py new file mode 100644 index 0000000000..307a505ee6 --- /dev/null +++ b/tests/model_inheritance/same_model_name/models.py @@ -0,0 +1,19 @@ +""" + +Model inheritance across apps can result in models with the same name, +requiring an %(app_label)s format string. This app tests this feature by +redefining the Copy model from model_inheritance/models.py. +""" + +from django.db import models + +from model_inheritance.models import NamedURL +from django.utils.encoding import python_2_unicode_compatible + + +@python_2_unicode_compatible +class Copy(NamedURL): + content = models.TextField() + + def __str__(self): + return self.content diff --git a/tests/model_inheritance/tests.py b/tests/model_inheritance/tests.py index ebcfe1154e..50cdf31b87 100644 --- a/tests/model_inheritance/tests.py +++ b/tests/model_inheritance/tests.py @@ -3,15 +3,16 @@ from __future__ import unicode_literals from operator import attrgetter from django.core.exceptions import FieldError +from django.core.management import call_command from django.db import connection from django.test import TestCase -from django.test.utils import CaptureQueriesContext +from django.test.utils import CaptureQueriesContext, override_settings from django.utils import six from .models import ( Chef, CommonInfo, ItalianRestaurant, ParkingLot, Place, Post, Restaurant, Student, Supplier, Worker, MixinModel, - Title, Base, SubBase) + Title, Copy, Base, SubBase) class ModelInheritanceTests(TestCase): @@ -339,3 +340,40 @@ class ModelInheritanceTests(TestCase): # accidentally found). self.assertQuerysetEqual( s.titles.all(), []) + + +class InheritanceSameModelNameTests(TestCase): + + def setUp(self): + # The Title model has distinct accessors for both + # model_inheritance.Copy and model_inheritance_same_model_name.Copy + # models. + self.title = Title.objects.create(title='Lorem Ipsum') + + def test_inheritance_related_name(self): + self.assertEqual( + self.title.attached_model_inheritance_copy_set.create( + content='Save $ on V1agr@', + url='http://v1agra.com/', + title='V1agra is spam', + ), Copy.objects.get( + content='Save $ on V1agr@', + )) + + def test_inheritance_with_same_model_name(self): + with self.modify_settings( + INSTALLED_APPS={'append': ['model_inheritance.same_model_name']}): + call_command('migrate', verbosity=0) + from .same_model_name.models import Copy + self.assertEqual( + self.title.attached_same_model_name_copy_set.create( + content='The Web framework for perfectionists with deadlines.', + url='http://www.djangoproject.com/', + title='Django Rocks' + ), Copy.objects.get( + content='The Web framework for perfectionists with deadlines.', + )) + + def test_related_name_attribute_exists(self): + # The Post model doesn't have an attribute called 'attached_%(app_label)s_%(class)s_set'. + self.assertFalse(hasattr(self.title, 'attached_%(app_label)s_%(class)s_set')) |
