Projet

Général

Profil

0001-backoffice-account-for-selected-user-in-live-endpoin.patch

Frédéric Péters, 26 janvier 2021 14:54

Télécharger (3,62 ko)

Voir les différences:

Subject: [PATCH] backoffice: account for selected user in /live endpoint
 (#50533)

 tests/backoffice_pages/test_submission.py | 51 +++++++++++++++++++++++
 wcs/backoffice/submission.py              |  3 ++
 2 files changed, 54 insertions(+)
tests/backoffice_pages/test_submission.py
1407 1407
    resp = resp.form.submit('submit')  # -> validation page
1408 1408
    assert 'Check values then click submit.' in resp
1409 1409
    assert '<p>%s</p>' % random_user.name in resp
1410

  
1411

  
1412
def test_backoffice_submission_user_selection_then_live(pub):
1413
    user = create_user(pub)
1414

  
1415
    for i in range(10):
1416
        random_user = pub.user_class()
1417
        random_user.name = 'random user %s' % i
1418
        random_user.email = 'test%s@invalid' % i
1419
        random_user.store()
1420

  
1421
    FormDef.wipe()
1422
    formdef = FormDef()
1423
    formdef.name = 'form title'
1424
    formdef.fields = [
1425
        fields.PageField(id='0', label='1st page', type='page'),
1426
        fields.StringField(id='1', label='Field on 1st page', type='string'),
1427
        fields.PageField(id='2', label='2nd page', type='page'),
1428
        fields.StringField(id='3', label='Field on 2nd page', type='string',
1429
            varname='plop',
1430
            prefill={'type': 'user', 'value': 'email'}),
1431
        fields.StringField(id='4', label='2nd field on 2nd page', type='string',
1432
            prefill={'type': 'string', 'value': '{{form_user_email}}', 'locked': True}),
1433
        fields.StringField(id='5', label='field with condition', type='string',
1434
            condition={'type': 'django', 'value': 'form_var_plop == "bye"'}),
1435
    ]
1436
    formdef.backoffice_submission_roles = user.roles[:]
1437
    formdef.workflow_roles = {'_receiver': 1}
1438
    formdef.store()
1439

  
1440
    app = login(get_app(pub))
1441
    resp = app.get('/backoffice/submission/')
1442
    resp = resp.click(formdef.name)
1443

  
1444
    assert resp.form['submission_channel'].attrs['type'] == 'hidden'
1445
    assert resp.pyquery('.submit-user-selection')
1446
    resp.form['user_id'] = str(random_user.id)  # happens via javascript
1447
    resp.form['f1'] = 'test submission'
1448
    resp = resp.form.submit('submit')  # -> 2nd page
1449
    assert resp.form['f3'].value == random_user.email
1450
    assert resp.form['f4'].value == random_user.email
1451

  
1452
    live_url = resp.html.find('form').attrs['data-live-url']
1453
    live_resp = app.post(live_url, params=resp.form.submit_fields())
1454
    assert live_resp.json['result']['4']['content'] == random_user.email
1455

  
1456
    resp.form['f4'] = 'altered value'  # alter value
1457

  
1458
    resp = resp.form.submit('submit')  # -> validation page
1459
    assert 'Check values then click submit.' in resp
1460
    assert 'altered value' not in resp
wcs/backoffice/submission.py
144 144
        formdata = super().get_transient_formdata(magictoken=magictoken)
145 145
        if self.selected_user_id:
146 146
            formdata.user_id = self.selected_user_id
147
        elif 'user_id' in get_request().form:
148
            # when used via /live endpoint
149
            formdata.user_id = get_request().form['user_id']
147 150
        return formdata
148 151

  
149 152
    def html_top(self, *args, **kwargs):
150
-