Projet

Général

Profil

0007-second-test.patch

Benjamin Dauvergne, 23 janvier 2020 10:55

Télécharger (5,7 ko)

Voir les différences:

Subject: [PATCH 7/7] second test

 tests/test_backoffice_pages.py | 128 +++++++++++++++++++++++++++++++++
 1 file changed, 128 insertions(+)
tests/test_backoffice_pages.py
44 44
from wcs.wf.redirect_to_url import RedirectToUrlWorkflowStatusItem
45 45
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
46 46
from wcs.wf.resubmit import ResubmitWorkflowStatusItem
47
from wcs.wf.create_formdata import CreateFormdataWorkflowStatusItem, Mapping
47 48
from wcs.carddef import CardDef
48 49
from wcs.categories import Category
49 50
from wcs.formdef import FormDef
......
5532 5533
    resp = app.get('/backoffice/data/bar/1/')
5533 5534
    with pytest.raises(IndexError):
5534 5535
        resp.click('card plop')
5536

  
5537

  
5538
@pytest.fixture
5539
def create_formdata(pub):
5540
    pub2 = pub
5541

  
5542
    class Fixture:
5543
        pub = pub2
5544
        admin = create_user(pub2, is_admin=True)
5545
        source_formdef = FormDef()
5546
        source_formdef.name = 'source form'
5547
        source_formdef.workflow_roles = {'_receiver': 1}
5548
        source_formdef.fields = [
5549
            fields.StringField(id='0', label='string', varname='toto_string'),
5550
            fields.FileField(id='1', label='file', type='file', varname='toto_file'),
5551
        ]
5552
        source_formdef.store()
5553

  
5554
        target_formdef = FormDef()
5555
        target_formdef.name = 'target form'
5556
        target_formdef.workflow_roles = {'_receiver': 1}
5557
        target_formdef.backoffice_submission_roles = admin.roles[:]
5558
        target_formdef.fields = [
5559
            fields.StringField(id='0', label='string', varname='foo_string'),
5560
            fields.FileField(id='1', label='file', type='file', varname='foo_file'),
5561
        ]
5562
        target_formdef.store()
5563
        wf = Workflow(name='create-formdata')
5564

  
5565
        st1 = wf.add_status('New')
5566
        st2 = wf.add_status('Resubmit')
5567

  
5568
        jump = ChoiceWorkflowStatusItem()
5569
        jump.id = '_resubmit'
5570
        jump.label = 'Resubmit'
5571
        jump.by = ['_receiver']
5572
        jump.status = st2.id
5573
        jump.parent = st1
5574
        st1.items.append(jump)
5575

  
5576
        create_formdata = CreateFormdataWorkflowStatusItem()
5577
        create_formdata.id = '_create_formdata'
5578
        create_formdata.formdef_slug = target_formdef.url_name
5579
        create_formdata.keep_user = True
5580
        create_formdata.backoffice_submission = True
5581
        create_formdata.mappings = [
5582
            Mapping(varname='foo_string', expression='=form_var_toto_string'),
5583
            Mapping(varname='foo_file', expression='=form_var_toto_file_raw'),
5584
        ]
5585
        create_formdata.parent = st2
5586
        st2.items.append(create_formdata)
5587

  
5588
        redirect = RedirectToUrlWorkflowStatusItem()
5589
        redirect.id = '_redirect'
5590
        redirect.url = '{{ linked.url }}'
5591
        redirect.parent = st2
5592
        st2.items.append(redirect)
5593

  
5594
        jump = JumpOnSubmitWorkflowStatusItem()
5595
        jump.id = '_jump'
5596
        jump.status = st1.id
5597
        jump.parent = st2
5598
        st2.items.append(jump)
5599

  
5600
        wf.store()
5601
        source_formdef.workflow_id = wf.id
5602
        source_formdef.store()
5603
    return Fixture
5604

  
5605

  
5606
def test_backoffice_create_formdata_backoffice_submission(create_formdata):
5607
    create_formdata.source_formdef.data_class().wipe()
5608
    create_formdata.target_formdef.data_class().wipe()
5609

  
5610
    # create submitting user
5611
    user = create_formdata.pub.user_class()
5612
    user.name = 'Jean Darmette'
5613
    user.email = 'jean.darmette@triffouilis.fr'
5614
    user.store()
5615

  
5616
    # create source formdata
5617
    formdata = create_formdata.source_formdef.data_class()()
5618
    upload = PicklableUpload('/foo/bar', content_type='text/plain')
5619
    upload.receive([b'hello world'])
5620
    formdata.data = {
5621
        '0': 'coucou',
5622
        '1': upload,
5623
    }
5624
    formdata.user = user
5625
    formdata.just_created()
5626
    formdata.store()
5627
    formdata.perform_workflow()
5628

  
5629
    # agent login and go to backoffice management pages
5630
    app = get_app(create_formdata.pub)
5631
    app = login(app)
5632
    resp = app.get(create_formdata.source_formdef.get_url(backoffice=True))
5633

  
5634
    # lick on first available formdata
5635
    resp = resp.click(href='%s/' % formdata.id)
5636
    target_data_class = create_formdata.target_formdef.data_class()
5637
    assert target_data_class.count() == 0
5638
    # resubmit it through backoffice submission
5639
    resp = resp.form.submit(name='button_resubmit')
5640
    assert target_data_class.count() == 1
5641
    target_formdata = target_data_class.select()[0]
5642

  
5643
    assert target_formdata.submission_context == {
5644
        'agent_id': str(create_formdata.admin.id),
5645
        'orig_formdata_id': '1',
5646
        'orig_formdef_id': '1'
5647
    }
5648
    assert target_formdata.user.id == user.id
5649
    assert target_formdata.status == 'draft'
5650
    assert resp.location == 'http://example.net/backoffice/submission/target-form/%s' % target_formdata.id
5651
    resp = resp.follow()
5652
    # second redirect with magic-token
5653
    resp = resp.follow()
5654
    resp = resp.form.submit(name='submit')  # -> validation
5655
    resp = resp.form.submit(name='submit')  # -> submission
5656
    target_formdata = target_data_class.get(id=target_formdata.id)
5657
    assert target_formdata.user.id == user.id
5658
    assert target_formdata.status == 'wf-new'
5659
    resp = resp.follow()
5660
    pq = resp.pyquery.remove_namespaces()
5661
    assert pq('.field-type-string .value').text() == 'coucou'
5662
    assert pq('.field-type-file .value').text() == 'bar'
5535
-