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': 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 |
|
-
|