Projet

Général

Profil

0005-add-first-test.patch

Benjamin Dauvergne, 23 janvier 2020 10:25

Télécharger (5,04 ko)

Voir les différences:

Subject: [PATCH 5/7] add first test

 tests/test_form_pages.py | 97 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 97 insertions(+)
tests/test_form_pages.py
42 42
from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef
43 43
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
44 44
from wcs.wf.resubmit import ResubmitWorkflowStatusItem
45
from wcs.wf.create_formdata import CreateFormdataWorkflowStatusItem, Mapping
46
from wcs.wf.redirect_to_url import RedirectToUrlWorkflowStatusItem
45 47
from wcs.categories import Category
46 48
from wcs.roles import Role, logged_users_role
47 49
from wcs.tracking_code import TrackingCode
......
7339 7341
    resp.forms[0]['f1'] = '2'
7340 7342
    resp = resp.forms[0].submit('submit')
7341 7343
    assert 'style="display: none"' in comment.search(resp.forms[0].text).group(0)
7344

  
7345

  
7346
@pytest.fixture
7347
def create_formdata(pub):
7348
    class Fixture:
7349
        pub = pub
7350
        source_formdef = FormDef()
7351
        source_formdef.name = 'source form'
7352
        source_formdef.fields = [
7353
            fields.StringField(id='0', label='string', varname='toto_string'),
7354
            fields.FileField(id='1', label='file', type='file', varname='toto_file'),
7355
        ]
7356
        source_formdef.store()
7357

  
7358
        target_formdef = FormDef()
7359
        target_formdef.name = 'target form'
7360
        target_formdef.enable_tracking_codes = True
7361
        target_formdef.fields = [
7362
            fields.StringField(id='0', label='string', varname='foo_string'),
7363
            fields.FileField(id='1', label='file', type='file', varname='foo_file'),
7364
        ]
7365
        target_formdef.store()
7366
        wf = Workflow(name='create-formdata')
7367

  
7368
        st1 = wf.add_status('New')
7369
        st2 = wf.add_status('Resubmit')
7370

  
7371
        jump = ChoiceWorkflowStatusItem()
7372
        jump.id = '_resubmit'
7373
        jump.label = 'Resubmit'
7374
        jump.by = ['_submitter']
7375
        jump.status = st2.id
7376
        jump.parent = st1
7377
        st1.items.append(jump)
7378

  
7379
        create_formdata = CreateFormdataWorkflowStatusItem()
7380
        create_formdata.id = '_create_formdata'
7381
        create_formdata.formdef_slug = target_formdef.url_name
7382
        create_formdata.mappings = [
7383
            Mapping(varname='foo_string', expression='=form_var_toto_string'),
7384
            Mapping(varname='foo_file', expression='=form_var_toto_file_raw'),
7385
        ]
7386
        create_formdata.parent = st2
7387
        st2.items.append(create_formdata)
7388

  
7389
        redirect = RedirectToUrlWorkflowStatusItem()
7390
        redirect.id = '_redirect'
7391
        redirect.url = '{{ linked.url }}'
7392
        redirect.parent = st2
7393
        st2.items.append(redirect)
7394

  
7395
        jump = JumpOnSubmitWorkflowStatusItem()
7396
        jump.id = '_jump'
7397
        jump.status = st1.id
7398
        jump.parent = st2
7399
        st2.items.append(jump)
7400

  
7401
        wf.store()
7402
        source_formdef.workflow_id = wf.id
7403
        source_formdef.store()
7404
    return Fixture
7405

  
7406

  
7407
def test_create_formdata_anonymous(create_formdata):
7408
    create_formdata.source_formdef.data_class().wipe()
7409
    create_formdata.target_formdef.data_class().wipe()
7410

  
7411
    app = get_app(create_formdata.pub)
7412
    resp = app.get('/source-form/')
7413
    resp.form['f0'] = 'zob'
7414
    resp.form['f1$file'] = Upload('test.txt', b'foobar', 'text/plain')
7415
    resp = resp.form.submit('submit')  # -> validation
7416
    resp = resp.form.submit('submit')  # -> submission
7417
    resp = resp.follow()
7418
    assert create_formdata.target_formdef.data_class().count() == 0
7419
    resp = resp.form.submit('button_resubmit')
7420
    assert create_formdata.target_formdef.data_class().count() == 1
7421
    assert create_formdata.target_formdef.data_class().select()[0].data.get('0') == 'zob'
7422

  
7423
    assert create_formdata.target_formdef.data_class().select()[0].data.get('1').get_content() == b'foobar'
7424
    assert create_formdata.target_formdef.data_class().select()[0].status == 'draft'
7425
    assert create_formdata.target_formdef.data_class().select()[0].submission_context == {
7426
        'orig_formdata_id': create_formdata.source_formdef.data_class().select()[0].id,
7427
        'orig_formdef_id': create_formdata.source_formdef.id,
7428
    }
7429

  
7430
    resp = resp.follow()
7431
    resp = resp.follow()
7432
    assert 'zob' in resp
7433
    resp = resp.forms[1].submit('submit')  # -> validation
7434
    resp = resp.forms[1].submit('submit')  # -> submission
7435
    assert create_formdata.target_formdef.data_class().count() == 1
7436
    assert create_formdata.target_formdef.data_class().select()[0].data.get('1').get_content() == b'foobar'
7437
    assert create_formdata.target_formdef.data_class().select()[0].data.get('1').get_content() == b'foobar'
7438
    assert create_formdata.target_formdef.data_class().select()[0].status == 'wf-new'
7342
-