From c93a905c1d669178a401714c01ea3a546586f79e Mon Sep 17 00:00:00 2001 From: Omer Lachish Date: Sun, 28 Apr 2019 14:25:26 +0300 Subject: [PATCH] Fix Ability to save with Multiple Dropdown Parameters (#3717) * support multiple associations of the same query-based dropdown parameter * include several query-based parameters in association tests --- redash/handlers/queries.py | 4 ++-- tests/handlers/test_queries.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/redash/handlers/queries.py b/redash/handlers/queries.py index 8447e22654..278ca54567 100644 --- a/redash/handlers/queries.py +++ b/redash/handlers/queries.py @@ -174,13 +174,13 @@ def get(self): def require_access_to_dropdown_queries(user, query_def): parameters = query_def.get('options', {}).get('parameters', []) - dropdown_query_ids = [str(p['queryId']) for p in parameters if p['type'] == 'query'] + dropdown_query_ids = set([str(p['queryId']) for p in parameters if p['type'] == 'query']) if dropdown_query_ids: groups = models.Query.all_groups_for_query_ids(dropdown_query_ids) if len(groups) < len(dropdown_query_ids): - abort(400, message="You are trying to associate a dropdown query that does not have a matching group." + abort(400, message="You are trying to associate a dropdown query that does not have a matching group. " "Please verify the dropdown query id you are trying to associate with this query.") require_access(dict(groups), user, view_only) diff --git a/tests/handlers/test_queries.py b/tests/handlers/test_queries.py index d45761d340..3a898b1fa3 100644 --- a/tests/handlers/test_queries.py +++ b/tests/handlers/test_queries.py @@ -122,6 +122,11 @@ def test_allows_association_with_authorized_dropdown_queries(self): options = { 'parameters': [{ + 'name': 'foo', + 'type': 'query', + 'queryId': other_query.id + }, { + 'name': 'bar', 'type': 'query', 'queryId': other_query.id }] @@ -251,6 +256,11 @@ def test_allows_association_with_authorized_dropdown_queries(self): 'data_source_id': self.factory.data_source.id, 'options': { 'parameters': [{ + 'name': 'foo', + 'type': 'query', + 'queryId': other_query.id + }, { + 'name': 'bar', 'type': 'query', 'queryId': other_query.id }]