| 1 | diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py
|
|---|
| 2 | index 32ae8ab..4fe99f3 100644
|
|---|
| 3 | --- a/django/core/management/commands/loaddata.py
|
|---|
| 4 | +++ b/django/core/management/commands/loaddata.py
|
|---|
| 5 | @@ -97,6 +97,8 @@ class Command(BaseCommand):
|
|---|
| 6 | if has_bz2:
|
|---|
| 7 | compression_types['bz2'] = bz2.BZ2File
|
|---|
| 8 |
|
|---|
| 9 | + fixture_file_found = False
|
|---|
| 10 | +
|
|---|
| 11 | app_module_paths = []
|
|---|
| 12 | for app in get_apps():
|
|---|
| 13 | if hasattr(app, '__path__'):
|
|---|
| 14 | @@ -164,6 +166,7 @@ class Command(BaseCommand):
|
|---|
| 15 | open_method = compression_types[compression_format]
|
|---|
| 16 | try:
|
|---|
| 17 | fixture = open_method(full_path, 'r')
|
|---|
| 18 | + fixture_file_found = True
|
|---|
| 19 | except IOError:
|
|---|
| 20 | if verbosity >= 2:
|
|---|
| 21 | self.stdout.write("No %s fixture '%s' in %s." % \
|
|---|
| 22 | @@ -215,6 +218,9 @@ class Command(BaseCommand):
|
|---|
| 23 | raise CommandError(
|
|---|
| 24 | "No fixture data found for '%s'. (File format may be invalid.)" %
|
|---|
| 25 | (fixture_name))
|
|---|
| 26 | + if not fixture_file_found:
|
|---|
| 27 | + self.stderr.write("Any fixture file couldn't be found for '%s'" %
|
|---|
| 28 | + fixture_label)
|
|---|
| 29 |
|
|---|
| 30 | # Since we disabled constraint checks, we must manually check for
|
|---|
| 31 | # any invalid keys that might have been added
|
|---|
| 32 | diff --git a/tests/modeltests/fixtures/tests.py b/tests/modeltests/fixtures/tests.py
|
|---|
| 33 | index f9b0ac8..a80ca72 100644
|
|---|
| 34 | --- a/tests/modeltests/fixtures/tests.py
|
|---|
| 35 | +++ b/tests/modeltests/fixtures/tests.py
|
|---|
| 36 | @@ -130,7 +130,7 @@ class FixtureLoadingTests(TestCase):
|
|---|
| 37 | ])
|
|---|
| 38 |
|
|---|
| 39 | # Load a fixture that doesn't exist
|
|---|
| 40 | - management.call_command('loaddata', 'unknown.json', verbosity=0, commit=False)
|
|---|
| 41 | + management.call_command('loaddata', 'unknown.json', verbosity=0, stderr=six.StringIO(), commit=False)
|
|---|
| 42 |
|
|---|
| 43 | # object list is unaffected
|
|---|
| 44 | self.assertQuerysetEqual(Article.objects.all(), [
|
|---|
| 45 | @@ -265,10 +265,11 @@ class FixtureLoadingTests(TestCase):
|
|---|
| 46 |
|
|---|
| 47 | def test_unmatched_identifier_loading(self):
|
|---|
| 48 | # Try to load db fixture 3. This won't load because the database identifier doesn't match
|
|---|
| 49 | - management.call_command('loaddata', 'db_fixture_3', verbosity=0, commit=False)
|
|---|
| 50 | + management.call_command('loaddata', 'db_fixture_3', verbosity=0, stderr=six.StringIO(), commit=False)
|
|---|
| 51 | self.assertQuerysetEqual(Article.objects.all(), [])
|
|---|
| 52 |
|
|---|
| 53 | - management.call_command('loaddata', 'db_fixture_3', verbosity=0, using='default', commit=False)
|
|---|
| 54 | + management.call_command('loaddata', 'db_fixture_3', verbosity=0, stderr=six.StringIO(),
|
|---|
| 55 | + using='default', commit=False)
|
|---|
| 56 | self.assertQuerysetEqual(Article.objects.all(), [])
|
|---|
| 57 |
|
|---|
| 58 | def test_output_formats(self):
|
|---|
| 59 | diff --git a/tests/modeltests/fixtures_model_package/tests.py b/tests/modeltests/fixtures_model_package/tests.py
|
|---|
| 60 | index d147fe6..68edd91 100644
|
|---|
| 61 | --- a/tests/modeltests/fixtures_model_package/tests.py
|
|---|
| 62 | +++ b/tests/modeltests/fixtures_model_package/tests.py
|
|---|
| 63 | @@ -3,6 +3,7 @@ from __future__ import unicode_literals
|
|---|
| 64 | from django.core import management
|
|---|
| 65 | from django.db import transaction
|
|---|
| 66 | from django.test import TestCase, TransactionTestCase
|
|---|
| 67 | +from django.utils import six
|
|---|
| 68 |
|
|---|
| 69 | from .models import Article, Book
|
|---|
| 70 |
|
|---|
| 71 | @@ -93,7 +94,7 @@ class FixtureTestCase(TestCase):
|
|---|
| 72 | )
|
|---|
| 73 |
|
|---|
| 74 | # Load a fixture that doesn't exist
|
|---|
| 75 | - management.call_command("loaddata", "unknown.json", verbosity=0, commit=False)
|
|---|
| 76 | + management.call_command("loaddata", "unknown.json", verbosity=0, stderr=six.StringIO(), commit=False)
|
|---|
| 77 | self.assertQuerysetEqual(
|
|---|
| 78 | Article.objects.all(), [
|
|---|
| 79 | "Django conquers world!",
|
|---|
| 80 | diff --git a/tests/regressiontests/fixtures_regress/tests.py b/tests/regressiontests/fixtures_regress/tests.py
|
|---|
| 81 | index 678db4a..ce287dc 100644
|
|---|
| 82 | --- a/tests/regressiontests/fixtures_regress/tests.py
|
|---|
| 83 | +++ b/tests/regressiontests/fixtures_regress/tests.py
|
|---|
| 84 | @@ -428,10 +428,24 @@ class TestFixtures(TestCase):
|
|---|
| 85 | verbosity=2,
|
|---|
| 86 | commit=False,
|
|---|
| 87 | stdout=stdout_output,
|
|---|
| 88 | + stderr=six.StringIO()
|
|---|
| 89 | )
|
|---|
| 90 | self.assertTrue("No xml fixture 'this_fixture_doesnt_exist' in" in
|
|---|
| 91 | stdout_output.getvalue())
|
|---|
| 92 |
|
|---|
| 93 | + def test_loaddata_not_fixture_file(self):
|
|---|
| 94 | + stderr_output = six.StringIO()
|
|---|
| 95 | + management.call_command(
|
|---|
| 96 | + 'loaddata',
|
|---|
| 97 | + 'this_fixture_doesnt_exist',
|
|---|
| 98 | + commit=False,
|
|---|
| 99 | + stderr=stderr_output,
|
|---|
| 100 | + stdout=six.StringIO()
|
|---|
| 101 | + )
|
|---|
| 102 | +
|
|---|
| 103 | + self.assertTrue("Any fixture file couldn't be found for 'this_fixture_doesnt_exist'" in
|
|---|
| 104 | + stderr_output.getvalue())
|
|---|
| 105 | +
|
|---|
| 106 |
|
|---|
| 107 | class NaturalKeyFixtureTests(TestCase):
|
|---|
| 108 |
|
|---|