From 56db36da943fa86de7c4d505cbd66babe54b5752 Mon Sep 17 00:00:00 2001
From: Brandon Rodriguez <brodriguez8774@gmail.com>
Date: Tue, 6 Jun 2023 22:04:51 -0400
Subject: [PATCH] Correct UnitTests to always try to reset databases for
 consistent initial state

---
 py_dbcn/connectors/core/database.py          |  4 +-
 py_dbcn/connectors/postgresql/database.py    |  2 +-
 tests/connectors/core/test_database.py       | 89 +++++++++++++-------
 tests/connectors/core/test_display.py        | 28 +++++-
 tests/connectors/mysql/test_database.py      | 12 ++-
 tests/connectors/mysql/test_display.py       | 36 +++++++-
 tests/connectors/mysql/test_query.py         | 12 ++-
 tests/connectors/mysql/test_records.py       | 12 ++-
 tests/connectors/mysql/test_tables.py        | 12 ++-
 tests/connectors/mysql/test_utils.py         | 12 ++-
 tests/connectors/mysql/test_validate.py      | 12 ++-
 tests/connectors/postgresql/test_database.py | 12 ++-
 tests/connectors/postgresql/test_display.py  | 36 +++++++-
 tests/connectors/postgresql/test_query.py    | 12 ++-
 tests/connectors/postgresql/test_records.py  | 12 ++-
 tests/connectors/postgresql/test_tables.py   | 12 ++-
 tests/connectors/postgresql/test_validate.py | 12 ++-
 17 files changed, 274 insertions(+), 53 deletions(-)

diff --git a/py_dbcn/connectors/core/database.py b/py_dbcn/connectors/core/database.py
index e2e9133..53fdf0e 100644
--- a/py_dbcn/connectors/core/database.py
+++ b/py_dbcn/connectors/core/database.py
@@ -133,7 +133,7 @@ class BaseDatabase:
         # Check if provided database matches value in list.
         if db_name in available_databases:
             # Database already exists. Raise error.
-            raise ValueError(
+            raise self._base.errors.database_already_exists(
                 'Could not find database "{0}". Valid options are {1}.'.format(db_name, available_databases)
             )
 
@@ -160,7 +160,7 @@ class BaseDatabase:
         # Check if provided database matches value in list.
         if db_name not in available_databases:
             # Database does not exist. Raise error.
-            raise ValueError('Database with name "{0}" does not exist.'.format(db_name))
+            raise self._base.errors.database_does_not_exist('Database with name "{0}" does not exist.'.format(db_name))
 
         # Remove database.
         query = 'DROP DATABASE {0};'.format(db_name)
diff --git a/py_dbcn/connectors/postgresql/database.py b/py_dbcn/connectors/postgresql/database.py
index 64ee6f2..5ce18a8 100644
--- a/py_dbcn/connectors/postgresql/database.py
+++ b/py_dbcn/connectors/postgresql/database.py
@@ -98,7 +98,7 @@ class PostgresqlDatabase(BaseDatabase):
                 break
         if not db_found:
             # Database does not exist. Raise error.
-            raise ValueError(
+            raise self._base.errors.database_does_not_exist(
                 'Could not find database "{0}". Valid options are {1}.'.format(db_name, available_databases)
             )
 
diff --git a/tests/connectors/core/test_database.py b/tests/connectors/core/test_database.py
index f935d6c..df28a1a 100644
--- a/tests/connectors/core/test_database.py
+++ b/tests/connectors/core/test_database.py
@@ -53,13 +53,17 @@ class CoreDatabaseTestMixin:
         with self.subTest('With select_1 database selected'):
             db_name = '{0}__select_1'.format(self.test_db_name)
 
-            # Verify database exists.
+            # Ensure database does not currently exists.
+            # Guarantees tests are done from a consistent state.
             try:
-                self.connector.database.create(db_name)
-            except self.connector.errors.database_already_exists:
+                self.connector.database.drop(db_name, display_query=False, display_results=False)
+            except self.connector.errors.database_does_not_exist:
                 # Database already exists, as we want.
                 pass
 
+            # Create desired database.
+            self.connector.database.create(db_name)
+
             # Switch databases and verify select changed.
             self.connector.database.use(db_name)
             result = self.connector.database.select()
@@ -72,13 +76,17 @@ class CoreDatabaseTestMixin:
         with self.subTest('With select_2 database selected'):
             db_name = '{0}__select_2'.format(self.test_db_name)
 
-            # Verify database exists.
+            # Ensure database does not currently exists.
+            # Guarantees tests are done from a consistent state.
             try:
-                self.connector.database.create(db_name)
-            except self.connector.errors.database_already_exists:
+                self.connector.database.drop(db_name, display_query=False, display_results=False)
+            except self.connector.errors.database_does_not_exist:
                 # Database already exists, as we want.
                 pass
 
+            # Create desired database.
+            self.connector.database.create(db_name)
+
             # Switch databases and verify select changed.
             self.connector.database.use(db_name)
             result = self.connector.database.select()
@@ -95,13 +103,17 @@ class CoreDatabaseTestMixin:
         db_name = '{0}__show'.format(self.test_db_name)
 
         with self.subTest('SHOW query when database exists'):
-            # Verify database exists.
+            # Ensure database does not currently exists.
+            # Guarantees tests are done from a consistent state.
             try:
-                self.connector.database.create(db_name)
-            except self.connector.errors.database_already_exists:
+                self.connector.database.drop(db_name, display_query=False, display_results=False)
+            except self.connector.errors.database_does_not_exist:
                 # Database already exists, as we want.
                 pass
 
+            # Create desired database.
+            self.connector.database.create(db_name)
+
             # Run test query.
             results = self.connector.database.show()
 
@@ -132,18 +144,19 @@ class CoreDatabaseTestMixin:
         """
         db_name = '{0}__create__success'.format(self.test_db_name)
 
-        # Verify database does not yet exist.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
         try:
-            self.connector.database.drop(db_name)
-        except ValueError:
-            # Database does not yet exist, as we want.
+            self.connector.database.drop(db_name, display_query=False, display_results=False)
+        except self.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
             pass
 
         # Check databases prior to test query. Verify expected database did not return.
         results = self.connector.database.show()
         self.assertNotIn(db_name.casefold(), (str(x).casefold() for x in results))
 
-        # Run test query.
+        # Create desired database.
         self.connector.database.create(db_name)
 
         # Check databases after test query. Verify expected database returned.
@@ -157,13 +170,17 @@ class CoreDatabaseTestMixin:
         """
         db_name = '{0}__create__failure'.format(self.test_db_name)
 
-        # Verify database does not yet exist.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
         try:
-            self.connector.database.create(db_name)
-        except self.connector.errors.database_already_exists:
+            self.connector.database.drop(db_name, display_query=False, display_results=False)
+        except self.connector.errors.database_does_not_exist:
             # Database already exists, as we want.
             pass
 
+        # Create desired database.
+        self.connector.database.create(db_name)
+
         # Check databases prior to test query. Verify expected database returned.
         results = self.connector.database.show()
         self.assertGreaterEqual(len(results), 1)
@@ -184,13 +201,17 @@ class CoreDatabaseTestMixin:
         """
         db_name = '{0}__use__success'.format(self.test_db_name)
 
-        # Verify database exists.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
         try:
-            self.connector.database.create(db_name)
-        except self.connector.errors.database_already_exists:
+            self.connector.database.drop(db_name, display_query=False, display_results=False)
+        except self.connector.errors.database_does_not_exist:
             # Database already exists, as we want.
             pass
 
+        # Create desired database.
+        self.connector.database.create(db_name)
+
         # Check databases prior to test query. Verify expected database returned.
         results = self.connector.database.show()
         self.assertGreaterEqual(len(results), 1)
@@ -212,11 +233,12 @@ class CoreDatabaseTestMixin:
         """
         db_name = '{0}__use__failure'.format(self.test_db_name)
 
-        # Verify database does not yet exist.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
         try:
-            self.connector.database.drop(db_name)
-        except ValueError:
-            # Database does not exist, as we want.
+            self.connector.database.drop(db_name, display_query=False, display_results=False)
+        except self.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
             pass
 
         # Check databases prior to test query. Verify expected database did not return.
@@ -233,13 +255,17 @@ class CoreDatabaseTestMixin:
         """
         db_name = '{0}__delete__success'.format(self.test_db_name)
 
-        # Verify database does not yet exist.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
         try:
-            self.connector.database.create(db_name)
-        except self.connector.errors.database_already_exists:
+            self.connector.database.drop(db_name, display_query=False, display_results=False)
+        except self.connector.errors.database_does_not_exist:
             # Database already exists, as we want.
             pass
 
+        # Create desired database.
+        self.connector.database.create(db_name)
+
         # Check databases prior to test query. Verify expected database returned.
         results = self.connector.database.show()
         self.assertGreaterEqual(len(results), 1)
@@ -259,10 +285,11 @@ class CoreDatabaseTestMixin:
         """
         db_name = '{0}__delete__failure'.format(self.test_db_name)
 
-        # Verify database does not yet exist.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
         try:
-            self.connector.database.drop(db_name)
-        except ValueError:
+            self.connector.database.drop(db_name, display_query=False, display_results=False,)
+        except self.connector.errors.database_does_not_exist:
             # Database does not yet exist, as we want.
             pass
 
@@ -271,5 +298,5 @@ class CoreDatabaseTestMixin:
         self.assertNotIn(db_name, results)
 
         # Run test query.
-        with self.assertRaises(ValueError):
+        with self.assertRaises(self.connector.errors.database_does_not_exist):
             self.connector.database.delete(db_name)
diff --git a/tests/connectors/core/test_display.py b/tests/connectors/core/test_display.py
index 32005a5..29184bb 100644
--- a/tests/connectors/core/test_display.py
+++ b/tests/connectors/core/test_display.py
@@ -196,7 +196,19 @@ class CoreDisplayTablesTestMixin:
 
         # Since this directly tests display of tables, ensure we use a fresh database.
         db_name = '{0}d__tables__show'.format(self.test_db_name[0:-15])
-        self.connector.database.create(db_name, display_query=False)
+
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            self.connector.database.drop(db_name, display_query=False, display_results=False)
+        except self.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
+        self.connector.database.create(db_name)
+
+        # Select desired database.
         self.connector.database.use(db_name, display_query=False)
 
         with self.subTest('With no tables present'):
@@ -315,7 +327,19 @@ class CoreDisplayTablesTestMixin:
 
         # Since this directly tests display of tables, ensure we use a fresh database.
         db_name = '{0}d__tables__desc'.format(self.test_db_name[0:-15])
-        self.connector.database.create(db_name, display_query=False)
+
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            self.connector.database.drop(db_name, display_query=False, display_results=False)
+        except self.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
+        self.connector.database.create(db_name)
+
+        # Select desired database.
         self.connector.database.use(db_name, display_query=False)
 
         # Create initial table to describe.
diff --git a/tests/connectors/mysql/test_database.py b/tests/connectors/mysql/test_database.py
index f2c353f..ce4ec98 100644
--- a/tests/connectors/mysql/test_database.py
+++ b/tests/connectors/mysql/test_database.py
@@ -24,8 +24,18 @@ class TestMysqlDatabase(TestMysqlDatabaseParent, CoreDatabaseTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_database'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/mysql/test_display.py b/tests/connectors/mysql/test_display.py
index 05f2403..26d3b1e 100644
--- a/tests/connectors/mysql/test_display.py
+++ b/tests/connectors/mysql/test_display.py
@@ -38,8 +38,18 @@ class TestMysqlDisplayCore(TestMysqlDatabaseParent, CoreDisplayBaseTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_display__core'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
@@ -70,8 +80,18 @@ class TestMysqlDisplayTables(TestMysqlDatabaseParent, CoreDisplayTablesTestMixin
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_display__tables'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
@@ -105,8 +125,18 @@ class TestMysqlDisplayRecords(TestMysqlDatabaseParent, CoreDisplayRecordsMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_display__records'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/mysql/test_query.py b/tests/connectors/mysql/test_query.py
index 0454b68..e97e790 100644
--- a/tests/connectors/mysql/test_query.py
+++ b/tests/connectors/mysql/test_query.py
@@ -24,8 +24,18 @@ class TestMysqlQuery(TestMysqlDatabaseParent, CoreQueryTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_query'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/mysql/test_records.py b/tests/connectors/mysql/test_records.py
index d617c2f..5c68286 100644
--- a/tests/connectors/mysql/test_records.py
+++ b/tests/connectors/mysql/test_records.py
@@ -26,8 +26,18 @@ class TestMysqlRecords(TestMysqlDatabaseParent, CoreRecordsTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_records'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/mysql/test_tables.py b/tests/connectors/mysql/test_tables.py
index 7012fb0..cfa91a5 100644
--- a/tests/connectors/mysql/test_tables.py
+++ b/tests/connectors/mysql/test_tables.py
@@ -29,8 +29,18 @@ class TestMysqlTables(TestMysqlDatabaseParent, CoreTablesTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_tables'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/mysql/test_utils.py b/tests/connectors/mysql/test_utils.py
index 35c78e8..7597ab1 100644
--- a/tests/connectors/mysql/test_utils.py
+++ b/tests/connectors/mysql/test_utils.py
@@ -25,8 +25,18 @@ class TestMysqlUtils(TestMysqlDatabaseParent, CoreUtilsTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_utils'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/mysql/test_validate.py b/tests/connectors/mysql/test_validate.py
index f32fd49..cec092f 100644
--- a/tests/connectors/mysql/test_validate.py
+++ b/tests/connectors/mysql/test_validate.py
@@ -24,8 +24,18 @@ class TestMysqlValidate(TestMysqlDatabaseParent, CoreValidateTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_validate'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/postgresql/test_database.py b/tests/connectors/postgresql/test_database.py
index c59a5db..c255d95 100644
--- a/tests/connectors/postgresql/test_database.py
+++ b/tests/connectors/postgresql/test_database.py
@@ -24,8 +24,18 @@ class TestPostgresqlDatabase(TestPostgresqlDatabaseParent, CoreDatabaseTestMixin
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_database'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/postgresql/test_display.py b/tests/connectors/postgresql/test_display.py
index 32d87c3..10936ac 100644
--- a/tests/connectors/postgresql/test_display.py
+++ b/tests/connectors/postgresql/test_display.py
@@ -36,8 +36,18 @@ class TestPostgresqlDisplay(TestPostgresqlDatabaseParent, CoreDisplayBaseTestMix
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_display__core'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
@@ -68,8 +78,18 @@ class TestPostgresqlDisplayTables(TestPostgresqlDatabaseParent, CoreDisplayTable
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_display__tables'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
@@ -103,8 +123,18 @@ class TestPostgreSQLDisplayRecords(TestPostgresqlDatabaseParent, CoreDisplayReco
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_display__records'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/postgresql/test_query.py b/tests/connectors/postgresql/test_query.py
index db51b24..18a8ed1 100644
--- a/tests/connectors/postgresql/test_query.py
+++ b/tests/connectors/postgresql/test_query.py
@@ -24,8 +24,18 @@ class TestPostgresqlQuery(TestPostgresqlDatabaseParent, CoreQueryTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_query'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/postgresql/test_records.py b/tests/connectors/postgresql/test_records.py
index 0027928..4acf243 100644
--- a/tests/connectors/postgresql/test_records.py
+++ b/tests/connectors/postgresql/test_records.py
@@ -26,8 +26,18 @@ class TestPostgresqlRecords(TestPostgresqlDatabaseParent, CoreRecordsTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_records'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/postgresql/test_tables.py b/tests/connectors/postgresql/test_tables.py
index b199fdf..c912012 100644
--- a/tests/connectors/postgresql/test_tables.py
+++ b/tests/connectors/postgresql/test_tables.py
@@ -25,8 +25,18 @@ class TestPostgresqlTables(TestPostgresqlDatabaseParent, CoreTablesTestMixin):
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_tables'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
diff --git a/tests/connectors/postgresql/test_validate.py b/tests/connectors/postgresql/test_validate.py
index f551bdb..24e5659 100644
--- a/tests/connectors/postgresql/test_validate.py
+++ b/tests/connectors/postgresql/test_validate.py
@@ -24,8 +24,18 @@ class TestPostgresqlValidate(TestPostgresqlDatabaseParent, CoreValidateTestMixin
         # Define database name to use in tests.
         cls.test_db_name = '{0}test_validate'.format(cls.test_db_name_start)
 
-        # Initialize database for tests.
+        # Ensure database does not currently exists.
+        # Guarantees tests are done from a consistent state.
+        try:
+            cls.connector.database.drop(cls.test_db_name, display_query=False, display_results=False)
+        except cls.connector.errors.database_does_not_exist:
+            # Database already exists, as we want.
+            pass
+
+        # Create desired database.
         cls.connector.database.create(cls.test_db_name)
+
+        # Select desired database.
         cls.connector.database.use(cls.test_db_name)
 
         # Check that database has no tables.
-- 
GitLab