blob: 5a5e0cc71e6bb86e392009d724825733515e25c8 [file] [log] [blame]
# 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.
from copy import deepcopy
from superset.migrations.versions.fc3a3a8ff221_migrate_filter_sets_to_new_format import (
downgrade_filter_set,
upgrade_filter_set,
upgrade_select_filters,
)
native_filters_v1 = [
{
"cascadeParentIds": [],
"controlValues": {
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-CZpnK0rM-",
"isInstant": True,
"name": "Region",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "region"}, "datasetId": 2}],
},
{
"cascadeParentIds": [],
"defaultValue": "No filter",
"filterType": "filter_time",
"id": "NATIVE_FILTER-gCMse9C7e",
"isInstant": True,
"name": "Time Range",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{}],
},
{
"cascadeParentIds": ["NATIVE_FILTER-CZpnK0rM-"],
"controlValues": {
"defaultToFirstItem": False,
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-oQRgQ25Au",
"isInstant": True,
"name": "Country",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "country_name"}, "datasetId": 2}],
},
]
native_filters_v2 = [
{
"cascadeParentIds": [],
"controlValues": {
"defaultToFirstItem": False,
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-CZpnK0rM-",
"isInstant": True,
"name": "Region",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "region"}, "datasetId": 2}],
},
{
"cascadeParentIds": [],
"defaultValue": "No filter",
"filterType": "filter_time",
"id": "NATIVE_FILTER-gCMse9C7e",
"isInstant": True,
"name": "Time Range",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{}],
},
{
"cascadeParentIds": ["NATIVE_FILTER-CZpnK0rM-"],
"controlValues": {
"defaultToFirstItem": False,
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-oQRgQ25Au",
"isInstant": True,
"name": "Country",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "country_name"}, "datasetId": 2}],
},
]
filter_sets_v1 = {
"name": "New filter set",
"id": "FILTERS_SET-tt_Ovwy95",
"nativeFilters": {
"NATIVE_FILTER-tx05Ze2Hm": {
"id": "NATIVE_FILTER-tx05Ze2Hm",
"name": "Time range",
"filterType": "filter_time",
"targets": [{}],
"defaultValue": "No filter",
"cascadeParentIds": [],
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"isInstant": False,
},
"NATIVE_FILTER-JeZ9HYoTP": {
"cascadeParentIds": [],
"controlValues": {
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-JeZ9HYoTP",
"isInstant": False,
"name": "Platform",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "platform"}, "datasetId": 33}],
},
"NATIVE_FILTER-B2PFYVIUw": {
"cascadeParentIds": [],
"controlValues": {
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-B2PFYVIUw",
"isInstant": False,
"name": "Genre",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "genre"}, "datasetId": 33}],
},
"NATIVE_FILTER-VDLd4Wq-v": {
"cascadeParentIds": [],
"controlValues": {
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-VDLd4Wq-v",
"isInstant": False,
"name": "Publisher",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "publisher"}, "datasetId": 33}],
},
},
"dataMask": {
"nativeFilters": {
"NATIVE_FILTER-tx05Ze2Hm": {
"extraFormData": {"override_form_data": {"time_range": "No filter"}},
"currentState": {"value": "No filter"},
"id": "NATIVE_FILTER-tx05Ze2Hm",
},
"NATIVE_FILTER-B2PFYVIUw": {
"extraFormData": {
"append_form_data": {
"filters": [
{
"col": "genre",
"op": "IN",
"val": ["Adventure", "Fighting", "Misc"],
}
]
}
},
"currentState": {"value": ["Adventure", "Fighting", "Misc"]},
"id": "NATIVE_FILTER-B2PFYVIUw",
},
"NATIVE_FILTER-VDLd4Wq-v": {
"extraFormData": {"append_form_data": {"filters": []}},
"currentState": {"value": None},
"id": "NATIVE_FILTER-VDLd4Wq-v",
},
"NATIVE_FILTER-JeZ9HYoTP": {
"extraFormData": {
"append_form_data": {
"filters": [
{
"col": "platform",
"op": "IN",
"val": ["GB", "GBA", "PSV", "DS", "3DS"],
}
]
}
},
"currentState": {"value": ["GB", "GBA", "PSV", "DS", "3DS"]},
"id": "NATIVE_FILTER-JeZ9HYoTP",
},
}
},
}
filter_sets_v2 = {
"name": "New filter set",
"id": "FILTERS_SET-tt_Ovwy95",
"nativeFilters": {
"NATIVE_FILTER-tx05Ze2Hm": {
"id": "NATIVE_FILTER-tx05Ze2Hm",
"name": "Time range",
"filterType": "filter_time",
"targets": [{}],
"defaultValue": "No filter",
"cascadeParentIds": [],
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"isInstant": False,
},
"NATIVE_FILTER-JeZ9HYoTP": {
"cascadeParentIds": [],
"controlValues": {
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
"defaultToFirstItem": False,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-JeZ9HYoTP",
"isInstant": False,
"name": "Platform",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "platform"}, "datasetId": 33}],
},
"NATIVE_FILTER-B2PFYVIUw": {
"cascadeParentIds": [],
"controlValues": {
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
"defaultToFirstItem": False,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-B2PFYVIUw",
"isInstant": False,
"name": "Genre",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "genre"}, "datasetId": 33}],
},
"NATIVE_FILTER-VDLd4Wq-v": {
"cascadeParentIds": [],
"controlValues": {
"enableEmptyFilter": False,
"inverseSelection": False,
"multiSelect": True,
"sortAscending": True,
"defaultToFirstItem": False,
},
"defaultValue": None,
"filterType": "filter_select",
"id": "NATIVE_FILTER-VDLd4Wq-v",
"isInstant": False,
"name": "Publisher",
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
"targets": [{"column": {"name": "publisher"}, "datasetId": 33}],
},
},
"dataMask": {
"NATIVE_FILTER-tx05Ze2Hm": {
"id": "NATIVE_FILTER-tx05Ze2Hm",
"filterState": {"value": "No filter"},
"extraFormData": {"time_range": "No filter"},
},
"NATIVE_FILTER-B2PFYVIUw": {
"id": "NATIVE_FILTER-B2PFYVIUw",
"filterState": {"value": ["Adventure", "Fighting", "Misc"]},
"extraFormData": {
"filters": [
{
"col": "genre",
"op": "IN",
"val": ["Adventure", "Fighting", "Misc"],
}
]
},
},
"NATIVE_FILTER-VDLd4Wq-v": {
"id": "NATIVE_FILTER-VDLd4Wq-v",
"filterState": {"value": None},
"extraFormData": {"filters": []},
},
"NATIVE_FILTER-JeZ9HYoTP": {
"id": "NATIVE_FILTER-JeZ9HYoTP",
"filterState": {"value": ["GB", "GBA", "PSV", "DS", "3DS"]},
"extraFormData": {
"filters": [
{
"col": "platform",
"op": "IN",
"val": ["GB", "GBA", "PSV", "DS", "3DS"],
}
]
},
},
},
}
def test_upgrade_select_filters():
"""
ensure that controlValue.defaultToFirstItem is added if it's missing
"""
converted_filters = deepcopy(native_filters_v1)
upgrade_select_filters(converted_filters)
assert converted_filters == native_filters_v2
def test_upgrade_filter_sets():
"""
ensure that filter set upgrade operation produces a object that is compatible
with a currently functioning set
"""
converted_filter_set = deepcopy(filter_sets_v1)
upgrade_filter_set(converted_filter_set)
assert converted_filter_set == filter_sets_v2
def test_downgrade_filter_set():
"""
ensure that the filter set downgrade operation produces an almost identical dict
as the original value
"""
converted_v1_set = deepcopy(filter_sets_v1)
# upgrade the native filter metadata in the comparison fixture,
# as removing the defaultToFirstItem is not necessary
upgrade_select_filters(converted_v1_set["nativeFilters"].values())
converted_filter_set = deepcopy(filter_sets_v2)
downgrade_filter_set(converted_filter_set)
assert converted_filter_set == converted_v1_set