Skip to content

Commit

Permalink
Fixing core_tests to not use explore_json overrides
Browse files Browse the repository at this point in the history
  • Loading branch information
michellethomas committed Aug 15, 2018
1 parent ffe9202 commit f7c48da
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 32 deletions.
7 changes: 5 additions & 2 deletions superset/views/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -970,9 +970,12 @@ def get_form_data(self, slice_id=None, use_slice_data=False):
slice_id = form_data.get('slice_id') or slice_id
slc = None

# Check if form data only contains slice_id
contains_only_slc_id = not any(key != 'slice_id' for key in form_data)

# Include the slice_form_data if request from explore or slice calls
# explore_json calls should not include slice form_data
if slice_id and use_slice_data:
# or if form_data only contains slice_id
if slice_id and (use_slice_data or contains_only_slc_id):
slc = db.session.query(models.Slice).filter_by(id=slice_id).first()
slice_form_data = slc.form_data.copy()
# allow form_data in request override slice from_data
Expand Down
50 changes: 20 additions & 30 deletions tests/core_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,10 +191,11 @@ def test_save_slice(self):

form_data = {
'viz_type': 'sankey',
'groupby': 'target',
'groupby': 'source',
'metric': 'sum__value',
'row_limit': 5000,
'slice_id': new_slice_id,
'time_range': 'now',
}
# Setting the name back to its original name by overwriting new slice
self.get_resp(
Expand All @@ -207,6 +208,7 @@ def test_save_slice(self):
)
slc = db.session.query(models.Slice).filter_by(id=new_slice_id).first()
assert slc.slice_name == new_slice_name
assert slc.viz.form_data == form_data
db.session.delete(slc)

def test_filter_endpoint(self):
Expand Down Expand Up @@ -557,7 +559,7 @@ def test_slice_id_is_always_logged_correctly_on_web_request(self):
# superset/explore case
slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one()
qry = db.session.query(models.Log).filter_by(slice_id=slc.id)
self.get_resp(slc.slice_url, {'form_data': json.dumps(slc.viz.form_data)})
self.get_resp(slc.slice_url, {'form_data': json.dumps(slc.form_data)})
self.assertEqual(1, qry.count())

def test_slice_id_is_always_logged_correctly_on_ajax_request(self):
Expand All @@ -566,7 +568,7 @@ def test_slice_id_is_always_logged_correctly_on_ajax_request(self):
slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one()
qry = db.session.query(models.Log).filter_by(slice_id=slc.id)
slc_url = slc.slice_url.replace('explore', 'explore_json')
self.get_json_resp(slc_url, {'form_data': json.dumps(slc.viz.form_data)})
self.get_json_resp(slc_url, {'form_data': json.dumps(slc.form_data)})
self.assertEqual(1, qry.count())

def test_slice_query_endpoint(self):
Expand Down Expand Up @@ -654,46 +656,34 @@ def test_comments_in_sqlatable_query(self):
rendered_query = text_type(table.get_from_clause())
self.assertEqual(clean_query, rendered_query)

def test_slice_url_overrides(self):
# No override
self.login(username='admin')
slice_name = 'Girls'
slc = self.get_slice(slice_name, db.session)
resp = self.get_resp(slc.explore_json_url)
assert '"Jennifer"' in resp

# Overriding groupby
url = slc.get_explore_url(
base_url='/superset/explore_json',
overrides={'groupby': ['state']})
resp = self.get_resp(url)
assert '"CA"' in resp

def test_slice_payload_no_data(self):
self.login(username='admin')
slc = self.get_slice('Girls', db.session)
json_endpoint = '/superset/explore_json/'
form_data = slc.form_data
form_data.update({
'filters': [{'col': 'state', 'op': 'in', 'val': ['N/A']}],
})

url = slc.get_explore_url(
base_url='/superset/explore_json',
overrides={
'filters': [{'col': 'state', 'op': 'in', 'val': ['N/A']}],
},
data = self.get_json_resp(
json_endpoint,
{'form_data': json.dumps(form_data)},
)

data = self.get_json_resp(url)
self.assertEqual(data['status'], utils.QueryStatus.SUCCESS)
self.assertEqual(data['error'], 'No data')

def test_slice_payload_invalid_query(self):
self.login(username='admin')
slc = self.get_slice('Girls', db.session)
form_data = slc.form_data
form_data.update({
'groupby': ['N/A'],
})

url = slc.get_explore_url(
base_url='/superset/explore_json',
overrides={'groupby': ['N/A']},
data = self.get_json_resp(
'/superset/explore_json/',
{'form_data': json.dumps(form_data)},
)

data = self.get_json_resp(url)
self.assertEqual(data['status'], utils.QueryStatus.FAILED)
assert 'KeyError' in data['stacktrace']

Expand Down

0 comments on commit f7c48da

Please sign in to comment.