From 7a893ee77171d6cc37ffd40d67af6161633235e0 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Tue, 14 Oct 2014 23:15:43 +0200 Subject: [PATCH] Fixed #23651 -- Isolated non-existent fixture tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previous versions of the tests were buggy, as initial_data.json did exist and the test wasn't failing. It was finally failing on Python 3.4.2. Thanks Raphaƫl Hertzog for the report (and Debian bug #765117 contributors). --- tests/fixtures/tests.py | 42 +++++++++++++++++++++++---------- tests/fixtures_regress/tests.py | 13 ---------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/tests/fixtures/tests.py b/tests/fixtures/tests.py index a15a6aec8b..294ae82e27 100644 --- a/tests/fixtures/tests.py +++ b/tests/fixtures/tests.py @@ -7,6 +7,7 @@ from django.contrib.sites.models import Site from django.core import management from django.db import connection, IntegrityError from django.test import TestCase, TransactionTestCase, skipUnlessDBFeature +from django.utils.encoding import force_text from django.utils import six from .models import Article, Book, Spy, Tag, Visa @@ -165,18 +166,6 @@ class FixtureLoadingTests(DumpDataAssertMixin, TestCase): '' ]) - # Loading a fixture that doesn't exist emits a warning - with warnings.catch_warnings(record=True) as w: - warnings.simplefilter("always") - management.call_command('loaddata', 'unknown.json', verbosity=0) - self.assertEqual(len(w), 1) - self.assertTrue(w[0].message, "No fixture named 'unknown' found.") - - # An attempt to load a nonexistent 'initial_data' fixture isn't an error - with warnings.catch_warnings(record=True) as w: - management.call_command('loaddata', 'initial_data.json', verbosity=0) - self.assertEqual(len(w), 0) - # object list is unaffected self.assertQuerysetEqual(Article.objects.all(), [ '', @@ -396,6 +385,35 @@ class FixtureLoadingTests(DumpDataAssertMixin, TestCase): News StoriesLatest news storiesPoker has no place on ESPN2006-06-16T12:00:00Time to reform copyright2006-06-16T13:00:00copyrightfixturesarticle3lawfixturesarticle3Django ReinhardtStephane GrappelliPrinceAchieving self-awareness of Python programs""", format='xml', natural_foreign_keys=True) +class NonExistentFixtureTests(TestCase): + """ + Custom class to limit fixture dirs. + """ + available_apps = ['django.contrib.auth', 'django.contrib.contenttypes'] + + def test_loaddata_not_existent_fixture_file(self): + stdout_output = six.StringIO() + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + # With verbosity=2, we get both stdout output and a warning + management.call_command( + 'loaddata', + 'this_fixture_doesnt_exist', + verbosity=2, + stdout=stdout_output, + ) + self.assertIn("No fixture 'this_fixture_doesnt_exist' in", + force_text(stdout_output.getvalue())) + self.assertEqual(len(w), 1) + self.assertEqual(force_text(w[0].message), + "No fixture named 'this_fixture_doesnt_exist' found.") + + # An attempt to load a non-existent 'initial_data' fixture doesn't produce any warning + with warnings.catch_warnings(record=True) as w: + management.call_command('loaddata', 'initial_data.json', verbosity=0) + self.assertEqual(len(w), 0) + + class FixtureTransactionTests(DumpDataAssertMixin, TransactionTestCase): available_apps = [ diff --git a/tests/fixtures_regress/tests.py b/tests/fixtures_regress/tests.py index cc95a41b10..f8f13f824a 100644 --- a/tests/fixtures_regress/tests.py +++ b/tests/fixtures_regress/tests.py @@ -17,7 +17,6 @@ from django.db.models import signals from django.test import (TestCase, TransactionTestCase, skipIfDBFeature, skipUnlessDBFeature) from django.test import override_settings -from django.utils.encoding import force_text from django.utils._os import upath from django.utils import six from django.utils.six import PY3, StringIO @@ -465,18 +464,6 @@ class TestFixtures(TestCase): verbosity=0, ) - def test_loaddata_not_existant_fixture_file(self): - stdout_output = StringIO() - with warnings.catch_warnings(record=True): - management.call_command( - 'loaddata', - 'this_fixture_doesnt_exist', - verbosity=2, - stdout=stdout_output, - ) - self.assertTrue("No fixture 'this_fixture_doesnt_exist' in" in - force_text(stdout_output.getvalue())) - def test_ticket_20820(self): """ Regression for ticket #20820 -- loaddata on a model that inherits