From 151f91f8782fb3d18010c2b6b2c854b4e641c62f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Tue, 1 Dec 2015 10:54:14 +0100 Subject: [PATCH] form: don't fail on misconfigured autocomplete string widgets (#9161) --- tests/test_form_pages.py | 24 ++++++++++++++++++++++++ wcs/qommon/form.py | 6 +++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index e6ec19c..fc3353d 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -2052,3 +2052,27 @@ def test_file_field_validation(pub, fargo_url): http_get_page.reset_mock() assert 'The form has been recorded' in resp.body assert 'class="value valid"' in resp.body + +def test_form_string_field_autocomplete(pub): + formdef = create_formdef() + formdef.fields = [fields.StringField(id='0', label='string', type='string', required=False)] + formdef.fields[0].data_source = {'type': 'jsonp'} + formdef.store() + + # not filled completed, no call to .autocomplete + resp = get_app(pub).get('/test/') + assert not ').autocomplete({' in resp.body + + # straight URL + formdef.fields[0].data_source = {'type': 'jsonp', 'value': 'http://example.org'} + formdef.store() + resp = get_app(pub).get('/test/') + assert ').autocomplete({' in resp.body + assert 'http://example.org' in resp.body + + # URL from variable + formdef.fields[0].data_source = {'type': 'jsonp', 'value': '[site_url]'} + formdef.store() + resp = get_app(pub).get('/test/') + assert ').autocomplete({' in resp.body + assert 'http://example.net' in resp.body diff --git a/wcs/qommon/form.py b/wcs/qommon/form.py index 1972773..87699e4 100644 --- a/wcs/qommon/form.py +++ b/wcs/qommon/form.py @@ -1778,7 +1778,7 @@ class AutocompleteStringWidget(WcsExtraStringWidget): get_response().add_javascript(['jquery.js', 'jquery-ui.js']) get_response().add_css_include('../js/smoothness/jquery-ui-1.10.0.custom.min.css') - if '[' in self.url: + if self.url and '[' in self.url: vars = get_publisher().substitutions.get_context_variables() # skip variables that were not set (None) vars = dict((x, y) for x, y in vars.items() if y is not None) @@ -1788,6 +1788,10 @@ class AutocompleteStringWidget(WcsExtraStringWidget): r = TemplateIO(html=True) r += WcsExtraStringWidget.render_content(self) + if not url: + # there's no autocomplete URL, get out now. + return r.getvalue() + r += htmltext("""