Projet

Général

Profil

0001-misc-do-not-crash-on-invalid-file-value-in-workflow-.patch

Frédéric Péters, 16 octobre 2021 14:39

Télécharger (2,89 ko)

Voir les différences:

Subject: [PATCH] misc: do not crash on invalid file value in workflow
 variables (#57720)

 tests/admin_pages/test_form.py | 39 ++++++++++++++++++++++++++++++++++
 wcs/qommon/form.py             | 11 +++++-----
 2 files changed, 45 insertions(+), 5 deletions(-)
tests/admin_pages/test_form.py
870 870
    assert resp.form['f2'].value == 'foobar'
871 871

  
872 872

  
873
def test_form_workflow_invalid_file_variable(pub):
874
    create_superuser(pub)
875
    create_role(pub)
876

  
877
    FormDef.wipe()
878
    Workflow.wipe()
879

  
880
    workflow = Workflow(name='Workflow One')
881
    from wcs.workflows import WorkflowVariablesFieldsFormDef
882

  
883
    workflow.variables_formdef = WorkflowVariablesFieldsFormDef(workflow=workflow)
884
    workflow.variables_formdef.fields = [
885
        fields.StringField(id='1', varname='test', label='Test', type='string')
886
    ]
887
    workflow.store()
888

  
889
    formdef = FormDef()
890
    formdef.name = 'form title'
891
    formdef.fields = []
892
    formdef.store()
893
    formdef.workflow_id = workflow.id
894
    formdef.store()
895

  
896
    app = login(get_app(pub))
897
    resp = app.get('/backoffice/forms/1/workflow-variables')
898
    resp.forms[0]['f1'] = 'foobar'
899
    resp = resp.forms[0].submit()
900

  
901
    # check the value has been correctly saved
902
    assert FormDef.get(formdef.id).workflow_options == {'test': 'foobar'}
903

  
904
    # modify option type
905
    workflow.variables_formdef.fields = [fields.FileField(id='1', varname='test', label='Test', type='file')]
906
    workflow.store()
907

  
908
    # do not crash when getting back
909
    resp = app.get('/backoffice/forms/1/workflow-variables')
910

  
911

  
873 912
def test_form_roles(pub):
874 913
    create_superuser(pub)
875 914
    role = create_role(pub)
wcs/qommon/form.py
771 771
                    )
772 772
                self.get_widget('token').set_value(self.value.token)
773 773
        except Exception as e:
774
            get_publisher().record_error(
775
                _('Failed to set value on field "%s"') % self.field.label,
776
                formdef=getattr(self, 'formdef', None),
777
                exception=e,
778
            )
774
            if getattr(self, 'field', None):
775
                get_publisher().record_error(
776
                    _('Failed to set value on field "%s"') % self.field.label,
777
                    formdef=getattr(self, 'formdef', None),
778
                    exception=e,
779
                )
779 780
            self.value = None
780 781

  
781 782
    def add_media(self):
782
-