from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType from django.core import management from django.test import TestCase, override_settings from .models import Article class SwappableModelTests(TestCase): # Limit memory usage when calling 'migrate'. available_apps = [ "swappable_models", "django.contrib.auth", "django.contrib.contenttypes", ] @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 migrate. This will re-build the permissions and content types. management.call_command("migrate", interactive=False, verbosity=0) # 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. Model swapping honors this." Article.objects.all() self.assertIsNone(Article._meta.swapped)