tests: make field conditions work with unicode strings (#27664)

This commit is contained in:
Frédéric Péters 2018-10-30 09:44:29 +01:00
parent 45fa82bc3f
commit 16cd56c158
2 changed files with 82 additions and 2 deletions

View File

@ -5216,6 +5216,81 @@ def test_field_condition(pub):
assert '<span class="label">Bar</span>' in resp.body
assert '<span class="label">Foo</span>' not in resp.body
def test_field_unicode_condition(pub):
FormDef.wipe()
formdef = FormDef()
formdef.name = 'Foo'
formdef.fields = [
fields.PageField(id='0', label='2nd page', type='page'),
fields.StringField(type='string', id='1', label='Bar', size='40',
required=True, varname='bar'),
fields.PageField(id='3', label='1st page', type='page'),
fields.StringField(type='string', id='4', label='Baz', size='40',
required=True, varname='baz',
condition={'type': 'django', 'value': 'form_var_bar == "éléphant"'}),
]
formdef.store()
resp = get_app(pub).get('/foo/')
resp.form['f1'] = 'hello'
resp = resp.form.submit('submit')
assert not 'f4' in resp.form.fields
resp = get_app(pub).get('/foo/')
resp.form['f1'] = 'éléphant'
resp = resp.form.submit('submit')
assert 'f4' in resp.form.fields
def test_field_unicode_condition_contains_in_list(pub):
FormDef.wipe()
formdef = FormDef()
formdef.name = 'Foo'
formdef.fields = [
fields.PageField(id='0', label='2nd page', type='page'),
fields.StringField(type='string', id='1', label='Bar', size='40',
required=True, varname='bar'),
fields.PageField(id='3', label='1st page', type='page'),
fields.StringField(type='string', id='4', label='Baz', size='40',
required=True, varname='baz',
condition={'type': 'django', 'value': 'form_var_bar in "éléphant"|split'}),
]
formdef.store()
resp = get_app(pub).get('/foo/')
resp.form['f1'] = 'hello'
resp = resp.form.submit('submit')
assert not 'f4' in resp.form.fields
resp = get_app(pub).get('/foo/')
resp.form['f1'] = 'éléphant'
resp = resp.form.submit('submit')
assert 'f4' in resp.form.fields
def test_field_unicode_condition_contains_in_string(pub):
FormDef.wipe()
formdef = FormDef()
formdef.name = 'Foo'
formdef.fields = [
fields.PageField(id='0', label='2nd page', type='page'),
fields.StringField(type='string', id='1', label='Bar', size='40',
required=True, varname='bar'),
fields.PageField(id='3', label='1st page', type='page'),
fields.StringField(type='string', id='4', label='Baz', size='40',
required=True, varname='baz',
condition={'type': 'django', 'value': '"éléphant" in form_var_bar'}),
]
formdef.store()
resp = get_app(pub).get('/foo/')
resp.form['f1'] = 'hello'
resp = resp.form.submit('submit')
assert not 'f4' in resp.form.fields
resp = get_app(pub).get('/foo/')
resp.form['f1'] = 'éléphant'
resp = resp.form.submit('submit')
assert 'f4' in resp.form.fields
def test_field_live_condition(pub):
FormDef.wipe()
formdef = FormDef()

View File

@ -341,10 +341,15 @@ class LazyFieldVar(object):
value = self.data.get(self.field.id)
if self.field.convert_value_to_str:
return self.field.convert_value_to_str(value)
if isinstance(value, str):
return unicode(value, get_publisher().site_charset)
return value
def __str__(self):
return str(self.get_value())
value = self.get_value()
if isinstance(value, unicode):
return value.encode(get_publisher().site_charset)
return str(value)
def __nonzero__(self):
if self.field.key == 'bool':
@ -360,7 +365,7 @@ class LazyFieldVar(object):
return unicode(str(self), get_publisher().site_charset)
def __eq__(self, other):
return str(self) == str(other)
return unicode(self) == unicode(other)
def __getitem__(self, key):
if isinstance(key, int):