def test_database_connection_test_mutator(self): database = Database(sqlalchemy_uri="snowflake://abc") SnowflakeEngineSpec.mutate_db_for_connection_test(database) engine_params = json.loads(database.extra or "{}") self.assertDictEqual( {"engine_params": {"connect_args": {"validate_default_parameters": True}}}, engine_params, )
def test_database_connection_test_mutator() -> None: from superset.db_engine_specs.snowflake import SnowflakeEngineSpec from superset.models.core import Database database = Database(sqlalchemy_uri="snowflake://abc") SnowflakeEngineSpec.mutate_db_for_connection_test(database) engine_params = json.loads(database.extra or "{}") assert { "engine_params": { "connect_args": { "validate_default_parameters": True } } } == engine_params
def test_convert_dttm(self): dttm = self.get_dttm() self.assertEqual(SnowflakeEngineSpec.convert_dttm("DATE", dttm), "TO_DATE('2019-01-02')") self.assertEqual( SnowflakeEngineSpec.convert_dttm("DATETIME", dttm), "CAST('2019-01-02T03:04:05.678900' AS DATETIME)", ) self.assertEqual( SnowflakeEngineSpec.convert_dttm("TIMESTAMP", dttm), "TO_TIMESTAMP('2019-01-02T03:04:05.678900')", )
def test_cancel_query_failed(engine_mock: mock.Mock) -> None: from superset.db_engine_specs.snowflake import SnowflakeEngineSpec from superset.models.sql_lab import Query query = Query() cursor_mock = engine_mock.raiseError.side_effect = Exception() assert SnowflakeEngineSpec.cancel_query(cursor_mock, query, "123") is False
def test_cancel_query(engine_mock: mock.Mock) -> None: from superset.db_engine_specs.snowflake import SnowflakeEngineSpec from superset.models.sql_lab import Query query = Query() cursor_mock = engine_mock.return_value.__enter__.return_value assert SnowflakeEngineSpec.cancel_query(cursor_mock, query, "123") is True
def test_get_cancel_query_id(engine_mock: mock.Mock) -> None: from superset.db_engine_specs.snowflake import SnowflakeEngineSpec from superset.models.sql_lab import Query query = Query() cursor_mock = engine_mock.return_value.__enter__.return_value cursor_mock.fetchone.return_value = [123] assert SnowflakeEngineSpec.get_cancel_query_id(cursor_mock, query) == 123
def test_extract_errors() -> None: from superset.db_engine_specs.snowflake import SnowflakeEngineSpec msg = "Object dumbBrick does not exist or not authorized." result = SnowflakeEngineSpec.extract_errors(Exception(msg)) assert result == [ SupersetError( message="dumbBrick does not exist in this database.", error_type=SupersetErrorType.OBJECT_DOES_NOT_EXIST_ERROR, level=ErrorLevel.ERROR, extra={ "engine_name": "Snowflake", "issue_codes": [{ "code": 1029, "message": "Issue 1029 - The object does not exist in the given database.", }], }, ) ] msg = "syntax error line 1 at position 10 unexpected 'limmmited'." result = SnowflakeEngineSpec.extract_errors(Exception(msg)) assert result == [ SupersetError( message= 'Please check your query for syntax errors at or near "limmmited". Then, try running your query again.', error_type=SupersetErrorType.SYNTAX_ERROR, level=ErrorLevel.ERROR, extra={ "engine_name": "Snowflake", "issue_codes": [{ "code": 1030, "message": "Issue 1030 - The query has a syntax error.", }], }, ) ]
def test_convert_dttm(self): dttm = self.get_dttm() test_cases = { "DATE": "TO_DATE('2019-01-02')", "DATETIME": "CAST('2019-01-02T03:04:05.678900' AS DATETIME)", "TIMESTAMP": "TO_TIMESTAMP('2019-01-02T03:04:05.678900')", } for type_, expected in test_cases.items(): self.assertEqual(SnowflakeEngineSpec.convert_dttm(type_, dttm), expected)
def test_cancel_query(self, engine_mock): query = Query() cursor_mock = engine_mock.return_value.__enter__.return_value assert SnowflakeEngineSpec.cancel_query(cursor_mock, query, 123) is True
def test_get_cancel_query_id(self, engine_mock): query = Query() cursor_mock = engine_mock.return_value.__enter__.return_value cursor_mock.fetchone.return_value = [123] assert SnowflakeEngineSpec.get_cancel_query_id(cursor_mock, query) == 123
def test_cancel_query_failed(self, engine_mock): query = Query() cursor_mock = engine_mock.raiseError.side_effect = Exception() assert SnowflakeEngineSpec.cancel_query(cursor_mock, query, 123) is False
def test_convert_dttm(actual: str, expected: str, dttm: datetime) -> None: from superset.db_engine_specs.snowflake import SnowflakeEngineSpec assert SnowflakeEngineSpec.convert_dttm(actual, dttm) == expected