From eb8d7f2f8a668ad04f4458e3cb8f3be6bfe6a207 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 23 Jan 2020 10:22:58 +0100 Subject: [PATCH 7/7] second test --- tests/test_backoffice_pages.py | 128 +++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) diff --git a/tests/test_backoffice_pages.py b/tests/test_backoffice_pages.py index 67f5c1ed..1d3307a5 100644 --- a/tests/test_backoffice_pages.py +++ b/tests/test_backoffice_pages.py @@ -44,6 +44,7 @@ from wcs.wf.wscall import WebserviceCallStatusItem from wcs.wf.redirect_to_url import RedirectToUrlWorkflowStatusItem from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem from wcs.wf.resubmit import ResubmitWorkflowStatusItem +from wcs.wf.create_formdata import CreateFormdataWorkflowStatusItem, Mapping from wcs.carddef import CardDef from wcs.categories import Category from wcs.formdef import FormDef @@ -5532,3 +5533,130 @@ def test_studio_card_item_link(pub, studio): resp = app.get('/backoffice/data/bar/1/') with pytest.raises(IndexError): resp.click('card plop') + + +@pytest.fixture +def create_formdata(pub): + pub2 = pub + + class Fixture: + pub = pub2 + admin = create_user(pub2, is_admin=True) + source_formdef = FormDef() + source_formdef.name = 'source form' + source_formdef.workflow_roles = {'_receiver': 1} + 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.workflow_roles = {'_receiver': 1} + target_formdef.backoffice_submission_roles = admin.roles[:] + 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 = ['_receiver'] + 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.keep_user = True + create_formdata.backoffice_submission = True + 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_backoffice_create_formdata_backoffice_submission(create_formdata): + create_formdata.source_formdef.data_class().wipe() + create_formdata.target_formdef.data_class().wipe() + + # create submitting user + user = create_formdata.pub.user_class() + user.name = 'Jean Darmette' + user.email = 'jean.darmette@triffouilis.fr' + user.store() + + # create source formdata + formdata = create_formdata.source_formdef.data_class()() + upload = PicklableUpload('/foo/bar', content_type='text/plain') + upload.receive([b'hello world']) + formdata.data = { + '0': 'coucou', + '1': upload, + } + formdata.user = user + formdata.just_created() + formdata.store() + formdata.perform_workflow() + + # agent login and go to backoffice management pages + app = get_app(create_formdata.pub) + app = login(app) + resp = app.get(create_formdata.source_formdef.get_url(backoffice=True)) + + # lick on first available formdata + resp = resp.click(href='%s/' % formdata.id) + target_data_class = create_formdata.target_formdef.data_class() + assert target_data_class.count() == 0 + # resubmit it through backoffice submission + resp = resp.form.submit(name='button_resubmit') + assert target_data_class.count() == 1 + target_formdata = target_data_class.select()[0] + + assert target_formdata.submission_context == { + 'agent_id': str(create_formdata.admin.id), + 'orig_formdata_id': '1', + 'orig_formdef_id': '1' + } + assert target_formdata.user.id == user.id + assert target_formdata.status == 'draft' + assert resp.location == 'http://example.net/backoffice/submission/target-form/%s' % target_formdata.id + resp = resp.follow() + # second redirect with magic-token + resp = resp.follow() + resp = resp.form.submit(name='submit') # -> validation + resp = resp.form.submit(name='submit') # -> submission + target_formdata = target_data_class.get(id=target_formdata.id) + assert target_formdata.user.id == user.id + assert target_formdata.status == 'wf-new' + resp = resp.follow() + pq = resp.pyquery.remove_namespaces() + assert pq('.field-type-string .value').text() == 'coucou' + assert pq('.field-type-file .value').text() == 'bar' -- 2.24.0