general: use compatibility dict when rendering ezt (#49395)
This commit is contained in:
parent
47f956dd37
commit
93ef308b1b
|
@ -6737,6 +6737,60 @@ def test_item_field_autocomplete_cards_source(pub):
|
|||
assert formdef.data_class().select()[0].data['0_display'] == 'bar'
|
||||
|
||||
|
||||
def test_item_field_autocomplete_ezt_variable_jsonp(http_requests, pub):
|
||||
formdef = create_formdef()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
formdef.fields = [
|
||||
fields.PageField(id='0', label='1st page', type='page'),
|
||||
fields.ItemField(id='1', label='foo', type='item', varname='foo',
|
||||
data_source={'type': 'jsonp', 'value': '[site_url]/foo-jsonp'},
|
||||
),
|
||||
fields.PageField(id='2', label='2nd page', type='page'),
|
||||
fields.ItemField(id='3', label='bar', type='item',
|
||||
data_source={'type': 'jsonp', 'value': '[site_url]/foo-jsonp?a=[form_var_foo_raw]'},
|
||||
),
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
app = get_app(pub)
|
||||
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
|
||||
resp = app.get('/test/')
|
||||
assert urlopen.call_count == 0
|
||||
pq = resp.pyquery.remove_namespaces()
|
||||
select2_url = pq('select').attr['data-select2-url']
|
||||
assert select2_url == 'http://example.net/foo-jsonp'
|
||||
|
||||
# simulate select2 mode, with qommon.forms.js adding an extra hidden widget
|
||||
resp.form.fields['f1_display'] = [Hidden(form=resp.form, tag='input', name='f1_display', pos=10)]
|
||||
resp.form.field_order.append(('f1_display', resp.form.fields['f1_display'][0]))
|
||||
resp.form['f1'].force_value('1')
|
||||
resp.form['f1_display'].force_value('hello')
|
||||
|
||||
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
|
||||
resp = resp.form.submit('submit') # -> 2nd page
|
||||
assert urlopen.call_count == 0
|
||||
assert resp.pyquery('select').attr['data-select2-url'] == 'http://example.net/foo-jsonp?a=1'
|
||||
|
||||
# simulate select2 mode, with qommon.forms.js adding an extra hidden widget
|
||||
resp.form.fields['f3_display'] = [Hidden(form=resp.form, tag='input', name='f3_display', pos=10)]
|
||||
resp.form.field_order.append(('f3_display', resp.form.fields['f3_display'][0]))
|
||||
resp.form['f3'].force_value('2')
|
||||
resp.form['f3_display'].force_value('hello2')
|
||||
|
||||
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
|
||||
resp = resp.form.submit('submit') # -> validation
|
||||
resp = resp.form.submit('submit') # -> submit
|
||||
assert urlopen.call_count == 0
|
||||
assert formdef.data_class().select()[0].data['1'] == '1'
|
||||
assert formdef.data_class().select()[0].data['1_display'] == 'hello'
|
||||
assert formdef.data_class().select()[0].data['3'] == '2'
|
||||
assert formdef.data_class().select()[0].data['3_display'] == 'hello2'
|
||||
# no _structured data for pure jsonp sources
|
||||
assert '1_structured' not in formdef.data_class().select()[0].data
|
||||
assert '3_structured' not in formdef.data_class().select()[0].data
|
||||
|
||||
|
||||
def test_form_data_keywords(pub):
|
||||
formdef = create_formdef()
|
||||
formdef.keywords = 'hello,world'
|
||||
|
|
|
@ -321,6 +321,10 @@ class Template:
|
|||
return self.data[k]
|
||||
except KeyError:
|
||||
raise AttributeError(k)
|
||||
|
||||
# use custom dictionary to support underscored variables.
|
||||
from wcs.qommon.substitution import CompatibilityNamesDict
|
||||
data = CompatibilityNamesDict(data)
|
||||
data = _data_ob(data)
|
||||
|
||||
ctx = _context()
|
||||
|
|
Loading…
Reference in New Issue