From ebd0c44fafb4cc7bd3ace17ce1797b0008b7af1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 28 Nov 2018 11:52:11 +0100 Subject: [PATCH] conditions: encode items values for contains checks (#28416) --- tests/test_form_pages.py | 47 ++++++++++++++++++++++++++++++++++++++++ wcs/variables.py | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index f0c5fe2f0..99a427a48 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -5351,6 +5351,53 @@ def test_field_unicode_condition_contains_in_string(pub): resp = resp.form.submit('submit') assert 'f4' in resp.form.fields +def test_field_unicode_condition_in_array(pub): + FormDef.wipe() + formdef = FormDef() + formdef.name = 'Foo' + formdef.fields = [ + fields.PageField(id='0', label='1st page', type='page'), + fields.ItemsField(id='1', label='items', type='items', + required=True, + varname='foo', items=['Pomme', 'Poire', 'Pêche', 'Abricot']), + fields.PageField(id='2', label='2nd page', type='page'), + fields.StringField(type='string', id='3', label='Baz', size='40', + required=True, varname='baz', + condition={'type': 'django', 'value': '"Pêche" in form_var_foo'}), + fields.CommentField(type='comment', id='4', label='{{form_var_foo}}'), + fields.CommentField(type='comment', id='5', label='{% if "Pêche" in form_var_foo %}OK{% endif %}'), + ] + + workflow = Workflow(name='test') + st1 = workflow.add_status('Status1', 'st1') + display1 = DisplayMessageWorkflowStatusItem() + display1.message = 'Message {% if "Pêche" in form_var_foo %}OK{% endif %}' + display1.to = [] + st1.items.append(display1) + display1.parent = st1 + workflow.store() + + formdef.workflow = workflow + formdef.store() + + resp = get_app(pub).get('/foo/') + resp.form['f1$element1'].checked = True + resp = resp.form.submit('submit') + assert not 'f3' in resp.form.fields + + resp = get_app(pub).get('/foo/') + resp.form['f1$element1'].checked = True + resp.form['f1$element2'].checked = True + resp = resp.form.submit('submit') + assert 'f3' in resp.form.fields # check it's ok in field condition + resp.form['f3'] = 'hop' + assert '>Poire, Pêche<' in resp.body # check it's displayed correctly + assert '>OK<' in resp.body # check it's ok in template condition + resp = resp.form.submit('submit') + assert 'Check values then click submit.' in resp.body + resp = resp.form.submit('submit').follow() + assert '

Message OK

' in resp.body # check it's ok in workflow template + def test_field_live_condition(pub): FormDef.wipe() formdef = FormDef() diff --git a/wcs/variables.py b/wcs/variables.py index e90d5c0ce..b3e045cdb 100644 --- a/wcs/variables.py +++ b/wcs/variables.py @@ -358,7 +358,7 @@ class LazyFieldVar(object): def __contains__(self, value): if self.field.key == 'items': - return value in self.data.get(self.field.id) + return qommon.misc.site_encode(value) in self.data.get(self.field.id) return value in self.get_value() def __unicode__(self): -- 2.20.0.rc1