superset/tests/integration_tests/advanced_data_type/api_tests.py

136 lines
4.5 KiB
Python

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# isort:skip_file
"""Unit tests for Superset"""
import json
import prison
from superset.utils.core import get_example_default_schema
from tests.integration_tests.utils.get_dashboards import get_dashboards_ids
from unittest import mock
from sqlalchemy import Column
from typing import Any
from superset.advanced_data_type.types import (
AdvancedDataType,
AdvancedDataTypeRequest,
AdvancedDataTypeResponse,
)
from superset.utils.core import FilterOperator, FilterStringOperators
target_resp: AdvancedDataTypeResponse = {
"values": [],
"error_message": "",
"display_value": "",
"valid_filter_operators": [
FilterStringOperators.EQUALS,
FilterStringOperators.GREATER_THAN_OR_EQUAL,
FilterStringOperators.GREATER_THAN,
FilterStringOperators.IN,
FilterStringOperators.LESS_THAN,
FilterStringOperators.LESS_THAN_OR_EQUAL,
],
}
def translation_func(req: AdvancedDataTypeRequest) -> AdvancedDataTypeResponse:
return target_resp
def translate_filter_func(col: Column, op: FilterOperator, values: list[Any]):
pass
test_type: AdvancedDataType = AdvancedDataType(
verbose_name="type",
valid_data_types=["int"],
translate_type=translation_func,
description="",
translate_filter=translate_filter_func,
)
CHART_DATA_URI = "api/v1/chart/advanced_data_type"
CHARTS_FIXTURE_COUNT = 10
@mock.patch(
"superset.advanced_data_type.api.ADVANCED_DATA_TYPES",
{"type": 1},
)
def test_types_type_request(test_client, login_as_admin):
"""
Advanced Data Type API: Test to see if the API call returns all the valid advanced data types
"""
uri = f"api/v1/advanced_data_type/types"
response_value = test_client.get(uri)
data = json.loads(response_value.data.decode("utf-8"))
assert response_value.status_code == 200
assert data == {"result": ["type"]}
def test_types_convert_bad_request_no_vals(test_client, login_as_admin):
"""
Advanced Data Type API: Test request to see if it behaves as expected when no values are passed
"""
arguments = {"type": "type", "values": []}
uri = f"api/v1/advanced_data_type/convert?q={prison.dumps(arguments)}"
response_value = test_client.get(uri)
assert response_value.status_code == 400
def test_types_convert_bad_request_no_type(test_client, login_as_admin):
"""
Advanced Data Type API: Test request to see if it behaves as expected when no type is passed
"""
arguments = {"type": "", "values": [1]}
uri = f"api/v1/advanced_data_type/convert?q={prison.dumps(arguments)}"
response_value = test_client.get(uri)
assert response_value.status_code == 400
@mock.patch(
"superset.advanced_data_type.api.ADVANCED_DATA_TYPES",
{"type": 1},
)
def test_types_convert_bad_request_type_not_found(test_client, login_as_admin):
"""
Advanced Data Type API: Test request to see if it behaves as expected when passed in type is
not found/not valid
"""
arguments = {"type": "not_found", "values": [1]}
uri = f"api/v1/advanced_data_type/convert?q={prison.dumps(arguments)}"
response_value = test_client.get(uri)
assert response_value.status_code == 400
@mock.patch(
"superset.advanced_data_type.api.ADVANCED_DATA_TYPES",
{"type": test_type},
)
def test_types_convert_request(test_client, login_as_admin):
"""
Advanced Data Type API: Test request to see if it behaves as expected when a valid type
and valid values are passed in
"""
arguments = {"type": "type", "values": [1]}
uri = f"api/v1/advanced_data_type/convert?q={prison.dumps(arguments)}"
response_value = test_client.get(uri)
assert response_value.status_code == 200
data = json.loads(response_value.data.decode("utf-8"))
assert data == {"result": target_resp}