summaryrefslogtreecommitdiff
path: root/tests/swappable_models
diff options
context:
space:
mode:
authorFlorian Apolloner <florian@apolloner.eu>2013-02-26 09:53:47 +0100
committerFlorian Apolloner <florian@apolloner.eu>2013-02-26 14:36:57 +0100
commit89f40e36246100df6a11316c31a76712ebc6c501 (patch)
tree6e65639683ddaf2027908d1ecb1739e0e2ff853b /tests/swappable_models
parentb3d2ccb5bfbaf6e7fe1f98843baaa48c35a70950 (diff)
downloaddjango-89f40e36246100df6a11316c31a76712ebc6c501.tar.gz
Merged regressiontests and modeltests into the test root.
Diffstat (limited to 'tests/swappable_models')
-rw-r--r--tests/swappable_models/__init__.py0
-rw-r--r--tests/swappable_models/models.py15
-rw-r--r--tests/swappable_models/tests.py58
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)