mirror of
https://github.com/apache/superset.git
synced 2026-04-19 16:14:52 +00:00
Enable running of tests in tests/db_engine_specs (#8902)
* Enable running of tests in tests/db_engine_specs * Resolve application context errors * Refactor and add tests for pyodbc.Row conversion * Appease isort, regardless of isort:skip
This commit is contained in:
committed by
Ville Brofeldt
parent
5b690f9411
commit
8fc814fc62
16
tests/db_engine_specs/__init__.py
Normal file
16
tests/db_engine_specs/__init__.py
Normal file
@@ -0,0 +1,16 @@
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
@@ -14,6 +14,8 @@
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
from tests.test_app import app # isort:skip
|
||||
|
||||
from superset.db_engine_specs.athena import AthenaEngineSpec
|
||||
from tests.db_engine_specs.base_tests import DbEngineSpecTestCase
|
||||
|
||||
|
||||
@@ -14,15 +14,19 @@
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
from tests.test_app import app # isort:skip
|
||||
|
||||
import datetime
|
||||
from unittest import mock
|
||||
|
||||
from superset import app
|
||||
from superset.db_engine_specs import engines
|
||||
from superset.db_engine_specs.base import BaseEngineSpec, builtin_time_grains
|
||||
from superset.db_engine_specs.sqlite import SqliteEngineSpec
|
||||
from superset.utils.core import get_example_database
|
||||
from tests.db_engine_specs.base_tests import DbEngineSpecTestCase
|
||||
|
||||
from ..fixtures.pyodbcRow import Row
|
||||
|
||||
|
||||
class DbEngineSpecsTests(DbEngineSpecTestCase):
|
||||
def test_extract_limit_from_query(self, engine_spec_class=BaseEngineSpec):
|
||||
@@ -206,3 +210,25 @@ class DbEngineSpecsTests(DbEngineSpecTestCase):
|
||||
def test_convert_dttm(self):
|
||||
dttm = self.get_dttm()
|
||||
self.assertIsNone(BaseEngineSpec.convert_dttm("", dttm))
|
||||
|
||||
def test_pyodbc_rows_to_tuples(self):
|
||||
# Test for case when pyodbc.Row is returned (odbc driver)
|
||||
data = [
|
||||
Row((1, 1, datetime.datetime(2017, 10, 19, 23, 39, 16, 660000))),
|
||||
Row((2, 2, datetime.datetime(2018, 10, 19, 23, 39, 16, 660000))),
|
||||
]
|
||||
expected = [
|
||||
(1, 1, datetime.datetime(2017, 10, 19, 23, 39, 16, 660000)),
|
||||
(2, 2, datetime.datetime(2018, 10, 19, 23, 39, 16, 660000)),
|
||||
]
|
||||
result = BaseEngineSpec.pyodbc_rows_to_tuples(data)
|
||||
self.assertListEqual(result, expected)
|
||||
|
||||
def test_pyodbc_rows_to_tuples_passthrough(self):
|
||||
# Test for case when tuples are returned
|
||||
data = [
|
||||
(1, 1, datetime.datetime(2017, 10, 19, 23, 39, 16, 660000)),
|
||||
(2, 2, datetime.datetime(2018, 10, 19, 23, 39, 16, 660000)),
|
||||
]
|
||||
result = BaseEngineSpec.pyodbc_rows_to_tuples(data)
|
||||
self.assertListEqual(result, data)
|
||||
|
||||
@@ -20,6 +20,8 @@ from superset.db_engine_specs.mysql import MySQLEngineSpec
|
||||
from superset.models.core import Database
|
||||
from tests.base_tests import SupersetTestCase
|
||||
|
||||
from tests.test_app import app # isort:skip
|
||||
|
||||
|
||||
class DbEngineSpecTestCase(SupersetTestCase):
|
||||
def sql_limit_regex(
|
||||
|
||||
@@ -14,11 +14,14 @@
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
import unittest.mock as mock
|
||||
|
||||
from sqlalchemy import column, table
|
||||
from sqlalchemy.dialects import mssql
|
||||
from sqlalchemy.sql import select
|
||||
from sqlalchemy.types import String, UnicodeText
|
||||
|
||||
from superset.db_engine_specs.base import BaseEngineSpec
|
||||
from superset.db_engine_specs.mssql import MssqlEngineSpec
|
||||
from tests.db_engine_specs.base_tests import DbEngineSpecTestCase
|
||||
|
||||
@@ -87,3 +90,15 @@ class MssqlEngineSpecTest(DbEngineSpecTestCase):
|
||||
MssqlEngineSpec.convert_dttm("SMALLDATETIME", dttm),
|
||||
"CONVERT(SMALLDATETIME, '2019-01-02 03:04:05', 20)",
|
||||
)
|
||||
|
||||
@mock.patch.object(
|
||||
MssqlEngineSpec, "pyodbc_rows_to_tuples", return_value="converted"
|
||||
)
|
||||
def test_fetch_data(self, mock_pyodbc_rows_to_tuples):
|
||||
data = [(1, "foo")]
|
||||
with mock.patch.object(
|
||||
BaseEngineSpec, "fetch_data", return_value=data
|
||||
) as mock_fetch:
|
||||
result = MssqlEngineSpec.fetch_data(None, 0)
|
||||
mock_pyodbc_rows_to_tuples.assert_called_once_with(data)
|
||||
self.assertEqual(result, "converted")
|
||||
|
||||
Reference in New Issue
Block a user