Просмотр исходного кода

Unittests: Don't noop the django test database teardown, instead fix the underlying issue, which was caused by modifications to the DATABASE_NAME setting. Thanks to JannKleen. Fixes #82.

Ask Solem 15 лет назад
Родитель
Сommit
13b7a1fd64

+ 1 - 0
celery/loaders/default.py

@@ -24,6 +24,7 @@ class Loader(BaseLoader):
     """
 
     def setup_django_env(self, settingsdict):
+        print("SETUP_DJANGO_ENV")
         config = dict(DEFAULT_SETTINGS, **settingsdict)
 
         from django.conf import settings

+ 0 - 6
celery/tests/__init__.py

@@ -1,6 +0,0 @@
-from django.db import connection
-
-from celery.utils import noop
-
-# FIXME This breaks the test-suite for some reason.
-connection.creation.destroy_test_db = noop

+ 6 - 3
celery/tests/test_discovery.py

@@ -20,6 +20,9 @@ class TestDiscovery(unittest.TestCase):
 
     def test_discovery_with_broken(self):
         if "someapp" in settings.INSTALLED_APPS:
-            settings.INSTALLED_APPS = settings.INSTALLED_APPS + \
-                    ["xxxnot.aexist"]
-            self.assertRaises(ImportError, autodiscover)
+            installed_apps = list(settings.INSTALLED_APPS)
+            settings.INSTALLED_APPS = installed_apps + ["xxxnot.aexist"]
+            try:
+                self.assertRaises(ImportError, autodiscover)
+            finally:
+                settings.INSTALLED_APPS = installed_apps

+ 19 - 1
celery/tests/test_loaders.py

@@ -71,7 +71,7 @@ class TestDjangoLoader(unittest.TestCase):
 
     def test_on_worker_init(self):
         from django.conf import settings
-        old_imports = settings.CELERY_IMPORTS
+        old_imports = getattr(settings, "CELERY_IMPORTS", None)
         settings.CELERY_IMPORTS = ("xxx.does.not.exist", )
         try:
             self.assertRaises(ImportError, self.loader.on_worker_init)
@@ -93,6 +93,23 @@ class TestDjangoLoader(unittest.TestCase):
                                                        "frobulators"))
 
 
+def modifies_django_env(fun):
+
+    def _protected(*args, **kwargs):
+        from django.conf import settings
+        current = dict((key, getattr(settings, key))
+                        for key in settings.get_all_members()
+                            if key.isupper())
+        try:
+            return fun(*args, **kwargs)
+        finally:
+            for key, value in current.items():
+                setattr(settings, key, value)
+
+    return _protected
+
+
+
 class TestDefaultLoader(unittest.TestCase):
 
     def test_wanted_module_item(self):
@@ -101,6 +118,7 @@ class TestDefaultLoader(unittest.TestCase):
         self.assertFalse(default.wanted_module_item("_foo"))
         self.assertFalse(default.wanted_module_item("__foo"))
 
+    @modifies_django_env
     def test_read_configuration(self):
         from types import ModuleType