summaryrefslogtreecommitdiff
path: root/tests/db_utils
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2017-02-11 21:37:49 +0100
committerTim Graham <timograham@gmail.com>2017-06-21 12:00:47 -0400
commit8cb1b1fd8e529d1896daeb089ea726109e0ba4f7 (patch)
tree3337abead0afac6a46b0ccfd48bc530aec3717de /tests/db_utils
parent0f91ba1adc037345474749faa64d36a4077b3fb8 (diff)
downloaddjango-8cb1b1fd8e529d1896daeb089ea726109e0ba4f7.tar.gz
Reorganized backends tests.
Diffstat (limited to 'tests/db_utils')
-rw-r--r--tests/db_utils/tests.py49
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'")