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/app_loading | |
parent | b3d2ccb5bfbaf6e7fe1f98843baaa48c35a70950 (diff) | |
download | django-89f40e36246100df6a11316c31a76712ebc6c501.tar.gz |
Merged regressiontests and modeltests into the test root.
Diffstat (limited to 'tests/app_loading')
-rw-r--r-- | tests/app_loading/__init__.py | 0 | ||||
-rw-r--r-- | tests/app_loading/eggs/brokenapp.egg | bin | 0 -> 1605 bytes | |||
-rw-r--r-- | tests/app_loading/eggs/modelapp.egg | bin | 0 -> 3347 bytes | |||
-rw-r--r-- | tests/app_loading/eggs/nomodelapp.egg | bin | 0 -> 1211 bytes | |||
-rw-r--r-- | tests/app_loading/eggs/omelet.egg | bin | 0 -> 9020 bytes | |||
-rw-r--r-- | tests/app_loading/models.py | 0 | ||||
-rw-r--r-- | tests/app_loading/not_installed/__init__.py | 0 | ||||
-rw-r--r-- | tests/app_loading/not_installed/models.py | 13 | ||||
-rw-r--r-- | tests/app_loading/tests.py | 110 |
9 files changed, 123 insertions, 0 deletions
diff --git a/tests/app_loading/__init__.py b/tests/app_loading/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/app_loading/__init__.py diff --git a/tests/app_loading/eggs/brokenapp.egg b/tests/app_loading/eggs/brokenapp.egg Binary files differnew file mode 100644 index 0000000000..8aca671598 --- /dev/null +++ b/tests/app_loading/eggs/brokenapp.egg diff --git a/tests/app_loading/eggs/modelapp.egg b/tests/app_loading/eggs/modelapp.egg Binary files differnew file mode 100644 index 0000000000..c2370b5b4c --- /dev/null +++ b/tests/app_loading/eggs/modelapp.egg diff --git a/tests/app_loading/eggs/nomodelapp.egg b/tests/app_loading/eggs/nomodelapp.egg Binary files differnew file mode 100644 index 0000000000..5b8d2170a2 --- /dev/null +++ b/tests/app_loading/eggs/nomodelapp.egg diff --git a/tests/app_loading/eggs/omelet.egg b/tests/app_loading/eggs/omelet.egg Binary files differnew file mode 100644 index 0000000000..bd1c68764b --- /dev/null +++ b/tests/app_loading/eggs/omelet.egg diff --git a/tests/app_loading/models.py b/tests/app_loading/models.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/app_loading/models.py diff --git a/tests/app_loading/not_installed/__init__.py b/tests/app_loading/not_installed/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/app_loading/not_installed/__init__.py diff --git a/tests/app_loading/not_installed/models.py b/tests/app_loading/not_installed/models.py new file mode 100644 index 0000000000..1e4b59894c --- /dev/null +++ b/tests/app_loading/not_installed/models.py @@ -0,0 +1,13 @@ +from django.db import models + + +class NotInstalledModel(models.Model): + pass + + +class RelatedModel(models.Model): + not_installed = models.ForeignKey(NotInstalledModel) + + +class M2MRelatedModel(models.Model): + not_installed = models.ManyToManyField(NotInstalledModel) diff --git a/tests/app_loading/tests.py b/tests/app_loading/tests.py new file mode 100644 index 0000000000..6dd0be2194 --- /dev/null +++ b/tests/app_loading/tests.py @@ -0,0 +1,110 @@ +from __future__ import absolute_import + +import copy +import os +import sys +import time + +from django.conf import Settings +from django.db.models.loading import cache, load_app, get_model, get_models +from django.utils._os import upath +from django.utils.unittest import TestCase + +class EggLoadingTest(TestCase): + + def setUp(self): + self.old_path = sys.path[:] + self.egg_dir = '%s/eggs' % os.path.dirname(upath(__file__)) + + # This test adds dummy applications to the app cache. These + # need to be removed in order to prevent bad interactions + # with the flush operation in other tests. + self.old_app_models = copy.deepcopy(cache.app_models) + self.old_app_store = copy.deepcopy(cache.app_store) + + def tearDown(self): + sys.path = self.old_path + cache.app_models = self.old_app_models + cache.app_store = self.old_app_store + + def test_egg1(self): + """Models module can be loaded from an app in an egg""" + egg_name = '%s/modelapp.egg' % self.egg_dir + sys.path.append(egg_name) + models = load_app('app_with_models') + self.assertFalse(models is None) + + def test_egg2(self): + """Loading an app from an egg that has no models returns no models (and no error)""" + egg_name = '%s/nomodelapp.egg' % self.egg_dir + sys.path.append(egg_name) + models = load_app('app_no_models') + self.assertTrue(models is None) + + def test_egg3(self): + """Models module can be loaded from an app located under an egg's top-level package""" + egg_name = '%s/omelet.egg' % self.egg_dir + sys.path.append(egg_name) + models = load_app('omelet.app_with_models') + self.assertFalse(models is None) + + def test_egg4(self): + """Loading an app with no models from under the top-level egg package generates no error""" + egg_name = '%s/omelet.egg' % self.egg_dir + sys.path.append(egg_name) + models = load_app('omelet.app_no_models') + self.assertTrue(models is None) + + def test_egg5(self): + """Loading an app from an egg that has an import error in its models module raises that error""" + egg_name = '%s/brokenapp.egg' % self.egg_dir + sys.path.append(egg_name) + self.assertRaises(ImportError, load_app, 'broken_app') + try: + load_app('broken_app') + except ImportError as e: + # Make sure the message is indicating the actual + # problem in the broken app. + self.assertTrue("modelz" in e.args[0]) + + +class GetModelsTest(TestCase): + def setUp(self): + from .not_installed import models + self.not_installed_module = models + + + def test_get_model_only_returns_installed_models(self): + self.assertEqual( + get_model("not_installed", "NotInstalledModel"), None) + + + def test_get_model_with_not_installed(self): + self.assertEqual( + get_model( + "not_installed", "NotInstalledModel", only_installed=False), + self.not_installed_module.NotInstalledModel) + + + def test_get_models_only_returns_installed_models(self): + self.assertFalse( + "NotInstalledModel" in + [m.__name__ for m in get_models()]) + + + def test_get_models_with_app_label_only_returns_installed_models(self): + self.assertEqual(get_models(self.not_installed_module), []) + + + def test_get_models_with_not_installed(self): + self.assertTrue( + "NotInstalledModel" in [ + m.__name__ for m in get_models(only_installed=False)]) + + +class NotInstalledModelsTest(TestCase): + def test_related_not_installed_model(self): + from .not_installed.models import NotInstalledModel + self.assertEqual( + set(NotInstalledModel._meta.get_all_field_names()), + set(["id", "relatedmodel", "m2mrelatedmodel"])) |