Projet

Général

Profil

0003-fields-detect-and-report-more-invalid-map-values-575.patch

Frédéric Péters, 23 janvier 2022 10:06

Télécharger (3,2 ko)

Voir les différences:

Subject: [PATCH 3/3] fields: detect and report more invalid map values
 (#57566)

 tests/test_fields.py       | 11 +++++++++++
 tests/workflow/test_all.py | 13 +++++++++++++
 wcs/fields.py              |  8 +++++++-
 3 files changed, 31 insertions(+), 1 deletion(-)
tests/test_fields.py
396 396
    keys = substvars.get_flat_keys()
397 397
    assert 'form_var_map_lon' not in keys
398 398

  
399
    # set invalid value, it is ignored
400
    with pytest.raises(fields.SetValueError):
401
        formdef.fields[0].set_value(formdata.data, 'XXX;YYY')
402

  
403
    # set invalid value without using set_value()
404
    formdata.data['5'] = 'XXX;YYY'
405
    substvars = CompatibilityNamesDict()
406
    substvars.update(formdata.get_substitution_variables())
407
    keys = substvars.get_flat_keys()
408
    assert 'form_var_map_lon' not in keys
409

  
399 410

  
400 411
def test_item_render():
401 412
    items_kwargs = []
tests/workflow/test_all.py
4571 4571
        assert logged_error.formdata_id == str(formdata.id)
4572 4572
        assert logged_error.exception_class == 'SetValueError'
4573 4573
        assert logged_error.exception_message == "invalid coordinates 'invalid value' (missing ;)"
4574
        two_pubs.loggederror_class.wipe()
4575

  
4576
    item.fields = [{'field_id': 'bo1', 'value': 'XXX;YYY'}]
4577
    item.perform(formdata)
4578
    formdata = formdef.data_class().get(formdata.id)
4579
    if two_pubs.is_using_postgresql():
4580
        assert two_pubs.loggederror_class.count() == 1
4581
        logged_error = two_pubs.loggederror_class.select()[0]
4582
        assert logged_error.summary == "Failed to set Map field (bo1), error: invalid coordinates 'XXX;YYY'"
4583
        assert logged_error.formdata_id == str(formdata.id)
4584
        assert logged_error.exception_class == 'SetValueError'
4585
        assert logged_error.exception_message == "invalid coordinates 'XXX;YYY'"
4586
        two_pubs.loggederror_class.wipe()
4574 4587

  
4575 4588

  
4576 4589
def test_set_backoffice_field_decimal(http_requests, two_pubs):
wcs/fields.py
3159 3159
    def set_value(self, data, value, raise_on_error=False):
3160 3160
        if value == '':
3161 3161
            value = None
3162
        if value and ';' not in value:
3162
        elif value and ';' not in value:
3163 3163
            raise SetValueError('invalid coordinates %r (missing ;)' % value)
3164
        elif value:
3165
            try:
3166
                dummy, dummy = (float(x) for x in value.split(';'))
3167
            except ValueError:
3168
                # will catch both "too many values to unpack" and invalid float values
3169
                raise SetValueError('invalid coordinates %r' % value)
3164 3170
        super().set_value(data, value)
3165 3171

  
3166 3172

  
3167
-