Projet

Général

Profil

0007-second-test.patch

Benjamin Dauvergne, 23 janvier 2020 15:42

Télécharger (5,73 ko)

Voir les différences:

Subject: [PATCH 07/11] second test

 tests/test_backoffice_pages.py | 131 +++++++++++++++++++++++++++++++++
 1 file changed, 131 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

  
5546
        FormDef.wipe()
5547

  
5548
        source_formdef = FormDef()
5549
        source_formdef.name = 'source form'
5550
        source_formdef.workflow_roles = {'_receiver': 1}
5551
        source_formdef.fields = [
5552
            fields.StringField(id='0', label='string', varname='toto_string'),
5553
            fields.FileField(id='1', label='file', type='file', varname='toto_file'),
5554
        ]
5555
        source_formdef.store()
5556

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

  
5568
        st1 = wf.add_status('New')
5569
        st2 = wf.add_status('Resubmit')
5570

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

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

  
5591
        redirect = RedirectToUrlWorkflowStatusItem()
5592
        redirect.id = '_redirect'
5593
        redirect.url = '{{ linked.url }}'
5594
        redirect.parent = st2
5595
        st2.items.append(redirect)
5596

  
5597
        jump = JumpOnSubmitWorkflowStatusItem()
5598
        jump.id = '_jump'
5599
        jump.status = st1.id
5600
        jump.parent = st2
5601
        st2.items.append(jump)
5602

  
5603
        wf.store()
5604
        source_formdef.workflow_id = wf.id
5605
        source_formdef.store()
5606
    return Fixture
5607

  
5608

  
5609
def test_backoffice_create_formdata_backoffice_submission(create_formdata):
5610
    create_formdata.source_formdef.data_class().wipe()
5611
    create_formdata.target_formdef.data_class().wipe()
5612

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

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

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

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

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