Projet

Général

Profil

0001-forms-only-alter-request.form-in-POST-requests-29788.patch

Frédéric Péters, 15 janvier 2019 21:26

Télécharger (5,12 ko)

Voir les différences:

Subject: [PATCH] forms: only alter request.form in POST requests (#29788)

 tests/test_admin_pages.py | 46 +++++++++++++++++++++++++++++++++++++++
 tests/test_widgets.py     |  1 -
 wcs/qommon/form.py        | 16 +++++++++-----
 3 files changed, 56 insertions(+), 7 deletions(-)
tests/test_admin_pages.py
705 705
    resp = resp.form.submit()
706 706
    assert time.strftime('%d %m %y', FormDef.get(formdef.id).workflow_options.get('test2')) == '17 06 16'
707 707

  
708
def test_form_workflow_table_variables(pub):
709
    create_superuser(pub)
710
    create_role()
711

  
712
    Workflow.wipe()
713
    workflow = Workflow(name='Workflow One')
714
    from wcs.workflows import WorkflowVariablesFieldsFormDef
715
    workflow.variables_formdef = WorkflowVariablesFieldsFormDef(workflow=workflow)
716
    workflow.variables_formdef.fields.append(
717
            fields.TableRowsField(id='1', varname='test', label='Test2',
718
                type='tablerows', columns=['a']))
719
    workflow.variables_formdef.fields.append(
720
            fields.StringField(id='2', varname='test2', label='Test', type='string'))
721
    workflow.store()
722

  
723
    FormDef.wipe()
724
    formdef = FormDef()
725
    formdef.name = 'form title'
726
    formdef.fields = []
727
    formdef.workflow_id = workflow.id
728
    formdef.store()
729

  
730
    app = login(get_app(pub))
731
    resp = app.get('/backoffice/forms/1/')
732
    assert '"workflow-variables"' in resp.body
733

  
734
    # visit the variables page
735
    resp = resp.click(href='workflow-variables')
736

  
737
    # and set a value
738
    resp.form['f1$element0$col0'] = 'foobar'
739
    resp.form['f2'] = 'foobar'
740
    resp = resp.form.submit('submit')
741
    assert resp.location == 'http://example.net/backoffice/forms/1/'
742

  
743
    # check the value has been correctly saved
744
    assert FormDef.get(formdef.id).workflow_options == {
745
            'test': [['foobar']],
746
            'test2': 'foobar'}
747

  
748
    # go back to the variables page, also check value
749
    resp = resp.follow()
750
    resp = resp.click(href='workflow-variables')
751
    assert resp.form['f1$element0$col0'].value == 'foobar'
752
    assert resp.form['f2'].value == 'foobar'
753

  
708 754
def test_form_roles(pub):
709 755
    create_superuser(pub)
710 756
    role = create_role()
tests/test_widgets.py
140 140
    widget.set_value([(str(x), None, None) for x in range(10)])
141 141
    form = MockHtmlForm(widget)
142 142
    for row in range(10):
143
        assert req.form['test$element%d$col%d' % (row, 0)] == str(row)
144 143
        for col in range(3):
145 144
            assert 'test$element%d$col%d' % (row, col) in form.as_html
146 145
    assert not 'test$element%d$col%d' % (10, 0) in form.as_html
wcs/qommon/form.py
1408 1408
                widget = self.add_widget(kwargs, i, j)
1409 1409
                widget = self.get_widget('c-%s-%s' % (i, j))
1410 1410
                if value and self.readonly:
1411
                    if not get_request().form:
1412
                        get_request().form = {}
1413
                    get_request().form[widget.name] = value[i][j]
1411
                    if get_request().get_method() == 'POST':
1412
                        if not get_request().form:
1413
                            get_request().form = {}
1414
                        get_request().form[widget.name] = value[i][j]
1414 1415
                    widget.set_value(value[i][j])
1415 1416

  
1416 1417
    def add_widget(self, kwargs, i, j):
......
1655 1656
                widget = widget_row.get_widget('col%s'%j)
1656 1657
                try:
1657 1658
                    widget.set_value(value[i][j])
1658
                    if not get_request().form.get(widget.get_name()):
1659
                        get_request().form[widget.get_name()] = value[i][j]
1659
                    if get_request().get_method() == 'POST':
1660
                        if not get_request().form.get(widget.get_name()):
1661
                            get_request().form[widget.get_name()] = value[i][j]
1660 1662
                except IndexError:
1661 1663
                    pass
1662 1664

  
......
2180 2182
        CompositeWidget.__init__(self, name, value, **kwargs)
2181 2183
        self.add(HiddenWidget, 'latlng', value=value)
2182 2184
        widget = self.get_widget('latlng')
2183
        if value and get_request().form and not get_request().form.get(widget.name):
2185
        if (value and get_request().get_method() == 'POST' and
2186
                      get_request().form and
2187
                      not get_request().form.get(widget.name)):
2184 2188
            get_request().form[widget.name] = value
2185 2189
        self.readonly = kwargs.pop('readonly', False)
2186 2190
        self.map_attributes = {}
2187
-