diff options
author | Konrad Świat <konrad.swiat@gmail.com> | 2014-10-30 18:38:47 +0100 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2014-10-31 18:21:54 -0400 |
commit | 934a16dc93a5f46f965ba299dbd543703d32d493 (patch) | |
tree | 3d1b84d25f68fc0a26d187fd85d2b099beb15ff1 /tests/fixtures_regress | |
parent | e548d08f243335b4f11190417830a5f3027efd2a (diff) | |
download | django-934a16dc93a5f46f965ba299dbd543703d32d493.tar.gz |
Fixed #23468 -- Added checks for duplicate fixtures directories in loaddata.
If settings.FIXTURE_DIRS contains duplicates or a default fixture
directory (app_name/fixtures), ImproperlyConfigured is raised.
Thanks to Berker Peksag and Tim Graham for review.
Diffstat (limited to 'tests/fixtures_regress')
-rw-r--r-- | tests/fixtures_regress/tests.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/fixtures_regress/tests.py b/tests/fixtures_regress/tests.py index 0ec48bc5e9..171ef30fec 100644 --- a/tests/fixtures_regress/tests.py +++ b/tests/fixtures_regress/tests.py @@ -8,6 +8,7 @@ import re import warnings from django.core import serializers +from django.core.exceptions import ImproperlyConfigured from django.core.serializers.base import DeserializationError from django.core import management from django.core.management.base import CommandError @@ -486,6 +487,48 @@ class TestFixtures(TestCase): verbosity=0, ) + @override_settings(FIXTURE_DIRS=[os.path.join(_cur_dir, 'fixtures_1'), + os.path.join(_cur_dir, 'fixtures_1')]) + def test_fixture_dirs_with_duplicates(self): + """ + settings.FIXTURE_DIRS cannot contain duplicates in order to avoid + repeated fixture loading. + """ + self.assertRaisesMessage( + ImproperlyConfigured, + "settings.FIXTURE_DIRS contains duplicates.", + management.call_command, + 'loaddata', + 'absolute.json', + verbosity=0, + ) + + @override_settings(FIXTURE_DIRS=[os.path.join(_cur_dir, 'fixtures')]) + def test_fixture_dirs_with_default_fixture_path(self): + """ + settings.FIXTURE_DIRS cannot contain a default fixtures directory + for application (app/fixtures) in order to avoid repeated fixture loading. + """ + self.assertRaisesMessage( + ImproperlyConfigured, + "'%s' is a default fixture directory for the '%s' app " + "and cannot be listed in settings.FIXTURE_DIRS." + % (os.path.join(_cur_dir, 'fixtures'), 'fixtures_regress'), + management.call_command, + 'loaddata', + 'absolute.json', + verbosity=0, + ) + + @override_settings(FIXTURE_DIRS=[os.path.join(_cur_dir, 'fixtures_1'), + os.path.join(_cur_dir, 'fixtures_2')]) + def test_loaddata_with_valid_fixture_dirs(self): + management.call_command( + 'loaddata', + 'absolute.json', + verbosity=0, + ) + class NaturalKeyFixtureTests(TestCase): |