diff --git a/constance/apps.py b/constance/apps.py index 8aebcc5..c939927 100644 --- a/constance/apps.py +++ b/constance/apps.py @@ -12,7 +12,7 @@ class ConstanceConfig(AppConfig): signals.post_migrate.connect(self.create_perm, dispatch_uid='constance.create_perm') - def create_perm(self, *args, **kwargs): + def create_perm(self, using=None, *args, **kwargs): """ Creates a fake content type and permission to be able to check for permissions @@ -21,12 +21,12 @@ class ConstanceConfig(AppConfig): from django.contrib.contenttypes.models import ContentType if ContentType._meta.installed and Permission._meta.installed: - content_type, created = ContentType.objects.get_or_create( + content_type, created = ContentType.objects.using(using).get_or_create( app_label='constance', model='config', ) - permission, created = Permission.objects.get_or_create( + permission, created = Permission.objects.using(using).get_or_create( name='Can change config', content_type=content_type, codename='change_config') diff --git a/tests/settings.py b/tests/settings.py index 1f75d64..ae08f5a 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -23,6 +23,10 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:', + }, + 'secondary': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': ':memory:', } } diff --git a/tests/test_app.py b/tests/test_app.py new file mode 100644 index 0000000..b4c38c6 --- /dev/null +++ b/tests/test_app.py @@ -0,0 +1,46 @@ +from django.apps import apps +from django.contrib.auth.models import Permission +from django.contrib.contenttypes.models import ContentType +from django.db.models import signals +from django.test import TestCase + + +class TestApp(TestCase): + def setUp(self): + self.app_config = apps.get_app_config('constance') + + def test_post_migrate_signal_creates_content_type_and_permission_in_default_database(self): + self.assert_uses_correct_database('default') + + def test_post_migrate_signal_creates_content_type_and_permission_in_secondary_database(self): + self.assert_uses_correct_database('secondary') + + def test_uses_default_db_even_without_giving_using_keyword(self): + self.call_post_migrate(None) + + self.assert_content_type_and_permission_created('default') + + def assert_uses_correct_database(self, database_name): + self.call_post_migrate(database_name) + + self.assert_content_type_and_permission_created(database_name) + + def assert_content_type_and_permission_created(self, database_name): + content_type_queryset = ContentType.objects.filter(app_label=self.app_config.name) \ + .using(database_name) + + self.assertTrue(content_type_queryset.exists()) + + permission_queryset = Permission.objects.filter(content_type=content_type_queryset.get()) \ + .using(database_name).exists() + + self.assertTrue(permission_queryset) + + def call_post_migrate(self, database_name): + signals.post_migrate.send( + sender=self.app_config, + app_config=self.app_config, + verbosity=None, + interactive=None, + using=database_name + )