From 2bfb9cc7ddbd24e85ebad45d69f8c466cdbcabc5 Mon Sep 17 00:00:00 2001 From: Chris Williams Date: Wed, 10 Aug 2016 23:11:53 -0700 Subject: [PATCH] pass the `standalone` request arg in the /caravel/slices// endpoint redirect (#876) * pass the request arg in the /caravel/slices// endpoint. remove unused import. * test that a single slice redirects rather than testing them all. update standalone redirect logic for Javascript 'false' instead of Python False --- caravel/templates/caravel/standalone.html | 2 +- caravel/views.py | 4 ++- tests/core_tests.py | 38 +++++++++++++++++++++-- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/caravel/templates/caravel/standalone.html b/caravel/templates/caravel/standalone.html index c69f3d0e6..a84221a92 100644 --- a/caravel/templates/caravel/standalone.html +++ b/caravel/templates/caravel/standalone.html @@ -5,7 +5,6 @@ - {% set CSS_THEME = appbuilder.get_app.config.get("CSS_THEME") %} {% set height = request.args.get("height", 700) %} {% if CSS_THEME %} @@ -18,6 +17,7 @@ id="{{ viz.token }}" class="widget viz slice {{ viz.viz_type }}" data-slice="{{ viz.json_data }}" + data-standalone="true" style="height: {{ height }}px;"> loading
diff --git a/caravel/views.py b/caravel/views.py index 9b4ff8351..8d51cb4fd 100755 --- a/caravel/views.py +++ b/caravel/views.py @@ -1141,7 +1141,9 @@ class Caravel(BaseCaravelView): qry = session.query(models.Slice).filter_by(id=int(slice_id)) slc = qry.first() if slc: - return redirect(slc.slice_url) + url = '{slc.slice_url}&standalone={standalone}'.format( + slc=slc, standalone=request.args.get('standalone', 'false')) + return redirect(url) else: flash("The specified slice could not be found", "danger") return redirect('/slicemodelview/list/') diff --git a/tests/core_tests.py b/tests/core_tests.py index ee73086f2..ec0342285 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -29,7 +29,6 @@ app.config['PUBLIC_ROLE_LIKE_GAMMA'] = True BASE_DIR = app.config.get("BASE_DIR") cli = imp.load_source('cli', BASE_DIR + "/bin/caravel") - class CaravelTestCase(unittest.TestCase): def __init__(self, *args, **kwargs): @@ -147,7 +146,6 @@ class CoreTests(CaravelTestCase): for slc in db.session.query(Slc).all(): urls += [ (slc.slice_name, 'slice_url', slc.slice_url), - (slc.slice_name, 'slice_id_endpoint', '/caravel/slices/{}'.format(slc.id)), (slc.slice_name, 'json_endpoint', slc.viz.json_endpoint), (slc.slice_name, 'csv_endpoint', slc.viz.csv_endpoint), ] @@ -155,6 +153,42 @@ class CoreTests(CaravelTestCase): print("[{name}]/[{method}]: {url}".format(**locals())) self.client.get(url) + def test_slice_id_redirects(self, username='admin'): + def make_assertions(resp, standalone): + decoded = resp.data.decode('utf-8') + if standalone: + assert "Query" not in decoded + assert 'data-standalone="true"' in decoded + + else: + assert "Query" in decoded + assert 'data-standalone="true"' not in decoded + + self.login(username=username) + slc = db.session.query(models.Slice).filter_by(slice_name="Name Cloud").first() + get = self.client.get + + # Standard redirect + slc_url = slc.slice_url + id_url = '/caravel/slice/{slc.id}'.format(slc=slc) + + make_assertions(get(slc_url, follow_redirects=True), False) + make_assertions(get(id_url, follow_redirects=True), False) + + # Explicit standalone + slc_url_standalone = '{slc_url}&standalone=true'.format(slc_url=slc_url) + id_url_standalone = '{id_url}?standalone=true'.format(id_url=id_url) + + make_assertions(get(slc_url_standalone, follow_redirects=True), True) + make_assertions(get(id_url_standalone, follow_redirects=True), True) + + # Explicit not-standalone + slc_url_notstandalone = '{slc_url}&standalone=false'.format(slc_url=slc_url) + id_url_notstandalone = '{id_url}?standalone=false'.format(id_url=id_url) + + make_assertions(get(slc_url_notstandalone, follow_redirects=True), False) + make_assertions(get(id_url_notstandalone, follow_redirects=True), False) + def test_dashboard(self): self.login(username='admin') urls = {}