From ba4690e4f3cce5473aff2955d918f9b4130a78d0 Mon Sep 17 00:00:00 2001 From: Brandon Rodriguez <brodriguez8774@gmail.com> Date: Thu, 9 Jun 2022 04:51:03 -0400 Subject: [PATCH] Add basic UnitTests for tables logic --- tests/connectors/mysql/test_tables.py | 121 +++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 4 deletions(-) diff --git a/tests/connectors/mysql/test_tables.py b/tests/connectors/mysql/test_tables.py index 6b02d4b..a4ef1ca 100644 --- a/tests/connectors/mysql/test_tables.py +++ b/tests/connectors/mysql/test_tables.py @@ -3,14 +3,14 @@ Tests for "tables" logic of "MySQL" DB Connector class. """ # System Imports. -import unittest # User Imports. -from config import mysql_config, sqlite_config -from src.connectors import MysqlDbConnector, PostgresqlDbConnector, SqliteDbConnector +import MySQLdb +from .test_core import TestMysqlDatabaseParent -class TestMysqlTables(unittest.TestCase): + +class TestMysqlTables(TestMysqlDatabaseParent): """ Tests "MySQL" DB Connector class table logic. """ @@ -18,3 +18,116 @@ class TestMysqlTables(unittest.TestCase): def setUpClass(cls): # Run parent setup logic. super().setUpClass() + + # Initialize database for tests. + db_name = 'python__db_connector__test_tables' + cls.connector.database.create(db_name) + + # Define default table columns. + cls._columns_query = """( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(100), + description VARCHAR(100), + PRIMARY KEY ( id ) + )""" + + def test__show_tables(self): + """ + Test logic for `SHOW TABLES;` query + """ + table_name = 'test_tables__show' + + with self.subTest('SHOW query when table exists'): + # Verify table exists. + try: + self.connector.query.execute('CREATE TABLE {0}{1};'.format(table_name, self._columns_query)) + except MySQLdb.OperationalError: + # Table already exists, as we want. + pass + + # Run test query. + results = self.connector.tables.show() + + # Verify expected table returned. + self.assertGreaterEqual(len(results), 1) + self.assertIn(table_name, results) + + # Remove table and verify expected results changed. + with self.subTest('SHOW query when table does not exist'): + # Verify table does not exist. + try: + self.connector.query.execute('DROP TABLE {0};'.format(table_name)) + except MySQLdb.OperationalError: + # Table does not yet exist, as we want. + pass + + # Run test query. + results = self.connector.tables.show() + + # Verify expected table did not return. + self.assertNotIn(table_name, results) + + def test__create_table__success(self): + """ + Test `CREATE TABLE` query when table does not exist. + """ + table_name = 'test_tables__create__success' + + # Verify table does not exist. + try: + self.connector.query.execute('DROP TABLE {0};'.format(table_name)) + except MySQLdb.OperationalError: + # Table does not yet exist, as we want. + pass + + # Check tables prior to test query. Verify expected table did not return. + results = self.connector.tables.show() + self.assertNotIn(table_name, results) + + # Run test query. + self.connector.tables.create(table_name, self._columns_query) + + # Check tables after test query. Verify expected table returned. + results = self.connector.tables.show() + self.assertGreaterEqual(len(results), 1) + self.assertIn(table_name, results) + + def test__create_table__failure(self): + """ + Test `CREATE TABLE` query when table exists. + """ + table_name = 'test_tables__create__failure' + + # Verify table exists. + try: + self.connector.query.execute('CREATE TABLE {0}{1};'.format(table_name, self._columns_query)) + except MySQLdb.OperationalError: + # Table already exists, as we want. + pass + + # Check tables prior to test query. Verify expected table returned. + results = self.connector.tables.show() + self.assertGreaterEqual(len(results), 1) + self.assertIn(table_name, results) + + # Run test query. + with self.assertRaises(ValueError): + self.connector.tables.create(table_name, self._columns_query) + + def test__delete_table__success(self): + """ + Test `DROP TABLE` query, when table exists. + """ + table_name = 'test_tables__delete__success' + + # Verify table exists. + try: + self.connector.query.execute('CREATE TABLE {0}{1};'.format(table_name, self._columns_query)) + except MySQLdb.OperationalError: + # Table already exists, as we want. + pass + + # Check tables prior to test query. Verify expected table returned. + results = self.connector.tables.show() + self.assertGreaterEqual(len(results), 1) + self.assertIn(table_name, results) -- GitLab