Skip to content

Commit

Permalink
BI-5180: add connectors info tests (#465)
Browse files Browse the repository at this point in the history
  • Loading branch information
MCPN authored May 28, 2024
1 parent 24a595d commit 1fb076b
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 0 deletions.
15 changes: 15 additions & 0 deletions lib/dl_api_lib/dl_api_lib_tests/db/config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
from typing import ClassVar

from dl_api_lib_testing.configuration import ApiTestEnvironmentConfiguration
from dl_configs.connector_availability import (
ConnectorAvailabilityConfigSettings,
ConnectorSettings,
SectionSettings,
TranslatableSettings,
)
from dl_core_testing.configuration import DefaultCoreTestConfiguration
from dl_testing.containers import get_test_container_hostport

Expand Down Expand Up @@ -40,5 +46,14 @@ class CoreConnectionSettings:
API_TEST_CONFIG = ApiTestEnvironmentConfiguration(
api_connector_ep_names=["clickhouse", "postgresql"],
core_test_config=CORE_TEST_CONFIG,
connector_availability_settings=ConnectorAvailabilityConfigSettings(
uncategorized=[ConnectorSettings(conn_type="postgres")],
sections=[
SectionSettings(
title_translatable=TranslatableSettings(text="ClickHouse®"),
connectors=[ConnectorSettings(conn_type="clickhouse")],
)
],
),
ext_query_executer_secret_key="_some_test_secret_key_",
)
85 changes: 85 additions & 0 deletions lib/dl_api_lib/dl_api_lib_tests/db/control_api/test_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import itertools

import pytest

from dl_api_connector.form_config.models.base import ConnectionFormMode
from dl_api_lib.connection_forms.registry import CONN_FORM_FACTORY_BY_TYPE
from dl_api_lib.enums import BI_TYPE_AGGREGATIONS
from dl_api_lib_tests.db.base import DefaultApiTestBase
from dl_constants.enums import (
AggregationFunction,
ConnectionType,
UserDataType,
)

from dl_connector_clickhouse.core.clickhouse_base.constants import CONNECTION_TYPE_CLICKHOUSE


class TestInfo(DefaultApiTestBase):
def test_get_field_types_info(self, client):
resp = client.get("/api/v1/info/field_types")
assert resp.status_code == 200, resp.json
resp_data = resp.json

names = set(item["name"] for item in resp_data["types"])
expected = set(
item.name
for item in BI_TYPE_AGGREGATIONS
if item
not in (
UserDataType.uuid,
UserDataType.markup,
UserDataType.datetimetz,
UserDataType.datetime,
UserDataType.unsupported,
)
)
assert names == expected

for api_record in resp_data["types"]:
aggs = set(AggregationFunction[x] for x in api_record["aggregations"])
expected = set(BI_TYPE_AGGREGATIONS[UserDataType[api_record["name"]]])
assert aggs == expected

def test_get_connectors(self, client):
resp = client.get("/api/v1/info/connectors")
assert resp.status_code == 200, resp.json
connector_info = resp.json

uncategorized = connector_info.get("uncategorized", [])
assert uncategorized
sections = connector_info.get("sections", [])
assert sections
assert all(
isinstance(section["title"], str) and not section["title"].startswith("section_title-")
for section in sections
)

all_connectors = itertools.chain(
uncategorized,
itertools.chain.from_iterable(
connector["includes"] if "includes" in connector else (connector,) # type: ignore
for connector in itertools.chain.from_iterable(section["connectors"] for section in sections)
),
)

assert all(
conn_info["backend_driven_form"] == (ConnectionType(conn_info["conn_type"]) in CONN_FORM_FACTORY_BY_TYPE)
for conn_info in all_connectors
)

@pytest.mark.parametrize("mode_name", [mode.name for mode in ConnectionFormMode])
@pytest.mark.parametrize("conn_type_name", [conn_type.name for conn_type in ConnectionType])
def test_get_connector_form(self, client, conn_type_name, mode_name):
"""There is not much we can test, other than the fact that all forms can be built successfully"""

form_resp = client.get(f"/api/v1/info/connectors/forms/{conn_type_name}/{mode_name}")
assert form_resp.status_code == 200
assert "form" in form_resp.json

def test_get_connector_form_bad_request(self, client):
form_resp = client.get(f"/api/v1/info/connectors/forms/bad_conn_type/{ConnectionFormMode.create.name}")
assert form_resp.status_code == 400, form_resp.json

form_resp = client.get(f"/api/v1/info/connectors/forms/{CONNECTION_TYPE_CLICKHOUSE.name}/bad_form_mode")
assert form_resp.status_code == 400, form_resp.json

0 comments on commit 1fb076b

Please sign in to comment.