def test_query_obj_throws_columns_and_metrics(self, super_query_obj): datasource = self.get_datasource_mock() form_data = {"all_columns": ["A", "B"], "metrics": ["x", "y"]} super_query_obj.return_value = {} test_viz = viz.TableViz(datasource, form_data) with self.assertRaises(Exception): test_viz.query_obj() del form_data["metrics"] form_data["groupby"] = ["B", "C"] test_viz = viz.TableViz(datasource, form_data) with self.assertRaises(Exception): test_viz.query_obj()
def test_query_obj_throws_columns_and_metrics(self, super_query_obj): datasource = Mock() form_data = { 'all_columns': ['A', 'B'], 'metrics': ['x', 'y'], } super_query_obj.return_value = {} test_viz = viz.TableViz(datasource, form_data) with self.assertRaises(Exception): test_viz.query_obj() del form_data['metrics'] form_data['groupby'] = ['B', 'C'] test_viz = viz.TableViz(datasource, form_data) with self.assertRaises(Exception): test_viz.query_obj()
def test_adhoc_metric_with_sortby(self): metrics = [ { "expressionType": "SIMPLE", "aggregate": "SUM", "label": "sum_value", "column": {"column_name": "value1", "type": "DOUBLE"}, } ] form_data = { "metrics": metrics, "timeseries_limit_metric": { "expressionType": "SIMPLE", "aggregate": "SUM", "label": "SUM(value1)", "column": {"column_name": "value1", "type": "DOUBLE"}, }, "order_desc": False, } df = pd.DataFrame({"SUM(value1)": [15], "sum_value": [15]}) datasource = self.get_datasource_mock() test_viz = viz.TableViz(datasource, form_data) data = test_viz.get_data(df) self.assertEqual(["sum_value", "SUM(value1)"], data["columns"])
def test_adhoc_filters_overwrite_legacy_filters(self): form_data = { "metrics": [ { "expressionType": "SIMPLE", "aggregate": "SUM", "label": "SUM(value1)", "column": {"column_name": "value1", "type": "DOUBLE"}, } ], "adhoc_filters": [ { "expressionType": "SIMPLE", "clause": "WHERE", "subject": "value2", "operator": ">", "comparator": "100", }, { "expressionType": "SQL", "clause": "WHERE", "sqlExpression": "value3 in ('North America')", }, ], "having": "SUM(value1) > 5", } datasource = self.get_datasource_mock() test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual( [{"col": "value2", "val": "100", "op": ">"}], query_obj["filter"] ) self.assertEqual([], query_obj["extras"]["having_druid"]) self.assertEqual("(value3 in ('North America'))", query_obj["extras"]["where"]) self.assertEqual("", query_obj["extras"]["having"])
def test_parse_adhoc_filters(self): form_data = { 'metrics': [{ 'expressionType': 'SIMPLE', 'aggregate': 'SUM', 'label': 'SUM(value1)', 'column': { 'column_name': 'value1', 'type': 'DOUBLE' }, }], 'adhoc_filters': [ { 'expressionType': 'SIMPLE', 'clause': 'WHERE', 'subject': 'value2', 'operator': '>', 'comparator': '100', }, { 'expressionType': 'SIMPLE', 'clause': 'HAVING', 'subject': 'SUM(value1)', 'operator': '<', 'comparator': '10', }, { 'expressionType': 'SQL', 'clause': 'HAVING', 'sqlExpression': 'SUM(value1) > 5', }, { 'expressionType': 'SQL', 'clause': 'WHERE', 'sqlExpression': 'value3 in (\'North America\')', }, ], } datasource = Mock() test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual( [{ 'col': 'value2', 'val': '100', 'op': '>' }], query_obj['filter'], ) self.assertEqual( [{ 'op': '<', 'val': '10', 'col': 'SUM(value1)' }], query_obj['extras']['having_druid'], ) self.assertEqual('(value3 in (\'North America\'))', query_obj['extras']['where']) self.assertEqual('(SUM(value1) > 5)', query_obj['extras']['having'])
def test_legacy_filters_still_appear_without_adhoc_filters(self): form_data = { 'metrics': [{ 'expressionType': 'SIMPLE', 'aggregate': 'SUM', 'label': 'SUM(value1)', 'column': {'column_name': 'value1', 'type': 'DOUBLE'}, }], 'having': 'SUM(value1) > 5', 'where': 'value3 in (\'North America\')', 'filters': [{'col': 'value2', 'val': '100', 'op': '>'}], 'having_filters': [{'op': '<', 'val': '10', 'col': 'SUM(value1)'}], } datasource = Mock() test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual( [{'col': 'value2', 'val': '100', 'op': '>'}], query_obj['filter'], ) self.assertEqual( [{'op': '<', 'val': '10', 'col': 'SUM(value1)'}], query_obj['extras']['having_druid'], ) self.assertEqual('value3 in (\'North America\')', query_obj['extras']['where']) self.assertEqual('SUM(value1) > 5', query_obj['extras']['having'])
def test_query_obj_uses_sortby(self, super_query_obj): datasource = self.get_datasource_mock() form_data = {"timeseries_limit_metric": "__time__", "order_desc": False} super_query_obj.return_value = {"metrics": ["colA", "colB"]} test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual(["colA", "colB", "__time__"], query_obj["metrics"]) self.assertEqual([("__time__", True)], query_obj["orderby"])
def test_get_data_applies_percentage(self): form_data = { 'percent_metrics': [{ 'expressionType': 'SIMPLE', 'aggregate': 'SUM', 'label': 'SUM(value1)', 'column': {'column_name': 'value1', 'type': 'DOUBLE'}, }, 'avg__B'], 'metrics': [{ 'expressionType': 'SIMPLE', 'aggregate': 'SUM', 'label': 'SUM(value1)', 'column': {'column_name': 'value1', 'type': 'DOUBLE'}, }, 'count', 'avg__C'], } datasource = self.get_datasource_mock() raw = {} raw['SUM(value1)'] = [15, 20, 25, 40] raw['avg__B'] = [10, 20, 5, 15] raw['avg__C'] = [11, 22, 33, 44] raw['count'] = [6, 7, 8, 9] raw['groupA'] = ['A', 'B', 'C', 'C'] raw['groupB'] = ['x', 'x', 'y', 'z'] df = pd.DataFrame(raw) test_viz = viz.TableViz(datasource, form_data) data = test_viz.get_data(df) # Check method correctly transforms data and computes percents self.assertEqual(set([ 'groupA', 'groupB', 'count', 'SUM(value1)', 'avg__C', '%SUM(value1)', '%avg__B', ]), set(data['columns'])) expected = [ { 'groupA': 'A', 'groupB': 'x', 'count': 6, 'SUM(value1)': 15, 'avg__C': 11, '%SUM(value1)': 0.15, '%avg__B': 0.2, }, { 'groupA': 'B', 'groupB': 'x', 'count': 7, 'SUM(value1)': 20, 'avg__C': 22, '%SUM(value1)': 0.2, '%avg__B': 0.4, }, { 'groupA': 'C', 'groupB': 'y', 'count': 8, 'SUM(value1)': 25, 'avg__C': 33, '%SUM(value1)': 0.25, '%avg__B': 0.1, }, { 'groupA': 'C', 'groupB': 'z', 'count': 9, 'SUM(value1)': 40, 'avg__C': 44, '%SUM(value1)': 0.40, '%avg__B': 0.3, }, ] self.assertEqual(expected, data['records'])
def test_raise_for_access_viz(self, mock_can_access_schema, mock_can_access): test_viz = viz.TableViz(self.get_datasource_mock(), form_data={}) mock_can_access_schema.return_value = True security_manager.raise_for_access(viz=test_viz) mock_can_access.return_value = False mock_can_access_schema.return_value = False with self.assertRaises(SupersetSecurityException): security_manager.raise_for_access(viz=test_viz)
def test_query_obj_uses_sortby(self, super_query_obj): datasource = Mock() form_data = { 'timeseries_limit_metric': '__time__', 'order_desc': False } super_query_obj.return_value = {'metrics': ['colA', 'colB']} test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual(['colA', 'colB', '__time__'], query_obj['metrics']) self.assertEqual([('__time__', True)], query_obj['orderby'])
def test_assert_viz_permission(self, mock_datasource_access): test_viz = viz.TableViz(self.get_datasource_mock(), form_data={}) # Visualization with the "datasource_access" permission. mock_datasource_access.return_value = True security_manager.assert_viz_permission(test_viz) # Visualization without the "datasource_access" permission. mock_datasource_access.return_value = False with self.assertRaises(SupersetSecurityException): security_manager.assert_viz_permission(test_viz)
def test_query_obj_merges_percent_metrics(self, super_query_obj): datasource = Mock() form_data = { 'percent_metrics': ['sum__A', 'avg__B', 'max__Y'], 'metrics': ['sum__A', 'count', 'avg__C'], } test_viz = viz.TableViz(datasource, form_data) f_query_obj = {'metrics': form_data['metrics']} super_query_obj.return_value = f_query_obj query_obj = test_viz.query_obj() self.assertEqual(['sum__A', 'count', 'avg__C', 'avg__B', 'max__Y'], query_obj['metrics'])
def test_query_obj_merges_percent_metrics(self, super_query_obj): datasource = self.get_datasource_mock() form_data = { "percent_metrics": ["sum__A", "avg__B", "max__Y"], "metrics": ["sum__A", "count", "avg__C"], } test_viz = viz.TableViz(datasource, form_data) f_query_obj = {"metrics": form_data["metrics"]} super_query_obj.return_value = f_query_obj query_obj = test_viz.query_obj() self.assertEqual(["sum__A", "count", "avg__C", "avg__B", "max__Y"], query_obj["metrics"])
def test_query_obj_merges_all_columns(self, super_query_obj): datasource = self.get_datasource_mock() form_data = { "all_columns": ["colA", "colB", "colC"], "order_by_cols": ['["colA", "colB"]', '["colC"]'], } super_query_obj.return_value = { "columns": ["colD", "colC"], "groupby": ["colA", "colB"], } test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual(form_data["all_columns"], query_obj["columns"]) self.assertEqual([], query_obj["groupby"]) self.assertEqual([["colA", "colB"], ["colC"]], query_obj["orderby"])
def test_query_obj_merges_all_columns(self, super_query_obj): datasource = Mock() form_data = { 'all_columns': ['colA', 'colB', 'colC'], 'order_by_cols': ['["colA", "colB"]', '["colC"]'], } super_query_obj.return_value = { 'columns': ['colD', 'colC'], 'groupby': ['colA', 'colB'], } test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual(form_data['all_columns'], query_obj['columns']) self.assertEqual([], query_obj['groupby']) self.assertEqual([['colA', 'colB'], ['colC']], query_obj['orderby'])
def test_adhoc_filters_overwrite_legacy_filters(self): form_data = { 'metrics': [{ 'expressionType': 'SIMPLE', 'aggregate': 'SUM', 'label': 'SUM(value1)', 'column': { 'column_name': 'value1', 'type': 'DOUBLE' }, }], 'adhoc_filters': [ { 'expressionType': 'SIMPLE', 'clause': 'WHERE', 'subject': 'value2', 'operator': '>', 'comparator': '100', }, { 'expressionType': 'SQL', 'clause': 'WHERE', 'sqlExpression': "value3 in ('North America')", }, ], 'having': 'SUM(value1) > 5', } datasource = self.get_datasource_mock() test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual( [{ 'col': 'value2', 'val': '100', 'op': '>' }], query_obj['filter'], ) self.assertEqual( [], query_obj['extras']['having_druid'], ) self.assertEqual("(value3 in ('North America'))", query_obj['extras']['where']) self.assertEqual('', query_obj['extras']['having'])
def test_get_data_applies_percentage(self): form_data = { 'percent_metrics': ['sum__A', 'avg__B'], 'metrics': ['sum__A', 'count', 'avg__C'], } datasource = Mock() raw = {} raw['sum__A'] = [15, 20, 25, 40] raw['avg__B'] = [10, 20, 5, 15] raw['avg__C'] = [11, 22, 33, 44] raw['count'] = [6, 7, 8, 9] raw['groupA'] = ['A', 'B', 'C', 'C'] raw['groupB'] = ['x', 'x', 'y', 'z'] df = pd.DataFrame(raw) test_viz = viz.TableViz(datasource, form_data) data = test_viz.get_data(df) # Check method correctly transforms data and computes percents self.assertEqual(set([ 'groupA', 'groupB', 'count', 'sum__A', 'avg__C', '%sum__A', '%avg__B', ]), set(data['columns'])) expected = [ { 'groupA': 'A', 'groupB': 'x', 'count': 6, 'sum__A': 15, 'avg__C': 11, '%sum__A': 0.15, '%avg__B': 0.2, }, { 'groupA': 'B', 'groupB': 'x', 'count': 7, 'sum__A': 20, 'avg__C': 22, '%sum__A': 0.2, '%avg__B': 0.4, }, { 'groupA': 'C', 'groupB': 'y', 'count': 8, 'sum__A': 25, 'avg__C': 33, '%sum__A': 0.25, '%avg__B': 0.1, }, { 'groupA': 'C', 'groupB': 'z', 'count': 9, 'sum__A': 40, 'avg__C': 44, '%sum__A': 0.40, '%avg__B': 0.3, }, ] self.assertEqual(expected, data['records'])
def test_should_be_timeseries_raises_when_no_granularity(self): datasource = Mock() form_data = {'include_time': True} test_viz = viz.TableViz(datasource, form_data) with self.assertRaises(Exception): test_viz.should_be_timeseries()
def test_get_data_applies_percentage(self): form_data = { "percent_metrics": [ { "expressionType": "SIMPLE", "aggregate": "SUM", "label": "SUM(value1)", "column": {"column_name": "value1", "type": "DOUBLE"}, }, "avg__B", ], "metrics": [ { "expressionType": "SIMPLE", "aggregate": "SUM", "label": "SUM(value1)", "column": {"column_name": "value1", "type": "DOUBLE"}, }, "count", "avg__C", ], } datasource = self.get_datasource_mock() raw = {} raw["SUM(value1)"] = [15, 20, 25, 40] raw["avg__B"] = [10, 20, 5, 15] raw["avg__C"] = [11, 22, 33, 44] raw["count"] = [6, 7, 8, 9] raw["groupA"] = ["A", "B", "C", "C"] raw["groupB"] = ["x", "x", "y", "z"] df = pd.DataFrame(raw) test_viz = viz.TableViz(datasource, form_data) data = test_viz.get_data(df) # Check method correctly transforms data and computes percents self.assertEqual( set( [ "groupA", "groupB", "count", "SUM(value1)", "avg__C", "%SUM(value1)", "%avg__B", ] ), set(data["columns"]), ) expected = [ { "groupA": "A", "groupB": "x", "count": 6, "SUM(value1)": 15, "avg__C": 11, "%SUM(value1)": 0.15, "%avg__B": 0.2, }, { "groupA": "B", "groupB": "x", "count": 7, "SUM(value1)": 20, "avg__C": 22, "%SUM(value1)": 0.2, "%avg__B": 0.4, }, { "groupA": "C", "groupB": "y", "count": 8, "SUM(value1)": 25, "avg__C": 33, "%SUM(value1)": 0.25, "%avg__B": 0.1, }, { "groupA": "C", "groupB": "z", "count": 9, "SUM(value1)": 40, "avg__C": 44, "%SUM(value1)": 0.40, "%avg__B": 0.3, }, ] self.assertEqual(expected, data["records"])