diff options
author | Florian Apolloner <florian@apolloner.eu> | 2013-02-26 09:53:47 +0100 |
---|---|---|
committer | Florian Apolloner <florian@apolloner.eu> | 2013-02-26 14:36:57 +0100 |
commit | 89f40e36246100df6a11316c31a76712ebc6c501 (patch) | |
tree | 6e65639683ddaf2027908d1ecb1739e0e2ff853b /tests/swappable_models | |
parent | b3d2ccb5bfbaf6e7fe1f98843baaa48c35a70950 (diff) | |
download | django-89f40e36246100df6a11316c31a76712ebc6c501.tar.gz |
Merged regressiontests and modeltests into the test root.
Diffstat (limited to 'tests/swappable_models')
-rw-r--r-- | tests/swappable_models/__init__.py | 0 | ||||
-rw-r--r-- | tests/swappable_models/models.py | 15 | ||||
-rw-r--r-- | tests/swappable_models/tests.py | 58 |
3 files changed, 73 insertions, 0 deletions
diff --git a/tests/swappable_models/__init__.py b/tests/swappable_models/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/swappable_models/__init__.py diff --git a/tests/swappable_models/models.py b/tests/swappable_models/models.py new file mode 100644 index 0000000000..92692d4396 --- /dev/null +++ b/tests/swappable_models/models.py @@ -0,0 +1,15 @@ +from django.db import models + + +class Article(models.Model): + title = models.CharField(max_length=100) + publication_date = models.DateField() + + class Meta: + swappable = 'TEST_ARTICLE_MODEL' + + +class AlternateArticle(models.Model): + title = models.CharField(max_length=100) + publication_date = models.DateField() + byline = models.CharField(max_length=100) diff --git a/tests/swappable_models/tests.py b/tests/swappable_models/tests.py new file mode 100644 index 0000000000..089b391416 --- /dev/null +++ b/tests/swappable_models/tests.py @@ -0,0 +1,58 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.six import StringIO + +from django.contrib.auth.models import Permission +from django.contrib.contenttypes.models import ContentType +from django.core import management +from django.db.models.loading import cache +from django.test import TestCase +from django.test.utils import override_settings + +from regressiontests.swappable_models.models import Article + + +class SwappableModelTests(TestCase): + def setUp(self): + # This test modifies the installed apps, so we need to make sure + # we're not dealing with a cached app list. + cache._get_models_cache.clear() + + def tearDown(self): + # By fiddling with swappable models, we alter the installed models + # cache, so flush it to make sure there are no side effects. + cache._get_models_cache.clear() + + @override_settings(TEST_ARTICLE_MODEL='swappable_models.AlternateArticle') + def test_generated_data(self): + "Permissions and content types are not created for a swapped model" + + # Delete all permissions and content_types + Permission.objects.filter(content_type__app_label='swappable_models').delete() + ContentType.objects.filter(app_label='swappable_models').delete() + + # Re-run syncdb. This will re-build the permissions and content types. + new_io = StringIO() + management.call_command('syncdb', load_initial_data=False, interactive=False, stdout=new_io) + + # Check that content types and permissions exist for the swapped model, + # but not for the swappable model. + apps_models = [(p.content_type.app_label, p.content_type.model) + for p in Permission.objects.all()] + self.assertIn(('swappable_models', 'alternatearticle'), apps_models) + self.assertNotIn(('swappable_models', 'article'), apps_models) + + apps_models = [(ct.app_label, ct.model) + for ct in ContentType.objects.all()] + self.assertIn(('swappable_models', 'alternatearticle'), apps_models) + self.assertNotIn(('swappable_models', 'article'), apps_models) + + @override_settings(TEST_ARTICLE_MODEL='swappable_models.article') + def test_case_insensitive(self): + "Model names are case insensitive. Check that model swapping honors this." + try: + Article.objects.all() + except AttributeError: + self.fail('Swappable model names should be case insensitive.') + + self.assertIsNone(Article._meta.swapped) |