Projet

Général

Profil

0001-tests-make-field-conditions-work-with-unicode-string.patch

Frédéric Péters, 30 octobre 2018 13:32

Télécharger (4,61 ko)

Voir les différences:

Subject: [PATCH] tests: make field conditions work with unicode strings
 (#27664)

 tests/test_form_pages.py | 75 ++++++++++++++++++++++++++++++++++++++++
 wcs/variables.py         |  9 +++--
 2 files changed, 82 insertions(+), 2 deletions(-)
tests/test_form_pages.py
5261 5261
    assert '<span class="label">Bar</span>' in resp.body
5262 5262
    assert '<span class="label">Foo</span>' not in resp.body
5263 5263

  
5264
def test_field_unicode_condition(pub):
5265
    FormDef.wipe()
5266
    formdef = FormDef()
5267
    formdef.name = 'Foo'
5268
    formdef.fields = [
5269
        fields.PageField(id='0', label='2nd page', type='page'),
5270
        fields.StringField(type='string', id='1', label='Bar', size='40',
5271
            required=True, varname='bar'),
5272
        fields.PageField(id='3', label='1st page', type='page'),
5273
        fields.StringField(type='string', id='4', label='Baz', size='40',
5274
            required=True, varname='baz',
5275
            condition={'type': 'django', 'value': 'form_var_bar == "éléphant"'}),
5276
    ]
5277
    formdef.store()
5278

  
5279
    resp = get_app(pub).get('/foo/')
5280
    resp.form['f1'] = 'hello'
5281
    resp = resp.form.submit('submit')
5282
    assert not 'f4' in resp.form.fields
5283

  
5284
    resp = get_app(pub).get('/foo/')
5285
    resp.form['f1'] = 'éléphant'
5286
    resp = resp.form.submit('submit')
5287
    assert 'f4' in resp.form.fields
5288

  
5289
def test_field_unicode_condition_contains_in_list(pub):
5290
    FormDef.wipe()
5291
    formdef = FormDef()
5292
    formdef.name = 'Foo'
5293
    formdef.fields = [
5294
        fields.PageField(id='0', label='2nd page', type='page'),
5295
        fields.StringField(type='string', id='1', label='Bar', size='40',
5296
            required=True, varname='bar'),
5297
        fields.PageField(id='3', label='1st page', type='page'),
5298
        fields.StringField(type='string', id='4', label='Baz', size='40',
5299
            required=True, varname='baz',
5300
            condition={'type': 'django', 'value': 'form_var_bar in "éléphant"|split'}),
5301
    ]
5302
    formdef.store()
5303

  
5304
    resp = get_app(pub).get('/foo/')
5305
    resp.form['f1'] = 'hello'
5306
    resp = resp.form.submit('submit')
5307
    assert not 'f4' in resp.form.fields
5308

  
5309
    resp = get_app(pub).get('/foo/')
5310
    resp.form['f1'] = 'éléphant'
5311
    resp = resp.form.submit('submit')
5312
    assert 'f4' in resp.form.fields
5313

  
5314
def test_field_unicode_condition_contains_in_string(pub):
5315
    FormDef.wipe()
5316
    formdef = FormDef()
5317
    formdef.name = 'Foo'
5318
    formdef.fields = [
5319
        fields.PageField(id='0', label='2nd page', type='page'),
5320
        fields.StringField(type='string', id='1', label='Bar', size='40',
5321
            required=True, varname='bar'),
5322
        fields.PageField(id='3', label='1st page', type='page'),
5323
        fields.StringField(type='string', id='4', label='Baz', size='40',
5324
            required=True, varname='baz',
5325
            condition={'type': 'django', 'value': '"éléphant" in form_var_bar'}),
5326
    ]
5327
    formdef.store()
5328

  
5329
    resp = get_app(pub).get('/foo/')
5330
    resp.form['f1'] = 'hello'
5331
    resp = resp.form.submit('submit')
5332
    assert not 'f4' in resp.form.fields
5333

  
5334
    resp = get_app(pub).get('/foo/')
5335
    resp.form['f1'] = 'éléphant'
5336
    resp = resp.form.submit('submit')
5337
    assert 'f4' in resp.form.fields
5338

  
5264 5339
def test_field_live_condition(pub):
5265 5340
    FormDef.wipe()
5266 5341
    formdef = FormDef()
wcs/variables.py
341 341
        value = self.data.get(self.field.id)
342 342
        if self.field.convert_value_to_str:
343 343
            return self.field.convert_value_to_str(value)
344
        if isinstance(value, str):
345
            return unicode(value, get_publisher().site_charset)
344 346
        return value
345 347

  
346 348
    def __str__(self):
347
        return str(self.get_value())
349
        value = self.get_value()
350
        if isinstance(value, unicode):
351
            return value.encode(get_publisher().site_charset)
352
        return str(value)
348 353

  
349 354
    def __nonzero__(self):
350 355
        if self.field.key == 'bool':
......
360 365
        return unicode(str(self), get_publisher().site_charset)
361 366

  
362 367
    def __eq__(self, other):
363
        return str(self) == str(other)
368
        return unicode(self) == unicode(other)
364 369

  
365 370
    def __getitem__(self, key):
366 371
        if isinstance(key, int):
367
-