You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by vi...@apache.org on 2020/05/11 11:10:43 UTC
[incubator-superset] branch master updated: Add QueryContext
deserialization test (#9778)
This is an automated email from the ASF dual-hosted git repository.
villebro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push:
new 42b10ae Add QueryContext deserialization test (#9778)
42b10ae is described below
commit 42b10aecaeff21b870c1f825b9c6e5c9dc5f95a3
Author: Ville Brofeldt <33...@users.noreply.github.com>
AuthorDate: Mon May 11 14:10:14 2020 +0300
Add QueryContext deserialization test (#9778)
* Add QueryContext deserialization test
* deserialize using marshmallow and assert error dict
---
superset/charts/schemas.py | 4 ++--
tests/query_context_tests.py | 41 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/superset/charts/schemas.py b/superset/charts/schemas.py
index 59635ad..91b71a3 100644
--- a/superset/charts/schemas.py
+++ b/superset/charts/schemas.py
@@ -490,6 +490,7 @@ class ChartDataPostProcessingOperationSchema(Schema):
validate=validate.OneOf(
choices=(
"aggregate",
+ "cum",
"geodetic_parse",
"geohash_decode",
"geohash_encode",
@@ -501,8 +502,7 @@ class ChartDataPostProcessingOperationSchema(Schema):
),
example="aggregate",
)
- options = fields.Nested(
- ChartDataPostProcessingOperationOptionsSchema,
+ options = fields.Dict(
description="Options specifying how to perform the operation. Please refer "
"to the respective post processing operation option schemas. "
"For example, `ChartDataPostProcessingOperationOptions` specifies "
diff --git a/tests/query_context_tests.py b/tests/query_context_tests.py
index 2d378ba..84f54da 100644
--- a/tests/query_context_tests.py
+++ b/tests/query_context_tests.py
@@ -17,6 +17,7 @@
from typing import Any, Dict, List, Optional
from superset import db
+from superset.charts.schemas import ChartDataQueryContextSchema
from superset.common.query_context import QueryContext
from superset.connectors.connector_registry import ConnectorRegistry
from superset.utils.core import TimeRangeEndpoint
@@ -26,6 +27,46 @@ from tests.test_app import app
class QueryContextTests(SupersetTestCase):
+ def test_schema_deserialization(self):
+ """
+ Ensure that the deserialized QueryContext contains all required fields.
+ """
+
+ table_name = "birth_names"
+ table = self.get_table_by_name(table_name)
+ payload = get_query_context(
+ table.name, table.id, table.type, add_postprocessing_operations=True
+ )
+ query_context, errors = ChartDataQueryContextSchema().load(payload)
+ self.assertDictEqual(errors, {})
+ self.assertEqual(len(query_context.queries), len(payload["queries"]))
+ for query_idx, query in enumerate(query_context.queries):
+ payload_query = payload["queries"][query_idx]
+
+ # check basic properies
+ self.assertEqual(query.extras, payload_query["extras"])
+ self.assertEqual(query.filter, payload_query["filters"])
+ self.assertEqual(query.groupby, payload_query["groupby"])
+
+ # metrics are mutated during creation
+ for metric_idx, metric in enumerate(query.metrics):
+ payload_metric = payload_query["metrics"][metric_idx]
+ payload_metric = (
+ payload_metric
+ if "expressionType" in payload_metric
+ else payload_metric["label"]
+ )
+ self.assertEqual(metric, payload_metric)
+
+ self.assertEqual(query.orderby, payload_query["orderby"])
+ self.assertEqual(query.time_range, payload_query["time_range"])
+
+ # check post processing operation properties
+ for post_proc_idx, post_proc in enumerate(query.post_processing):
+ payload_post_proc = payload_query["post_processing"][post_proc_idx]
+ self.assertEqual(post_proc["operation"], payload_post_proc["operation"])
+ self.assertEqual(post_proc["options"], payload_post_proc["options"])
+
def test_cache_key_changes_when_datasource_is_updated(self):
self.login(username="admin")
table_name = "birth_names"