86 lines
3.4 KiB
Python
86 lines
3.4 KiB
Python
#
|
|
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
|
|
#
|
|
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
import airbyte_api_client
|
|
import pytest
|
|
from airbyte_api_client.model.workspace_id_request_body import WorkspaceIdRequestBody
|
|
from octavia_cli import check_context
|
|
from urllib3.exceptions import MaxRetryError
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_api_client(mocker):
|
|
return mocker.Mock()
|
|
|
|
|
|
def test_api_check_health_available(mock_api_client, mocker):
|
|
mocker.patch.object(check_context, "health_api")
|
|
mock_api_response = mocker.Mock(available=True)
|
|
check_context.health_api.HealthApi.return_value.get_health_check.return_value = mock_api_response
|
|
|
|
assert check_context.check_api_health(mock_api_client) is None
|
|
check_context.health_api.HealthApi.assert_called_with(mock_api_client)
|
|
api_instance = check_context.health_api.HealthApi.return_value
|
|
api_instance.get_health_check.assert_called()
|
|
|
|
|
|
def test_api_check_health_unavailable(mock_api_client, mocker):
|
|
mocker.patch.object(check_context, "health_api")
|
|
mock_api_response = mocker.Mock(available=False)
|
|
check_context.health_api.HealthApi.return_value.get_health_check.return_value = mock_api_response
|
|
with pytest.raises(check_context.UnhealthyApiError):
|
|
check_context.check_api_health(mock_api_client)
|
|
|
|
|
|
def test_api_check_health_unreachable_api_exception(mock_api_client, mocker):
|
|
mocker.patch.object(check_context, "health_api")
|
|
check_context.health_api.HealthApi.return_value.get_health_check.side_effect = airbyte_api_client.ApiException()
|
|
with pytest.raises(check_context.UnreachableAirbyteInstanceError):
|
|
check_context.check_api_health(mock_api_client)
|
|
|
|
|
|
def test_api_check_health_unreachable_max_retry_error(mock_api_client, mocker):
|
|
mocker.patch.object(check_context, "health_api")
|
|
check_context.health_api.HealthApi.return_value.get_health_check.side_effect = MaxRetryError("foo", "bar")
|
|
with pytest.raises(check_context.UnreachableAirbyteInstanceError):
|
|
check_context.check_api_health(mock_api_client)
|
|
|
|
|
|
def test_check_workspace_exists(mock_api_client, mocker):
|
|
mocker.patch.object(check_context, "workspace_api")
|
|
mock_api_instance = mocker.Mock()
|
|
check_context.workspace_api.WorkspaceApi.return_value = mock_api_instance
|
|
assert check_context.check_workspace_exists(mock_api_client, "foo") is None
|
|
check_context.workspace_api.WorkspaceApi.assert_called_with(mock_api_client)
|
|
mock_api_instance.get_workspace.assert_called_with(WorkspaceIdRequestBody("foo"), _check_return_type=False)
|
|
|
|
|
|
def test_check_workspace_exists_error(mock_api_client, mocker):
|
|
mocker.patch.object(check_context, "workspace_api")
|
|
check_context.workspace_api.WorkspaceApi.return_value.get_workspace.side_effect = airbyte_api_client.ApiException()
|
|
with pytest.raises(check_context.WorkspaceIdError):
|
|
check_context.check_workspace_exists(mock_api_client, "foo")
|
|
|
|
|
|
@pytest.fixture
|
|
def project_directories():
|
|
dirpath = tempfile.mkdtemp()
|
|
yield str(Path(dirpath).parent.absolute()), [os.path.basename(dirpath)]
|
|
shutil.rmtree(dirpath)
|
|
|
|
|
|
def test_check_is_initialized(mocker, project_directories):
|
|
project_directory, sub_directories = project_directories
|
|
mocker.patch.object(check_context, "REQUIRED_PROJECT_DIRECTORIES", sub_directories)
|
|
assert check_context.check_is_initialized(project_directory)
|
|
|
|
|
|
def test_check_not_initialized():
|
|
assert not check_context.check_is_initialized(".")
|