From 8ccfdba672b21ebdd2de7ed350e621021c5456d4 Mon Sep 17 00:00:00 2001 From: Karol Kostrzewa Date: Mon, 25 Jan 2021 18:49:58 +0100 Subject: [PATCH] test: oracle engine spec (#12615) * test fetch_data, fix test_convert_dttm * refactor test_convert_dttm --- tests/db_engine_specs/base_tests.py | 3 +- tests/db_engine_specs/oracle_tests.py | 53 ++++++++++++++++++--------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/tests/db_engine_specs/base_tests.py b/tests/db_engine_specs/base_tests.py index b95b97fd1..a234226b5 100644 --- a/tests/db_engine_specs/base_tests.py +++ b/tests/db_engine_specs/base_tests.py @@ -31,5 +31,6 @@ class TestDbEngineSpec(SupersetTestCase): limited = engine_spec_class.apply_limit_to_sql(sql, limit, main) self.assertEqual(expected_sql, limited) - def get_dttm(self): + @classmethod + def get_dttm(cls): return datetime.strptime("2019-01-02 03:04:05.678900", "%Y-%m-%d %H:%M:%S.%f") diff --git a/tests/db_engine_specs/oracle_tests.py b/tests/db_engine_specs/oracle_tests.py index 1aa375d1f..4f476ab39 100644 --- a/tests/db_engine_specs/oracle_tests.py +++ b/tests/db_engine_specs/oracle_tests.py @@ -14,6 +14,9 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. +from unittest import mock + +import pytest from sqlalchemy import column from sqlalchemy.dialects import oracle from sqlalchemy.dialects.oracle import DATE, NVARCHAR, VARCHAR @@ -37,24 +40,6 @@ class TestOracleDbEngineSpec(TestDbEngineSpec): self.assertEqual(result, "TRUNC(CAST(\"decimal\" as DATE), 'MONTH')") dttm = self.get_dttm() - def test_convert_dttm(self): - dttm = self.get_dttm() - - test_cases = ( - ( - OracleEngineSpec.convert_dttm("DATE", dttm), - "TO_DATE('2019-01-02', 'YYYY-MM-DD')", - ), - ( - OracleEngineSpec.convert_dttm("DATETIME", dttm), - """TO_DATE('2019-01-02T03:04:05', 'YYYY-MM-DD"T"HH24:MI:SS')""", - ), - ( - OracleEngineSpec.convert_dttm("TIMESTAMP", dttm), - """TO_TIMESTAMP('2019-01-02T03:04:05.678900', 'YYYY-MM-DD"T"HH24:MI:SS.ff6')""", - ), - ) - def test_column_datatype_to_string(self): test_cases = ( (DATE(), "DATE"), @@ -68,3 +53,35 @@ class TestOracleDbEngineSpec(TestDbEngineSpec): original, oracle.dialect() ) self.assertEqual(actual, expected) + + def test_fetch_data_no_description(self): + cursor = mock.MagicMock() + cursor.description = [] + assert OracleEngineSpec.fetch_data(cursor) == [] + + def test_fetch_data(self): + cursor = mock.MagicMock() + result = ["a", "b"] + cursor.fetchall.return_value = result + assert OracleEngineSpec.fetch_data(cursor) == result + + +@pytest.mark.parametrize( + "date_format,expected", + [ + ("DATE", "TO_DATE('2019-01-02', 'YYYY-MM-DD')"), + ("DATETIME", """TO_DATE('2019-01-02T03:04:05', 'YYYY-MM-DD"T"HH24:MI:SS')"""), + ( + "TIMESTAMP", + """TO_TIMESTAMP('2019-01-02T03:04:05.678900', 'YYYY-MM-DD"T"HH24:MI:SS.ff6')""", + ), + ( + "timestamp", + """TO_TIMESTAMP('2019-01-02T03:04:05.678900', 'YYYY-MM-DD"T"HH24:MI:SS.ff6')""", + ), + ("Other", None), + ], +) +def test_convert_dttm(date_format, expected): + dttm = TestOracleDbEngineSpec.get_dttm() + assert OracleEngineSpec.convert_dttm(date_format, dttm) == expected