diff --git a/tests/fixtures/tests.py b/tests/fixtures/tests.py index c24e0806fa6..d6348e82ff9 100644 --- a/tests/fixtures/tests.py +++ b/tests/fixtures/tests.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +import unittest import warnings from django.contrib.sites.models import Site diff --git a/tests/serializers/tests.py b/tests/serializers/tests.py index 381cc5ed87b..b32aa226570 100644 --- a/tests/serializers/tests.py +++ b/tests/serializers/tests.py @@ -14,7 +14,7 @@ except ImportError: from django.conf import settings -from django.core import serializers +from django.core import management, serializers from django.db import transaction, connection from django.test import TestCase, TransactionTestCase, Approximate from django.utils import six @@ -440,6 +440,26 @@ class JsonSerializerTransactionTestCase(SerializersTransactionTestBase, Transact }]""" +@unittest.skipIf(HAS_YAML, "Yaml is installed") +class NoYamlSerializerTestCase(TestCase): + """Not having pyyaml installed provides a misleading error + + #12756 + """ + def test_missing_pyyaml_error_message(self): + """Using yaml serializer without pyyaml raises ImportError""" + jane = Author(name="Jane") + self.assertRaises(ImportError, serializers.serialize, "yaml", [jane]) + + def test_deserializer_pyyaml_error_message(self): + """Using yaml deserializer without pyyaml raises ImportError""" + self.assertRaises(ImportError, serializers.deserialize, "yaml", "") + + def test_missing_pyyaml_error_message(self): + self.assertRaisesRegexp(management.CommandError, r'No module named yaml', + management.call_command, 'dumpdata', format='yaml') + + @unittest.skipUnless(HAS_YAML, "No yaml library detected") class YamlSerializerTestCase(SerializersTestBase, TestCase): serializer_name = "yaml"