From 3882e10b416ea1f69b01f5cc80a56dc064bbd329 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 27 Nov 2019 23:57:33 +0100 Subject: [PATCH 06/10] add first test --- tests/test_form_pages.py | 100 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 5360f8aa..d09da69c 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -42,6 +42,8 @@ from wcs.wf.attachment import AddAttachmentWorkflowStatusItem from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem from wcs.wf.resubmit import ResubmitWorkflowStatusItem +from wcs.wf.create_formdata import CreateFormdataWorkflowStatusItem, Mapping +from wcs.wf.redirect_to_url import RedirectToUrlWorkflowStatusItem from wcs.categories import Category from wcs.roles import Role, logged_users_role from wcs.tracking_code import TrackingCode @@ -7339,3 +7341,101 @@ def test_form_comment_is_hidden_attribute(pub): resp.forms[0]['f1'] = '2' resp = resp.forms[0].submit('submit') assert 'style="display: none"' in comment.search(resp.forms[0].text).group(0) + + +@pytest.fixture +def create_formdata(pub): + class Fixture: + pub = pub + + FormDef.wipe() + + source_formdef = FormDef() + source_formdef.name = 'source form' + source_formdef.fields = [ + fields.StringField(id='0', label='string', varname='toto_string'), + fields.FileField(id='1', label='file', type='file', varname='toto_file'), + ] + source_formdef.store() + + target_formdef = FormDef() + target_formdef.name = 'target form' + target_formdef.enable_tracking_codes = True + target_formdef.fields = [ + fields.StringField(id='0', label='string', varname='foo_string'), + fields.FileField(id='1', label='file', type='file', varname='foo_file'), + ] + target_formdef.store() + wf = Workflow(name='create-formdata') + + st1 = wf.add_status('New') + st2 = wf.add_status('Resubmit') + + jump = ChoiceWorkflowStatusItem() + jump.id = '_resubmit' + jump.label = 'Resubmit' + jump.by = ['_submitter'] + jump.status = st2.id + jump.parent = st1 + st1.items.append(jump) + + create_formdata = CreateFormdataWorkflowStatusItem() + create_formdata.id = '_create_formdata' + create_formdata.formdef_slug = target_formdef.url_name + create_formdata.mappings = [ + Mapping(varname='foo_string', expression='=form_var_toto_string'), + Mapping(varname='foo_file', expression='=form_var_toto_file_raw'), + ] + create_formdata.parent = st2 + st2.items.append(create_formdata) + + redirect = RedirectToUrlWorkflowStatusItem() + redirect.id = '_redirect' + redirect.url = '{{ linked.url }}' + redirect.parent = st2 + st2.items.append(redirect) + + jump = JumpOnSubmitWorkflowStatusItem() + jump.id = '_jump' + jump.status = st1.id + jump.parent = st2 + st2.items.append(jump) + + wf.store() + source_formdef.workflow_id = wf.id + source_formdef.store() + return Fixture + + +def test_create_formdata_anonymous(create_formdata): + create_formdata.source_formdef.data_class().wipe() + create_formdata.target_formdef.data_class().wipe() + + app = get_app(create_formdata.pub) + resp = app.get('/source-form/') + resp.form['f0'] = 'zob' + resp.form['f1$file'] = Upload('test.txt', b'foobar', 'text/plain') + resp = resp.form.submit('submit') # -> validation + resp = resp.form.submit('submit') # -> submission + resp = resp.follow() + assert create_formdata.target_formdef.data_class().count() == 0 + resp = resp.form.submit('button_resubmit') + assert create_formdata.target_formdef.data_class().count() == 1 + assert create_formdata.target_formdef.data_class().select()[0].data.get('0') == 'zob' + + assert create_formdata.target_formdef.data_class().select()[0].data.get('1').get_content() == b'foobar' + assert create_formdata.target_formdef.data_class().select()[0].status == 'draft' + assert create_formdata.target_formdef.data_class().select()[0].submission_context == { + 'orig_formdata_id': str(create_formdata.source_formdef.data_class().select()[0].id), + 'orig_formdef_id': str(create_formdata.source_formdef.id), + } + + resp = resp.follow() + resp = resp.follow() + assert 'zob' in resp + resp = resp.forms[1].submit('submit') # -> validation + resp = resp.forms[1].submit('submit') # -> submission + assert create_formdata.target_formdef.data_class().count() == 1 + assert create_formdata.target_formdef.data_class().select()[0].data.get('1').get_content() == b'foobar' + assert create_formdata.target_formdef.data_class().select()[0].data.get('1').get_content() == b'foobar' + assert create_formdata.target_formdef.data_class().select()[0].status == 'wf-new' -- 2.24.0