| # 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": {}, |
| } |
| } |