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">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):
|
||||
# from https://dev.entrouvert.org/issues/27247
|
||||
FormDef.wipe()
|
||||
|
|
|
@ -626,17 +626,17 @@ class FormDef(StorableObject):
|
|||
def get_field_data(self, field, widget):
|
||||
d = {}
|
||||
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])
|
||||
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)
|
||||
if display_value:
|
||||
if display_value is not None:
|
||||
d['%s_display' % field.id] = display_value
|
||||
elif d.has_key('%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)
|
||||
if structured_value:
|
||||
if structured_value is not None:
|
||||
d['%s_structured' % field.id] = structured_value
|
||||
elif '%s_structured' % field.id in d:
|
||||
del d['%s_structured' % field.id]
|
||||
|
|
Loading…
Reference in New Issue