tests: make field conditions work with unicode strings (#27664)
This commit is contained in:
parent
45fa82bc3f
commit
16cd56c158
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue