forms: fix live condition against zeroed items field (#30049)
This commit is contained in:
parent
f2f840cf36
commit
227200e0a2
|
@ -5563,6 +5563,43 @@ def test_field_live_condition(pub):
|
||||||
assert '<span class="label">Bar</span>' in resp.body
|
assert '<span class="label">Bar</span>' in resp.body
|
||||||
assert '<span class="label">Foo</span>' in resp.body
|
assert '<span class="label">Foo</span>' in resp.body
|
||||||
|
|
||||||
|
def test_field_live_items_condition(pub):
|
||||||
|
FormDef.wipe()
|
||||||
|
formdef = FormDef()
|
||||||
|
formdef.name = 'Foo'
|
||||||
|
formdef.fields = [
|
||||||
|
fields.ItemsField(type='items', id='1', label='Bar',
|
||||||
|
items=['a', 'b'], varname='bar'),
|
||||||
|
fields.StringField(type='string', id='2', label='Foo', size='40',
|
||||||
|
required=True, varname='foo',
|
||||||
|
condition={'type': 'django', 'value': '"b" in form_var_bar'}),
|
||||||
|
]
|
||||||
|
formdef.store()
|
||||||
|
|
||||||
|
user = create_user(pub)
|
||||||
|
app = login(get_app(pub), username='foo', password='foo')
|
||||||
|
resp = app.get('/foo/')
|
||||||
|
assert 'f1$element0' in resp.form.fields
|
||||||
|
assert 'f1$element1' in resp.form.fields
|
||||||
|
assert 'f2' in resp.form.fields
|
||||||
|
assert resp.html.find('div', {'data-field-id': '1'}).attrs['data-live-source'] == 'true'
|
||||||
|
assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none'
|
||||||
|
resp.form['f1$element0'].checked = True
|
||||||
|
app.post('/foo/autosave', params=resp.form.submit_fields())
|
||||||
|
live_resp = app.post('/foo/live', params=resp.form.submit_fields())
|
||||||
|
assert live_resp.json['result']['1']['visible']
|
||||||
|
assert not live_resp.json['result']['2']['visible']
|
||||||
|
resp.form['f1$element1'].checked = True
|
||||||
|
app.post('/foo/autosave', params=resp.form.submit_fields())
|
||||||
|
live_resp = app.post('/foo/live', params=resp.form.submit_fields())
|
||||||
|
assert live_resp.json['result']['1']['visible']
|
||||||
|
assert live_resp.json['result']['2']['visible']
|
||||||
|
resp.form['f1$element0'].checked = False
|
||||||
|
resp.form['f1$element1'].checked = False
|
||||||
|
live_resp = app.post('/foo/live', params=resp.form.submit_fields())
|
||||||
|
assert live_resp.json['result']['1']['visible']
|
||||||
|
assert not live_resp.json['result']['2']['visible']
|
||||||
|
|
||||||
def test_field_condition_on_required_field(pub):
|
def test_field_condition_on_required_field(pub):
|
||||||
# from https://dev.entrouvert.org/issues/27247
|
# from https://dev.entrouvert.org/issues/27247
|
||||||
FormDef.wipe()
|
FormDef.wipe()
|
||||||
|
|
|
@ -626,17 +626,17 @@ class FormDef(StorableObject):
|
||||||
def get_field_data(self, field, widget):
|
def get_field_data(self, field, widget):
|
||||||
d = {}
|
d = {}
|
||||||
d[field.id] = widget.parse()
|
d[field.id] = widget.parse()
|
||||||
if d.get(field.id) and field.convert_value_from_str:
|
if d.get(field.id) is not None and field.convert_value_from_str:
|
||||||
d[field.id] = field.convert_value_from_str(d[field.id])
|
d[field.id] = field.convert_value_from_str(d[field.id])
|
||||||
if d.get(field.id) and field.store_display_value:
|
if d.get(field.id) is not None and field.store_display_value:
|
||||||
display_value = field.store_display_value(d, field.id)
|
display_value = field.store_display_value(d, field.id)
|
||||||
if display_value:
|
if display_value is not None:
|
||||||
d['%s_display' % field.id] = display_value
|
d['%s_display' % field.id] = display_value
|
||||||
elif d.has_key('%s_display' % field.id):
|
elif d.has_key('%s_display' % field.id):
|
||||||
del d['%s_display' % field.id]
|
del d['%s_display' % field.id]
|
||||||
if d.get(field.id) and field.store_structured_value:
|
if d.get(field.id) is not None and field.store_structured_value:
|
||||||
structured_value = field.store_structured_value(d, field.id)
|
structured_value = field.store_structured_value(d, field.id)
|
||||||
if structured_value:
|
if structured_value is not None:
|
||||||
d['%s_structured' % field.id] = structured_value
|
d['%s_structured' % field.id] = structured_value
|
||||||
elif '%s_structured' % field.id in d:
|
elif '%s_structured' % field.id in d:
|
||||||
del d['%s_structured' % field.id]
|
del d['%s_structured' % field.id]
|
||||||
|
|
Loading…
Reference in New Issue