Projet

Général

Profil

0001-variables-use-first-field-with-a-value-in-case-of-du.patch

Frédéric Péters, 24 janvier 2020 13:45

Télécharger (2,52 ko)

Voir les différences:

Subject: [PATCH] variables: use first field with a value in case of duplicated
 varnames (#38961)

 tests/test_formdata.py | 23 +++++++++++++++++++++++
 wcs/variables.py       |  8 ++++++++
 2 files changed, 31 insertions(+)
tests/test_formdata.py
756 756
    assert lazy_formdata.tracking_code == tracking_code.id
757 757

  
758 758

  
759
def test_lazy_formdata_duplicated_varname(pub, variable_test_data):
760
    formdef = FormDef.select()[0]
761
    formdata = FormDef.select()[0].data_class().select()[0]
762
    lazy_formdata = LazyFormData(formdata)
763
    assert lazy_formdata.var.foo_foo == 'bar'
764

  
765
    formdef.fields.append(fields.StringField(id='100', label='string', varname='foo_foo'))
766
    formdef.store()
767
    formdata = FormDef.select()[0].data_class().select()[0]
768
    lazy_formdata = LazyFormData(formdata)
769
    assert lazy_formdata.var.foo_foo == 'bar'
770

  
771
    # add a value to 2nd field with foo_foo as varname
772
    formdata.data['100'] = 'baz'
773
    lazy_formdata = LazyFormData(formdata)
774
    assert lazy_formdata.var.foo_foo == 'bar'  # 1st value
775

  
776
    # remove value from 1st field with foo_foo as varname
777
    formdata.data['0'] = None
778
    lazy_formdata = LazyFormData(formdata)
779
    assert lazy_formdata.var.foo_foo == 'baz'  # 2nd value
780

  
781

  
759 782
def test_lazy_formdata_queryset(pub, variable_test_data):
760 783
    lazy_formdata = variable_test_data
761 784
    data_class = lazy_formdata._formdef.data_class()
wcs/variables.py
445 445
        for field in self._fields:
446 446
            if not field.varname:
447 447
                continue
448
            if field.varname in self._varnames:
449
                # duplicated varname
450
                value = self._data.get(self._varnames[field.varname].id)
451
                if value or value is False:
452
                    # previous field had a value (not None or the empty string),
453
                    # stay on it.
454
                    continue
455
                # else continue and update _varnames with new field reference.
448 456
            self._varnames[field.varname] = field
449 457
        return self._varnames
450 458

  
451
-