From 08537aa29bb4959b6a5b7189df6fe38a71274ac4 Mon Sep 17 00:00:00 2001
From: Brandon Rodriguez <brodriguez8774@gmail.com>
Date: Fri, 27 Jan 2023 15:17:19 -0500
Subject: [PATCH] Add UnitTests for using quote types within strings

---
 tests/connectors/core/test_records.py | 288 +++++++++++++++++++-------
 1 file changed, 216 insertions(+), 72 deletions(-)

diff --git a/tests/connectors/core/test_records.py b/tests/connectors/core/test_records.py
index d572fde..1ddf757 100644
--- a/tests/connectors/core/test_records.py
+++ b/tests/connectors/core/test_records.py
@@ -943,71 +943,38 @@ class CoreRecordsTestMixin:
         self.assertIn((1, test_datetime__2020.replace(microsecond=0), test_date__2020), results)
         self.assertIn((2, test_datetime__2021.replace(microsecond=0), test_date__2021), results)
 
-    # # def test__insert__with_quote_types(self):
-    # #     """"""
-    # #     table_name = 'test_queries__insert__with_quote_types'
-    # #
-    # #     # Verify table exists.
-    # #     try:
-    # #         self.connector.query.execute('CREATE TABLE {0}{1};'.format(table_name, self._columns_clause__basic))
-    # #     except self.connector.errors.table_already_exists:
-    # #         # Table already exists, as we want.
-    # #         pass
-    # #
-    # #     # Verify starting state.
-    # #     results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
-    # #     self.assertEqual(len(results), 0)
-    # #
-    # #     # Run test query.
-    # #     row = (1, """'2" nail'""", """'2 inch nail'""""")
-    # #     self.connector.records.insert(table_name, row)
-    # #     results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
-    # #
-    # #     # Verify one record returned.
-    # #     self.assertEqual(len(results), 1)
-    # #     self.assertIn(row, results)
-    # #
-    # #     # Run test query.
-    # #     row = (2, """'1\' ruler'""", """'1 foot ruler'""""")
-    # #     self.connector.records.insert(table_name, row)
-    # #     results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
-    # #
-    # #     # Verify two records returned.
-    # #     self.assertEqual(len(results), 2)
-    # #     self.assertIn(row, results)
-
-    # def test__insert__with_quote_types(self):
-    #     """"""
-    #     table_name = 'test_queries__insert__with_quote_types'
-    #
-    #     # Verify table exists.
-    #     try:
-    #         self.connector.query.execute('CREATE TABLE {0}{1};'.format(table_name, self._columns_clause__basic))
-    #     except self.connector.errors.table_already_exists:
-    #         # Table already exists, as we want.
-    #         pass
-    #
-    #     # Verify starting state.
-    #     results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
-    #     self.assertEqual(len(results), 0)
-    #
-    #     # Run test query.
-    #     row = (1, """2" nail""", """2 inch nail""")
-    #     self.connector.records.insert(table_name, row)
-    #     results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
-    #
-    #     # Verify one record returned.
-    #     self.assertEqual(len(results), 1)
-    #     self.assertIn(row, results)
-    #
-    #     # Run test query.
-    #     row = (2, """'1\' ruler'""", """'1 foot ruler'""")
-    #     self.connector.records.insert(table_name, row)
-    #     results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
-    #
-    #     # Verify two records returned.
-    #     self.assertEqual(len(results), 2)
-    #     self.assertIn(row, results)
+    def test__insert__with_quote_types(self):
+        """"""
+        table_name = 'test_queries__insert__with_quote_types'
+
+        # Verify table exists.
+        try:
+            self.connector.query.execute('CREATE TABLE {0}{1};'.format(table_name, self._columns_clause__basic))
+        except self.connector.errors.table_already_exists:
+            # Table already exists, as we want.
+            pass
+
+        # Verify starting state.
+        results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+        self.assertEqual(len(results), 0)
+
+        # Run test query.
+        row = (1, """2" nail""", """2 inch nail""")
+        self.connector.records.insert(table_name, row)
+        results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+
+        # Verify one record returned.
+        self.assertEqual(len(results), 1)
+        self.assertIn(row, results)
+
+        # Run test query.
+        row = (2, """1' ruler""", """1 foot ruler""")
+        self.connector.records.insert(table_name, row)
+        results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+
+        # Verify two records returned.
+        self.assertEqual(len(results), 2)
+        self.assertIn(row, results)
 
     def test__insert_many__basic__success(self):
         """
@@ -1241,6 +1208,60 @@ class CoreRecordsTestMixin:
         self.connector.tables.drop(table_name)
         self.connector.tables.create(table_name, self._columns_clause__datetime)
 
+    def test__insert_many__with_quote_types(self):
+        """"""
+        table_name = 'test_queries__insert_many__with_quote_types'
+
+        # Verify table exists.
+        try:
+            self.connector.query.execute('CREATE TABLE {0}{1};'.format(table_name, self._columns_clause__basic))
+        except self.connector.errors.table_already_exists:
+            # Table already exists, as we want.
+            pass
+
+        # Verify starting state.
+        results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+        self.assertEqual(len(results), 0)
+
+        # Run test query.
+        row_1 = (1, """1" nail""", """1 inch nail""")
+        row_2 = (2, """2" nail""", """2 inch nail""")
+        row_3 = (3, """3" nail""", """3 inch nail""")
+        rows = [
+            row_1,
+            row_2,
+            row_3,
+        ]
+        self.connector.records.insert_many(table_name, rows)
+        results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+
+        # Verify three records returned.
+        self.assertEqual(len(results), 3)
+        self.assertIn(row_1, results)
+        self.assertIn(row_2, results)
+        self.assertIn(row_3, results)
+
+        # Run test query.
+        row_4 = (4, """4' ruler""", """4 foot ruler""")
+        row_5 = (5, """5' ruler""", """5 foot ruler""")
+        row_6 = (6, """6' ruler""", """6 foot ruler""")
+        rows = [
+            row_4,
+            row_5,
+            row_6,
+        ]
+        self.connector.records.insert_many(table_name, rows)
+        results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+
+        # Verify six records returned.
+        self.assertEqual(len(results), 6)
+        self.assertIn(row_1, results)
+        self.assertIn(row_2, results)
+        self.assertIn(row_3, results)
+        self.assertIn(row_4, results)
+        self.assertIn(row_5, results)
+        self.assertIn(row_6, results)
+
     def test__update__basic__success(self):
         """
         Test `UPDATE` query with basic values.
@@ -1560,7 +1581,7 @@ class CoreRecordsTestMixin:
             where_columns_clause = ['id']
             self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
 
-            # Verify one record returned.
+            # Verify one record updated.
             results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
             self.assertEqual(len(results), 10)
             self.assertIn(updated_row_1, results)
@@ -1590,7 +1611,7 @@ class CoreRecordsTestMixin:
             where_columns_clause = ['id']
             self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
 
-            # Verify one record returned.
+            # Verify two records updated.
             results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
             self.assertEqual(len(results), 10)
             self.assertIn(row_1, results)
@@ -1628,7 +1649,7 @@ class CoreRecordsTestMixin:
             where_columns_clause = ['name']
             self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
 
-            # Verify five records returned.
+            # Verify five records updated.
             results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
             self.assertEqual(len(results), 10)
             self.assertIn(row_1, results)
@@ -1682,7 +1703,7 @@ class CoreRecordsTestMixin:
             where_columns_clause = 'id'
             self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
 
-            # Verify ten records returned.
+            # Verify ten records updated.
             results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
             self.assertEqual(len(results), 10)
             self.assertIn(updated_row_1, results)
@@ -1728,7 +1749,7 @@ class CoreRecordsTestMixin:
             where_columns_clause = ['id']
             self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
 
-            # Verify one record returned.
+            # Verify one record updated.
             results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
             self.assertEqual(len(results), 10)
             self.assertIn(row_1, results)
@@ -1760,7 +1781,7 @@ class CoreRecordsTestMixin:
             where_columns_clause = ['id']
             self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
 
-            # Verify one record returned.
+            # Verify three records updated.
             results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
             self.assertEqual(len(results), 10)
             self.assertIn(row_1, results)
@@ -1792,7 +1813,7 @@ class CoreRecordsTestMixin:
             where_columns_clause = ['id', 'name']
             self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
 
-            # Verify one record returned.
+            # Verify one record updated.
             results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
             self.assertEqual(len(results), 10)
             self.assertIn(row_1, results)
@@ -2003,6 +2024,129 @@ class CoreRecordsTestMixin:
             row_2 = updated_row_2
             row_3 = updated_row_3
 
+    def test__update_many__with_quote_types(self):
+        """"""
+        table_name = 'test_queries__update_many__with_quote_types'
+
+        # Verify table exists.
+        try:
+            self.connector.query.execute('CREATE TABLE {0}{1};'.format(table_name, self._columns_clause__basic))
+        except self.connector.errors.table_already_exists:
+            # Table already exists, as we want.
+            pass
+
+        # Verify starting state.
+        results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+        self.assertEqual(len(results), 0)
+
+        # Run test query.
+        row_1 = (1, """1" nail""", """1 inch nail""")
+        row_2 = (2, """2" nail""", """2 inch nail""")
+        row_3 = (3, """3" nail""", """3 inch nail""")
+        row_4 = (4, """4' ruler""", """4 foot ruler""")
+        row_5 = (5, """5' ruler""", """5 foot ruler""")
+        row_6 = (6, """6' ruler""", """6 foot ruler""")
+        rows = [
+            row_1,
+            row_2,
+            row_3,
+            row_4,
+            row_5,
+            row_6,
+        ]
+        self.connector.records.insert_many(table_name, rows)
+        results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+
+        # Verify six records returned.
+        self.assertEqual(len(results), 6)
+        self.assertIn(row_1, results)
+        self.assertIn(row_2, results)
+        self.assertIn(row_3, results)
+        self.assertIn(row_4, results)
+        self.assertIn(row_5, results)
+        self.assertIn(row_6, results)
+
+        with self.subTest('When updating away from quote types'):
+            # Run test query.
+            updated_row_2 = (2, """Some nail""", """2 inch nail""")
+            updated_row_5 = (5, """Some ruler""", """5 foot ruler""")
+            columns_clause = ['id', 'name', 'description']
+            values_clause = [
+                updated_row_2,
+                updated_row_5,
+            ]
+            where_columns_clause = ['id', 'description']
+            self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
+
+            # Verify two records updated.
+            results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+            self.assertIn(row_1, results)
+            self.assertIn(updated_row_2, results)
+            self.assertIn(row_3, results)
+            self.assertIn(row_4, results)
+            self.assertIn(updated_row_5, results)
+            self.assertIn(row_6, results)
+            self.assertNotIn(row_2, results)
+            self.assertNotIn(row_5, results)
+
+            # Update row variables.
+            row_2 = updated_row_2
+            row_5 = updated_row_5
+
+        with self.subTest('When updating to use quote types'):
+            # Run test query.
+            updated_row_2 = (2, """2" nail""", """2 inch nail""")
+            updated_row_5 = (5, """5' ruler""", """5 foot ruler""")
+            columns_clause = ['id', 'name', 'description']
+            values_clause = [
+                updated_row_2,
+                updated_row_5,
+            ]
+            where_columns_clause = ['id', 'description']
+            self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
+
+            # Verify two records updated.
+            results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+            self.assertIn(row_1, results)
+            self.assertIn(updated_row_2, results)
+            self.assertIn(row_3, results)
+            self.assertIn(row_4, results)
+            self.assertIn(updated_row_5, results)
+            self.assertIn(row_6, results)
+            self.assertNotIn(row_2, results)
+            self.assertNotIn(row_5, results)
+
+            # Update row variables.
+            row_2 = updated_row_2
+            row_5 = updated_row_5
+
+        with self.subTest('When matching by value with quote types'):
+            # Run test query.
+            updated_row_2 = (2, """2" nail""", """A nail description""")
+            updated_row_5 = (5, """5' ruler""", """A ruler description""")
+            columns_clause = ['id', 'name', 'description']
+            values_clause = [
+                updated_row_2,
+                updated_row_5,
+            ]
+            where_columns_clause = ['id', 'name']
+            self.connector.records.update_many(table_name, columns_clause, values_clause, where_columns_clause)
+
+            # Verify two records updated.
+            results = self.connector.query.execute('SELECT * FROM {0};'.format(table_name))
+            self.assertIn(row_1, results)
+            self.assertIn(updated_row_2, results)
+            self.assertIn(row_3, results)
+            self.assertIn(row_4, results)
+            self.assertIn(updated_row_5, results)
+            self.assertIn(row_6, results)
+            self.assertNotIn(row_2, results)
+            self.assertNotIn(row_5, results)
+
+            # Update row variables.
+            row_2 = updated_row_2
+            row_5 = updated_row_5
+
     def test__delete__success(self):
         """
         Test `DELETE` query.
-- 
GitLab