mirror of
https://github.com/apache/superset.git
synced 2026-04-08 19:05:46 +00:00
Co-authored-by: Elizabeth Thompson <eschutho@gmail.com> Co-authored-by: Hugh A Miles II <hugh@Mac.home>
243 lines
7.6 KiB
Python
243 lines
7.6 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.
|
|
import pytest
|
|
|
|
from superset.reports.models import ReportSchedule
|
|
|
|
|
|
def test_get_native_filters_params():
|
|
"""
|
|
Test the ``get_native_filters_params`` method.
|
|
"""
|
|
report_schedule = ReportSchedule()
|
|
report_schedule.extra = {
|
|
"dashboard": {
|
|
"nativeFilters": [
|
|
{
|
|
"nativeFilterId": "filter_id",
|
|
"columnName": "column_name",
|
|
"filterType": "filter_select",
|
|
"filterValues": ["value1", "value2"],
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
assert report_schedule.get_native_filters_params() == (
|
|
"(filter_id:(extraFormData:(filters:!((col:column_name,op:IN,val:!(value1,value2)))),filterState:(label:column_name,validateStatus:!f,value:!(value1,value2)),id:filter_id,ownState:()))"
|
|
)
|
|
|
|
|
|
def test_get_native_filters_params_multiple_filters():
|
|
"""
|
|
Test the ``get_native_filters_params`` method with multiple native filters.
|
|
"""
|
|
report_schedule = ReportSchedule()
|
|
report_schedule.extra = {
|
|
"dashboard": {
|
|
"nativeFilters": [
|
|
{
|
|
"nativeFilterId": "filter_id_1",
|
|
"filterType": "filter_select",
|
|
"columnName": "column_name_1",
|
|
"filterValues": ["value1", "value2"],
|
|
},
|
|
{
|
|
"nativeFilterId": "filter_id_2",
|
|
"filterType": "filter_select",
|
|
"columnName": "column_name_2",
|
|
"filterValues": ["value3", "value4"],
|
|
},
|
|
]
|
|
}
|
|
}
|
|
|
|
assert report_schedule.get_native_filters_params() == (
|
|
"(filter_id_1:(extraFormData:(filters:!((col:column_name_1,op:IN,val:!(value1,value2)))),filterState:(label:column_name_1,validateStatus:!f,value:!(value1,value2)),id:filter_id_1,ownState:()),filter_id_2:(extraFormData:(filters:!((col:column_name_2,op:IN,val:!(value3,value4)))),filterState:(label:column_name_2,validateStatus:!f,value:!(value3,value4)),id:filter_id_2,ownState:()))"
|
|
)
|
|
|
|
|
|
def test_report_generate_native_filter_no_values():
|
|
"""
|
|
Test the ``_generate_native_filter`` method with no values.
|
|
"""
|
|
report_schedule = ReportSchedule()
|
|
native_filter_id = "filter_id"
|
|
column_name = "column_name"
|
|
filter_type = "filter_select"
|
|
values = None
|
|
|
|
assert report_schedule._generate_native_filter(
|
|
native_filter_id, filter_type, column_name, values
|
|
) == {
|
|
"filter_id": {
|
|
"id": "filter_id",
|
|
"extraFormData": {
|
|
"filters": [{"col": "column_name", "op": "IN", "val": []}]
|
|
},
|
|
"filterState": {
|
|
"label": "column_name",
|
|
"validateStatus": False,
|
|
"value": [],
|
|
},
|
|
"ownState": {},
|
|
}
|
|
}
|
|
|
|
|
|
def test_get_native_filters_params_invalid_structure():
|
|
"""
|
|
Test the ``get_native_filters_params`` method with invalid structure.
|
|
"""
|
|
report_schedule = ReportSchedule()
|
|
report_schedule.extra = {
|
|
"dashboard": {
|
|
"nativeFilters": [
|
|
{
|
|
"nativeFilterId": "filter_id",
|
|
"columnName": "column_name",
|
|
"filterType": "filter_select",
|
|
# Missing "filterValues" key
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
with pytest.raises(KeyError, match="'filterValues'"):
|
|
report_schedule.get_native_filters_params()
|
|
|
|
|
|
# todo(hugh): how do we want to handle this case?
|
|
# def test_report_generate_native_filter_invalid_filter_id():
|
|
# """
|
|
# Test the ``_generate_native_filter`` method with invalid filter id.
|
|
# """
|
|
# report_schedule = ReportSchedule()
|
|
# native_filter_id = None
|
|
# column_name = "column_name"
|
|
# values = ["value1", "value2"]
|
|
|
|
# assert report_schedule._generate_native_filter(
|
|
# native_filter_id, column_name, values
|
|
# ) == {}
|
|
|
|
|
|
def test_report_generate_native_filter():
|
|
"""
|
|
Test the ``_generate_native_filter`` method.
|
|
"""
|
|
report_schedule = ReportSchedule()
|
|
native_filter_id = "filter_id"
|
|
filter_type = "filter_select"
|
|
column_name = "column_name"
|
|
values = ["value1", "value2"]
|
|
|
|
assert report_schedule._generate_native_filter(
|
|
native_filter_id, filter_type, column_name, values
|
|
) == {
|
|
"filter_id": {
|
|
"extraFormData": {
|
|
"filters": [
|
|
{"col": "column_name", "op": "IN", "val": ["value1", "value2"]}
|
|
]
|
|
},
|
|
"filterState": {
|
|
"label": "column_name",
|
|
"validateStatus": False,
|
|
"value": ["value1", "value2"],
|
|
},
|
|
"id": "filter_id",
|
|
"ownState": {},
|
|
}
|
|
}
|
|
|
|
|
|
def test_get_native_filters_params_empty():
|
|
"""
|
|
Test the ``get_native_filters_params`` method with empty extra.
|
|
"""
|
|
report_schedule = ReportSchedule()
|
|
report_schedule.extra = {}
|
|
|
|
assert report_schedule.get_native_filters_params() == "()"
|
|
|
|
|
|
def test_get_native_filters_params_no_native_filters():
|
|
"""
|
|
Test the ``get_native_filters_params`` method with no native filters.
|
|
"""
|
|
report_schedule = ReportSchedule()
|
|
report_schedule.extra = {"dashboard": {"nativeFilters": []}}
|
|
|
|
assert report_schedule.get_native_filters_params() == "()"
|
|
|
|
|
|
def test_report_generate_native_filter_empty_values():
|
|
"""
|
|
Test the ``_generate_native_filter`` method with empty values.
|
|
"""
|
|
report_schedule = ReportSchedule()
|
|
native_filter_id = "filter_id"
|
|
filter_type = "filter_select"
|
|
column_name = "column_name"
|
|
values = []
|
|
|
|
assert report_schedule._generate_native_filter(
|
|
native_filter_id, filter_type, column_name, values
|
|
) == {
|
|
"filter_id": {
|
|
"extraFormData": {
|
|
"filters": [{"col": "column_name", "op": "IN", "val": []}]
|
|
},
|
|
"filterState": {
|
|
"label": "column_name",
|
|
"validateStatus": False,
|
|
"value": [],
|
|
},
|
|
"id": "filter_id",
|
|
"ownState": {},
|
|
}
|
|
}
|
|
|
|
|
|
def test_report_generate_native_filter_no_column_name():
|
|
"""
|
|
Test the ``_generate_native_filter`` method with no column name.
|
|
"""
|
|
report_schedule = ReportSchedule()
|
|
native_filter_id = "filter_id"
|
|
filter_type = "filter_select"
|
|
column_name = ""
|
|
values = ["value1", "value2"]
|
|
|
|
assert report_schedule._generate_native_filter(
|
|
native_filter_id, filter_type, column_name, values
|
|
) == {
|
|
"filter_id": {
|
|
"extraFormData": {
|
|
"filters": [{"col": "", "op": "IN", "val": ["value1", "value2"]}]
|
|
},
|
|
"filterState": {
|
|
"label": "",
|
|
"validateStatus": False,
|
|
"value": ["value1", "value2"],
|
|
},
|
|
"id": "filter_id",
|
|
"ownState": {},
|
|
}
|
|
}
|