Projet

Général

Profil

0001-fields-make-items-field-accept-a-single-integer-as-v.patch

Frédéric Péters, 18 janvier 2021 16:56

Télécharger (3,63 ko)

Voir les différences:

Subject: [PATCH] fields: make items field accept a single integer as value
 (#50267)

 tests/test_workflows.py | 52 +++++++++++++++++++++++++++++++++++++++++
 wcs/fields.py           | 12 ++++++++++
 2 files changed, 64 insertions(+)
tests/test_workflows.py
4631 4631
    item.fields = [{'field_id': 'bo1', 'value': "{{form_var_items_raw}}"}]
4632 4632
    item.perform(formdata)
4633 4633

  
4634
    # using a single int
4635
    datasource = {'type': 'formula',
4636
                  'value': repr([{'id': 1, 'text': 'aa', 'more': 'aaa'},
4637
                                 {'id': 2, 'text': 'bb', 'more': 'bbb'},
4638
                                 {'id': 3, 'text': 'cc', 'more': 'ccc'}])}
4639

  
4640
    wf.backoffice_fields_formdef.fields = [
4641
        ItemsField(id='bo1', label='1st backoffice field',
4642
            type='items', varname='backoffice_item',
4643
            data_source=datasource),
4644
    ]
4645
    wf.store()
4646

  
4647
    item = SetBackofficeFieldsWorkflowStatusItem()
4648
    item.parent = st1
4649
    item.fields = [{'field_id': 'bo1', 'value': "=2"}]
4650
    item.perform(formdata)
4651

  
4652
    formdata = formdef.data_class().get(formdata.id)
4653
    if two_pubs.is_using_postgresql():
4654
        assert formdata.data['bo1'] == ['2']
4655
    else:
4656
        assert formdata.data['bo1'] == [2]
4657
    assert formdata.data['bo1_display'] == 'bb'
4658
    assert len(formdata.data['bo1_structured']) == 1
4659

  
4660
    # using an invalid value
4661
    if two_pubs.is_using_postgresql():
4662
        formdata.data = {}
4663
        formdata.store()
4664
        two_pubs.loggederror_class.wipe()
4665
        item = SetBackofficeFieldsWorkflowStatusItem()
4666
        item.parent = st1
4667
        item.fields = [{'field_id': 'bo1', 'value': "=Ellipsis"}]
4668
        item.perform(formdata)
4669
        assert two_pubs.loggederror_class.count() == 1
4670
        logged_error = two_pubs.loggederror_class.select()[0]
4671
        assert 'Failed to convert' in logged_error.summary
4672

  
4673
    # using a string with multiple values
4674
    item = SetBackofficeFieldsWorkflowStatusItem()
4675
    item.parent = st1
4676
    item.fields = [{'field_id': 'bo1', 'value': "1|3"}]
4677
    item.perform(formdata)
4678

  
4679
    formdata = formdef.data_class().get(formdata.id)
4680
    assert formdata.data['bo1'] == ['1', '3']
4681
    assert formdata.data['bo1_display'] == 'aa, cc'
4682
    assert len(formdata.data['bo1_structured']) == 2
4683
    assert {'id': 1, 'more': 'aaa', 'text': 'aa'} in formdata.data['bo1_structured']
4684
    assert {'id': 3, 'more': 'ccc', 'text': 'cc'} in formdata.data['bo1_structured']
4685

  
4634 4686

  
4635 4687
def test_set_backoffice_field_date(two_pubs):
4636 4688
    Workflow.wipe()
wcs/fields.py
1885 1885
            return None
1886 1886
        return [x.strip() for x in value.split('|') if x.strip()]
1887 1887

  
1888
    def convert_value_from_anything(self, value):
1889
        if isinstance(value, str):
1890
            return self.convert_value_from_str(value)
1891
        if isinstance(value, int):
1892
            return [value]
1893
        if not value:
1894
            return None
1895
        try:
1896
            return list(value)
1897
        except TypeError:
1898
            raise ValueError('invalid data for items type (%r)' % value)
1899

  
1888 1900
    def get_view_value(self, value, **kwargs):
1889 1901
        if type(value) is str: # == display_value
1890 1902
            return value
1891
-