diff options
author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2017-02-11 21:37:49 +0100 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2017-06-21 12:00:47 -0400 |
commit | 8cb1b1fd8e529d1896daeb089ea726109e0ba4f7 (patch) | |
tree | 3337abead0afac6a46b0ccfd48bc530aec3717de /tests/db_utils | |
parent | 0f91ba1adc037345474749faa64d36a4077b3fb8 (diff) | |
download | django-8cb1b1fd8e529d1896daeb089ea726109e0ba4f7.tar.gz |
Reorganized backends tests.
Diffstat (limited to 'tests/db_utils')
-rw-r--r-- | tests/db_utils/tests.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/db_utils/tests.py b/tests/db_utils/tests.py new file mode 100644 index 0000000000..2a45342df5 --- /dev/null +++ b/tests/db_utils/tests.py @@ -0,0 +1,49 @@ +"""Tests for django.db.utils.""" +import unittest + +from django.core.exceptions import ImproperlyConfigured +from django.db import DEFAULT_DB_ALIAS, connection +from django.db.utils import ConnectionHandler, ProgrammingError, load_backend +from django.test import SimpleTestCase, TestCase + + +class ConnectionHandlerTests(SimpleTestCase): + + def test_connection_handler_no_databases(self): + """Empty DATABASES setting defaults to the dummy backend.""" + DATABASES = {} + conns = ConnectionHandler(DATABASES) + self.assertEqual(conns[DEFAULT_DB_ALIAS].settings_dict['ENGINE'], 'django.db.backends.dummy') + msg = ( + 'settings.DATABASES is improperly configured. Please supply the ' + 'ENGINE value. Check settings documentation for more details.' + ) + with self.assertRaisesMessage(ImproperlyConfigured, msg): + conns[DEFAULT_DB_ALIAS].ensure_connection() + + +class DatabaseErrorWrapperTests(TestCase): + + @unittest.skipUnless(connection.vendor == 'postgresql', 'PostgreSQL test') + def test_reraising_backend_specific_database_exception(self): + cursor = connection.cursor() + msg = 'table "X" does not exist' + with self.assertRaisesMessage(ProgrammingError, msg) as cm: + cursor.execute('DROP TABLE "X"') + self.assertNotEqual(type(cm.exception), type(cm.exception.__cause__)) + self.assertIsNotNone(cm.exception.__cause__) + self.assertIsNotNone(cm.exception.__cause__.pgcode) + self.assertIsNotNone(cm.exception.__cause__.pgerror) + + +class LoadBackendTests(SimpleTestCase): + + def test_load_backend_invalid_name(self): + msg = ( + "'foo' isn't an available database backend.\n" + "Try using 'django.db.backends.XXX', where XXX is one of:\n" + " 'mysql', 'oracle', 'postgresql', 'sqlite3'" + ) + with self.assertRaisesMessage(ImproperlyConfigured, msg) as cm: + load_backend('foo') + self.assertEqual(str(cm.exception.__cause__), "No module named 'foo'") |