def test_is_multidatabases_catalog_enable_in_server(_input): param_status, exp_val = _input mock_connection: Connection = Connection.__new__(Connection) mock_connection.parameter_statuses: deque = deque() if param_status is not None: mock_connection.parameter_statuses.append( (b"datashare_enabled", param_status.encode())) assert mock_connection._is_multi_databases_catalog_enable_in_server == exp_val
def test_is_single_database_metadata(_input): param_status, database_metadata_current_db_only_val, exp_val = _input mock_connection = Connection.__new__(Connection) mock_connection.parameter_statuses: deque = deque() mock_connection._database_metadata_current_db_only = database_metadata_current_db_only_val if param_status is not None: mock_connection.parameter_statuses.append( (b"datashare_enabled", param_status.encode())) assert mock_connection.is_single_database_metadata == exp_val
def test_handle_ROW_DESCRIPTION_base(_input): data, exp_result = _input mock_connection = Connection.__new__(Connection) mock_connection._client_protocol_version = ClientProtocolVersion.BASE_SERVER.value mock_cursor = Cursor.__new__(Cursor) mock_cursor.ps = {"row_desc": []} mock_connection.handle_ROW_DESCRIPTION(data, mock_cursor) assert mock_cursor.ps is not None assert "row_desc" in mock_cursor.ps assert len(mock_cursor.ps["row_desc"]) == 1 assert exp_result[0].items() <= mock_cursor.ps["row_desc"][0].items() assert "func" in mock_cursor.ps["row_desc"][0]
def test_handle_ROW_DESCRIPTION_extended_metadata(_input, protocol): data, exp_result = _input mock_connection = Connection.__new__(Connection) mock_connection._client_protocol_version = protocol mock_cursor = Cursor.__new__(Cursor) mock_cursor.ps = {"row_desc": []} mock_connection.handle_ROW_DESCRIPTION(data, mock_cursor) assert mock_cursor.ps is not None assert "row_desc" in mock_cursor.ps assert len(mock_cursor.ps["row_desc"]) == 1 assert exp_result[0].items() <= mock_cursor.ps["row_desc"][0].items() assert "func" in mock_cursor.ps["row_desc"][0]
def test_get_procedures_considers_args(_input, mocker): catalog, schema_pattern, procedure_name_pattern = _input mocker.patch("redshift_connector.Cursor.execute", return_value=None) mocker.patch("redshift_connector.Cursor.fetchall", return_value=None) mocker.patch("redshift_connector.Connection.is_single_database_metadata", return_value=True) mock_cursor: Cursor = Cursor.__new__(Cursor) mock_connection: Cursor = Connection.__new__(Connection) mock_cursor._c = mock_connection mock_cursor.paramstyle = "mocked_val" spy = mocker.spy(mock_cursor, "execute") mock_cursor.get_procedures(catalog, schema_pattern, procedure_name_pattern) assert spy.called assert spy.call_count == 1 assert catalog not in spy.call_args[0][1] for arg in (schema_pattern, procedure_name_pattern): if arg is not None: assert arg in spy.call_args[0][1]
def test_get_tables_considers_args(is_single_database_metadata_val, _input, schema_pattern_type, mocker): catalog, schema_pattern, table_name_pattern = _input mocker.patch("redshift_connector.Cursor.execute", return_value=None) # mock the return value from __schema_pattern_match as it's return value is used in get_tables() # the other potential call to this method in get_tables() result is simply returned, so at this time # it has no impact mocker.patch( "redshift_connector.Cursor.fetchall", return_value=None if schema_pattern_type == "EXTERNAL_SCHEMA_QUERY" else tuple("mock"), ) mock_cursor: Cursor = Cursor.__new__(Cursor) mock_cursor.paramstyle = "mocked" mock_connection: Cursor = Connection.__new__(Connection) mock_cursor._c = mock_connection spy = mocker.spy(mock_cursor, "execute") with patch( "redshift_connector.Connection.is_single_database_metadata", new_callable=PropertyMock()) as mock_is_single_database_metadata: mock_is_single_database_metadata.__get__ = Mock( return_value=is_single_database_metadata_val) mock_cursor.get_tables(catalog, schema_pattern, table_name_pattern) assert spy.called if schema_pattern is not None and is_single_database_metadata_val: assert spy.call_count == 2 # call in __schema_pattern_match(), get_tables() else: assert spy.call_count == 1 if catalog is not None: assert catalog in spy.call_args[0][0] for arg in (schema_pattern, table_name_pattern): if arg is not None: assert arg in spy.call_args[0][1]
def test_inspect_int(_input): input_val, expected_type = _input mock_connection = Connection.__new__(Connection) assert mock_connection.inspect_int(input_val) == expected_type
def test_handle_COPY_DONE(): mock_connection = Connection.__new__(Connection) assert hasattr(mock_connection, "_copy_done") is False mock_connection.handle_COPY_DONE(None, None) assert mock_connection._copy_done is True
def test_handle_ERROR_RESPONSE(_input): server_msg, expected_decoded_msg, expected_error = _input mock_connection = Connection.__new__(Connection) mock_connection.handle_ERROR_RESPONSE(server_msg, None) assert type(mock_connection.error) == expected_error assert str(expected_decoded_msg) in str(mock_connection.error)
def test_client_os_version_is_not_present(): mock_connection: Connection = Connection.__new__(Connection) with patch("platform.platform", side_effect=Exception("not for you")): assert mock_connection.client_os_version == "unknown"
def test_client_os_version_is_present(): mock_connection: Connection = Connection.__new__(Connection) assert mock_connection.client_os_version is not None assert isinstance(mock_connection.client_os_version, str)