| # 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""" |
| from typing import Any, Dict, Tuple |
| |
| from marshmallow import ValidationError |
| from tests.test_app import app |
| from superset.charts.schemas import ChartDataQueryContextSchema |
| from superset.common.query_context import QueryContext |
| from tests.base_tests import SupersetTestCase |
| from tests.fixtures.query_context import get_query_context |
| |
| |
| class TestSchema(SupersetTestCase): |
| def test_query_context_limit_and_offset(self): |
| self.login(username="admin") |
| payload = get_query_context("birth_names") |
| |
| # Use defaults |
| payload["queries"][0].pop("row_limit", None) |
| payload["queries"][0].pop("row_offset", None) |
| query_context = ChartDataQueryContextSchema().load(payload) |
| query_object = query_context.queries[0] |
| self.assertEqual(query_object.row_limit, app.config["ROW_LIMIT"]) |
| self.assertEqual(query_object.row_offset, 0) |
| |
| # Valid limit and offset |
| payload["queries"][0]["row_limit"] = 100 |
| payload["queries"][0]["row_offset"] = 200 |
| query_context = ChartDataQueryContextSchema().load(payload) |
| query_object = query_context.queries[0] |
| self.assertEqual(query_object.row_limit, 100) |
| self.assertEqual(query_object.row_offset, 200) |
| |
| # too low limit and offset |
| payload["queries"][0]["row_limit"] = -1 |
| payload["queries"][0]["row_offset"] = -1 |
| with self.assertRaises(ValidationError) as context: |
| _ = ChartDataQueryContextSchema().load(payload) |
| self.assertIn("row_limit", context.exception.messages["queries"][0]) |
| self.assertIn("row_offset", context.exception.messages["queries"][0]) |
| |
| def test_query_context_null_timegrain(self): |
| self.login(username="admin") |
| payload = get_query_context("birth_names") |
| payload["queries"][0]["extras"]["time_grain_sqla"] = None |
| _ = ChartDataQueryContextSchema().load(payload) |
| |
| def test_query_context_series_limit(self): |
| self.login(username="admin") |
| payload = get_query_context("birth_names") |
| |
| payload["queries"][0]["timeseries_limit"] = 2 |
| payload["queries"][0]["timeseries_limit_metric"] = { |
| "expressionType": "SIMPLE", |
| "column": { |
| "id": 334, |
| "column_name": "gender", |
| "filterable": True, |
| "groupby": True, |
| "is_dttm": False, |
| "type": "VARCHAR(16)", |
| "optionName": "_col_gender", |
| }, |
| "aggregate": "COUNT_DISTINCT", |
| "label": "COUNT_DISTINCT(gender)", |
| } |
| _ = ChartDataQueryContextSchema().load(payload) |
| |
| def test_query_context_null_post_processing_op(self): |
| self.login(username="admin") |
| payload = get_query_context("birth_names") |
| |
| payload["queries"][0]["post_processing"] = [None] |
| query_context = ChartDataQueryContextSchema().load(payload) |
| self.assertEqual(query_context.queries[0].post_processing, []) |