1
0
mirror of synced 2026-01-06 06:04:16 -05:00
Files
airbyte/octavia-cli/unit_tests/test_list/test_listings.py
Cole Snodgrass 2e099acc52 update headers from 2022 -> 2023 (#22594)
* It's 2023!

* 2022 -> 2023

---------

Co-authored-by: evantahler <evan@airbyte.io>
2023-02-08 13:01:16 -08:00

155 lines
7.6 KiB
Python

#
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
#
import pytest
from airbyte_api_client.api import connection_api, destination_api, destination_definition_api, source_api, source_definition_api
from octavia_cli.list import listings
from octavia_cli.list.listings import (
BaseListing,
Connections,
DestinationConnectorsDefinitions,
Destinations,
SourceConnectorsDefinitions,
Sources,
WorkspaceListing,
)
class TestBaseListing:
@pytest.fixture
def patch_base_class(self, mocker):
# Mock abstract methods to enable instantiating abstract class
mocker.patch.object(BaseListing, "__abstractmethods__", set())
mocker.patch.object(BaseListing, "list_function_name", "my_list_function_name")
mocker.patch.object(BaseListing, "api", mocker.Mock(my_list_function_name=mocker.Mock()))
def test_init(self, patch_base_class, mock_api_client):
base_listing = BaseListing(mock_api_client)
assert base_listing._list_fn == BaseListing.api.my_list_function_name
assert base_listing.list_function_kwargs == {}
assert base_listing.api_instance == base_listing.api.return_value
base_listing.api.assert_called_with(mock_api_client)
assert base_listing.COMMON_LIST_FUNCTION_KWARGS == {"_check_return_type": False}
def test_abstract_methods(self, mock_api_client):
assert BaseListing.__abstractmethods__ == {"api", "fields_to_display", "list_field_in_response", "list_function_name"}
with pytest.raises(TypeError):
BaseListing(mock_api_client)
def test_parse_response(self, patch_base_class, mocker, mock_api_client):
mocker.patch.object(BaseListing, "fields_to_display", ["fieldA", "fieldB"])
base_listing = BaseListing(mock_api_client)
api_response = {base_listing.list_field_in_response: []}
for i in range(5):
definition = {field: f"{field}_value_{i}" for field in base_listing.fields_to_display}
definition["discarded_field"] = "discarded_value"
api_response[base_listing.list_field_in_response].append(definition)
parsed_listing = base_listing._parse_response(api_response)
assert len(parsed_listing) == 5
for i in range(5):
assert parsed_listing[i] == [f"{field}_value_{i}" for field in base_listing.fields_to_display]
assert "discarded_value" not in parsed_listing[i]
def test_gest_listing(self, patch_base_class, mocker, mock_api_client):
mocker.patch.object(BaseListing, "_parse_response")
mocker.patch.object(BaseListing, "_list_fn")
base_listing = BaseListing(mock_api_client)
listing = base_listing.get_listing()
base_listing._list_fn.assert_called_with(
base_listing.api_instance, **base_listing.list_function_kwargs, **base_listing.COMMON_LIST_FUNCTION_KWARGS
)
base_listing._parse_response.assert_called_with(base_listing._list_fn.return_value)
assert listing == base_listing._parse_response.return_value
def test_repr(self, patch_base_class, mocker, mock_api_client):
headers = ["fieldA", "fieldB", "fieldC"]
api_response_listing = [["a", "b", "c"]]
mocker.patch.object(BaseListing, "fields_to_display", headers)
mocker.patch.object(BaseListing, "get_listing", mocker.Mock(return_value=api_response_listing))
mocker.patch.object(listings, "formatting")
base_listing = BaseListing(mock_api_client)
representation = base_listing.__repr__()
listings.formatting.display_as_table.assert_called_with(
[listings.formatting.format_column_names.return_value] + api_response_listing
)
assert representation == listings.formatting.display_as_table.return_value
class TestSourceConnectorsDefinitions:
def test_init(self, mock_api_client):
assert SourceConnectorsDefinitions.__base__ == BaseListing
source_connectors_definition = SourceConnectorsDefinitions(mock_api_client)
assert source_connectors_definition.api == source_definition_api.SourceDefinitionApi
assert source_connectors_definition.fields_to_display == ["name", "dockerRepository", "dockerImageTag", "sourceDefinitionId"]
assert source_connectors_definition.list_field_in_response == "source_definitions"
assert source_connectors_definition.list_function_name == "list_source_definitions"
class TestDestinationConnectorsDefinitions:
def test_init(self, mock_api_client):
assert DestinationConnectorsDefinitions.__base__ == BaseListing
destination_connectors_definition = DestinationConnectorsDefinitions(mock_api_client)
assert destination_connectors_definition.api == destination_definition_api.DestinationDefinitionApi
assert destination_connectors_definition.fields_to_display == [
"name",
"dockerRepository",
"dockerImageTag",
"destinationDefinitionId",
]
assert destination_connectors_definition.list_field_in_response == "destination_definitions"
assert destination_connectors_definition.list_function_name == "list_destination_definitions"
class TestWorkspaceListing:
@pytest.fixture
def patch_base_class(self, mocker):
# Mock abstract methods to enable instantiating abstract class
mocker.patch.object(WorkspaceListing, "__abstractmethods__", set())
mocker.patch.object(WorkspaceListing, "api", mocker.Mock())
def test_init(self, patch_base_class, mocker, mock_api_client):
mocker.patch.object(listings, "WorkspaceIdRequestBody")
mocker.patch.object(BaseListing, "__init__")
assert WorkspaceListing.__base__ == BaseListing
sources_and_destinations = WorkspaceListing(mock_api_client, "my_workspace_id")
assert sources_and_destinations.workspace_id == "my_workspace_id"
assert sources_and_destinations.list_function_kwargs == {"workspace_id_request_body": listings.WorkspaceIdRequestBody.return_value}
listings.WorkspaceIdRequestBody.assert_called_with(workspace_id="my_workspace_id")
BaseListing.__init__.assert_called_with(mock_api_client)
def test_abstract(self, mock_api_client):
with pytest.raises(TypeError):
WorkspaceListing(mock_api_client)
class TestSources:
def test_init(self, mock_api_client):
assert Sources.__base__ == WorkspaceListing
sources = Sources(mock_api_client, "my_workspace_id")
assert sources.api == source_api.SourceApi
assert sources.fields_to_display == ["name", "sourceName", "sourceId"]
assert sources.list_field_in_response == "sources"
assert sources.list_function_name == "list_sources_for_workspace"
class TestDestinations:
def test_init(self, mock_api_client):
assert Destinations.__base__ == WorkspaceListing
destinations = Destinations(mock_api_client, "my_workspace_id")
assert destinations.api == destination_api.DestinationApi
assert destinations.fields_to_display == ["name", "destinationName", "destinationId"]
assert destinations.list_field_in_response == "destinations"
assert destinations.list_function_name == "list_destinations_for_workspace"
class TestConnections:
def test_init(self, mock_api_client):
assert Connections.__base__ == WorkspaceListing
connections = Connections(mock_api_client, "my_workspace_id")
assert connections.api == connection_api.ConnectionApi
assert connections.fields_to_display == ["name", "connectionId", "status", "sourceId", "destinationId"]
assert connections.list_field_in_response == "connections"
assert connections.list_function_name == "list_connections_for_workspace"