Projet

Général

Profil

0001-fields-do-not-consider-prefill-of-type-none-as-a-rea.patch

Frédéric Péters, 23 mai 2022 09:25

Télécharger (5,4 ko)

Voir les différences:

Subject: [PATCH] fields: do not consider prefill of type none as a real
 prefill (#65544)

 tests/admin_pages/test_form.py |  4 +--
 tests/form_pages/test_block.py | 57 ++++++++++++++++++++++++++++++++++
 wcs/fields.py                  |  5 +--
 wcs/forms/root.py              |  3 ++
 4 files changed, 65 insertions(+), 4 deletions(-)
tests/admin_pages/test_form.py
1978 1978
    app = login(get_app(pub))
1979 1979
    resp = app.get('/backoffice/forms/1/fields/1/')
1980 1980
    assert resp.forms[0]['prefill$type'].options == [
1981
        ('None', False, 'None'),
1981
        ('None', True, 'None'),
1982 1982
        ('String / Template', False, 'String / Template'),
1983 1983
        ('Python Expression', False, 'Python Expression'),
1984 1984
        ('User Field', False, 'User Field'),
......
1991 1991

  
1992 1992
    resp = app.get('/backoffice/forms/1/fields/1/')
1993 1993
    assert resp.forms[0]['prefill$type'].options == [
1994
        ('None', False, 'None'),
1994
        ('None', True, 'None'),
1995 1995
        ('String / Template', False, 'String / Template'),
1996 1996
        ('User Field', False, 'User Field'),
1997 1997
        ('Geolocation', False, 'Geolocation'),
tests/form_pages/test_block.py
1889 1889
        '1_display': 'foobar, foobar',
1890 1890
    }
1891 1891
    formdef.data_class().wipe()
1892

  
1893

  
1894
def test_block_with_block_item_field_condition_and_prefill(pub):
1895
    BlockDef.wipe()
1896
    block = BlockDef()
1897
    block.name = 'foobar'
1898
    block.fields = [
1899
        fields.StringField(
1900
            id='123',
1901
            required=True,
1902
            label='One',
1903
            type='string',
1904
            prefill={'type': 'string', 'value': '{{ "plop" }}'},
1905
        ),
1906
        fields.ItemField(
1907
            id='234',
1908
            required=True,
1909
            label='Test2',
1910
            type='item',
1911
            varname='item',
1912
            items=['Foo', 'Bar'],
1913
            prefill={'type': 'none'},
1914
        ),
1915
        fields.StringField(
1916
            id='345',
1917
            required=True,
1918
            label='Two',
1919
            type='string',
1920
            condition={'type': 'django', 'value': 'block_var_item == "Foo"'},
1921
        ),
1922
    ]
1923
    block.store()
1924

  
1925
    FormDef.wipe()
1926
    formdef = FormDef()
1927
    formdef.name = 'form title'
1928
    formdef.fields = [
1929
        fields.BlockField(id='1', label='test', type='block:foobar'),
1930
    ]
1931
    formdef.store()
1932
    formdef.data_class().wipe()
1933

  
1934
    app = get_app(pub)
1935
    resp = app.get(formdef.get_url())
1936
    assert resp.form['f1$element0$f123'].value == 'plop'
1937
    assert resp.form['f1$element0$f234'].value == 'Foo'
1938
    assert resp.pyquery('[data-widget-name="f1$element0$f234"]').attr['data-live-source'] == 'true'
1939
    assert resp.pyquery('[data-widget-name="f1$element0$f345"]').attr.style == 'display: none'
1940
    live_resp = app.post(
1941
        formdef.get_url() + 'live?modified_field_id=123&modified_block_id=1&modified_block_row=0',
1942
        params=resp.form.submit_fields(),
1943
    )
1944
    assert live_resp.json['result']['1-123-0']['visible'] is True
1945
    assert live_resp.json['result']['1-234-0']['visible'] is True
1946
    assert live_resp.json['result']['1-345-0']['visible'] is True
1947
    resp.form['f1$element0$f345'] = 'test'
1948
    resp = resp.form.submit('submit')  # validation
wcs/fields.py
131 131
            SingleSelectWidget,
132 132
            'type',
133 133
            options=options,
134
            value=value.get('type'),
134
            value=value.get('type') or 'none',
135 135
            attrs={'data-dynamic-display-parent': 'true'},
136 136
        )
137 137

  
......
230 230
    def _parse(self, request):
231 231
        values = {}
232 232
        type_ = self.get('type')
233
        if type_:
233
        if type_ and type_ != 'none':
234 234
            values['type'] = type_
235 235
            values['locked'] = self.get('locked')
236 236
            value = self.get('value_%s' % type_)
......
2260 2260
                widget.extra_css_class = '%s %s' % (widget.extra_css_class, self.extra_css_class)
2261 2261
            else:
2262 2262
                widget.extra_css_class = self.extra_css_class
2263
        return widget
2263 2264

  
2264 2265
    def store_display_value(self, data, field_id, raise_on_error=False):
2265 2266
        value = data.get(field_id)
wcs/forms/root.py
410 410
            prefilled = False
411 411
            locked = False
412 412

  
413
            if field.prefill and field.prefill.get('type') == 'none':
414
                field.prefill = {}
415

  
413 416
            if field.prefill:
414 417
                prefill_user = get_request().user
415 418
                if get_request().is_in_backoffice():
416
-