Projet

Général

Profil

0001-api-real-formdata-status-50294.patch

Lauréline Guérin, 02 février 2021 14:40

Télécharger (6,76 ko)

Voir les différences:

Subject: [PATCH] api: real formdata status (#50294)

 tests/test_api.py | 72 ++++++++++++++++++++++++++++++++++++++---------
 wcs/formdata.py   |  3 ++
 2 files changed, 62 insertions(+), 13 deletions(-)
tests/test_api.py
1275 1275
            data_source={'type': 'foobar'}),
1276 1276
        fields.BlockField(id='5', label='test', varname='blockdata', type='block:foobar', max_items=3),
1277 1277
    ]
1278
    workflow = Workflow.get_default_workflow()
1278
    Workflow.wipe()
1279
    workflow = Workflow(name='foo')
1280
    workflow.possible_status = Workflow.get_default_workflow().possible_status[:]
1279 1281
    workflow.roles['_foobar'] = 'Foobar'
1280
    workflow.id = '2'
1281 1282
    workflow.store()
1282 1283
    formdef.workflow_id = workflow.id
1283 1284
    formdef.workflow_roles = {'_receiver': role.id,
......
1331 1332
    assert resp.json['user']['name'] == local_user.name
1332 1333
    assert resp.json['fields']['foobar'] == 'foo@localhost'
1333 1334
    assert resp.json['fields']['date'] == '2014-01-20'
1334
    assert resp.json['fields']['file']['content'] == 'YmFzZTY0bWU=' # base64('base64me')
1335
    assert resp.json['fields']['file']['content'] == 'YmFzZTY0bWU='  # base64('base64me')
1335 1336
    assert resp.json['fields']['file']['filename'] == 'test.txt'
1336 1337
    assert resp.json['fields']['file']['content_type'] == 'text/plain'
1337 1338
    assert resp.json['fields']['item'] == 'foo'
......
1340 1341
    assert resp.json['fields']['blockdata'] == 'hello'
1341 1342
    assert resp.json['fields']['blockdata_raw'] == [{'foo': 'plop', 'bar': 'foo', 'bar_raw': '1', 'bar_structured': 'XXX'}]
1342 1343
    assert resp.json['workflow']['status']['name'] == 'New'
1344
    assert resp.json['workflow']['real_status']['name'] == 'New'
1343 1345
    assert resp.json['submission']['channel'] == 'web'
1344 1346
    assert resp.json['geolocations']['base']['lon'] == 10
1345 1347
    assert resp.json['geolocations']['base']['lat'] == -12
......
1354 1356
    resp2 = get_app(pub).get(sign_uri('/test/%s/' % formdata.id,
1355 1357
        user=local_user), status=403)
1356 1358

  
1359
    # check status visibility
1360
    workflow.add_status('Status1', 'st1')
1361
    workflow.possible_status[-1].visibility = ['unknown']
1362
    workflow.store()
1363
    formdata.jump_status('st1')
1364
    assert formdata.status == 'wf-st1'
1365

  
1366
    resp = get_app(pub).get(
1367
            sign_uri('/api/forms/test/%s/' % formdata.id, user=local_user),
1368
            status=200)
1369
    assert resp.json['workflow']['status'] == {'id': 'new', 'name': 'New'}
1370
    assert resp.json['workflow']['real_status'] == {'id': 'st1', 'name': 'Status1'}
1371

  
1357 1372

  
1358 1373
def test_formdata_backoffice_fields(pub, local_user):
1359 1374
    test_formdata(pub, local_user)
1360
    workflow = Workflow.get(2)
1375
    Workflow.wipe()
1376
    workflow = Workflow(name='foo')
1361 1377
    workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
1362 1378
    workflow.backoffice_fields_formdef.fields = [
1363 1379
        fields.StringField(id='bo1', label='1st backoffice field',
......
1440 1456

  
1441 1457

  
1442 1458
def test_formdata_edit(pub, local_user):
1443
    test_formdata(pub, local_user)
1444
    formdef = FormDef.select()[0]
1445
    formdata = formdef.data_class().select()[0]
1446
    workflow = formdef.workflow
1459
    Role.wipe()
1460
    role = Role(name='test')
1461
    role.id = '123'
1462
    role.store()
1463
    another_role = Role(name='another')
1464
    another_role.id = '321'
1465
    another_role.store()
1466
    local_user.roles = [role.id]
1467
    local_user.store()
1468
    FormDef.wipe()
1469
    formdef = FormDef()
1470
    formdef.name = 'test'
1471
    formdef.fields = [
1472
        fields.StringField(id='0', label='foobar', varname='foobar'),
1473
    ]
1474
    Workflow.wipe()
1475
    workflow = Workflow(name='foo')
1476
    workflow.possible_status = Workflow.get_default_workflow().possible_status[:]
1477
    workflow.roles['_foobar'] = 'Foobar'
1478
    workflow.store()
1479
    formdef.workflow_id = workflow.id
1480
    formdef.workflow_roles = {'_receiver': role.id,
1481
                              '_foobar': another_role.id}
1482
    formdef.store()
1483
    formdef.data_class().wipe()
1484
    formdata = formdef.data_class()()
1485
    formdata.data = {
1486
        '0': 'foo@localhost',
1487
    }
1488
    formdata.user_id = local_user.id
1489
    formdata.just_created()
1490
    formdata.status = 'wf-new'
1491
    formdata.evolution[-1].status = 'wf-new'
1492
    formdata.store()
1447 1493

  
1448 1494
    # not user
1449
    resp = get_app(pub).post_json(
1495
    get_app(pub).post_json(
1450 1496
            sign_uri('/api/forms/test/%s/' % formdata.id),
1451 1497
            {'data': {'0': 'bar@localhost'}},
1452 1498
            status=403)
1453 1499

  
1454 1500
    # no editable action
1455
    resp = get_app(pub).post_json(
1501
    get_app(pub).post_json(
1456 1502
            sign_uri('/api/forms/test/%s/' % formdata.id, user=local_user),
1457 1503
            {'data': {'0': 'bar@localhost'}},
1458 1504
            status=403)
......
1464 1510
    wfedit.parent = workflow.possible_status[1]
1465 1511
    workflow.store()
1466 1512

  
1467
    resp = get_app(pub).post_json(
1513
    get_app(pub).post_json(
1468 1514
            sign_uri('/api/forms/test/%s/' % formdata.id, user=local_user),
1469 1515
            {'data': {'0': 'bar@localhost'}},
1470 1516
            status=200)
......
1473 1519
    # not editable by user role
1474 1520
    wfedit.by = ['XX']
1475 1521
    workflow.store()
1476
    resp = get_app(pub).post_json(
1522
    get_app(pub).post_json(
1477 1523
            sign_uri('/api/forms/test/%s/' % formdata.id, user=local_user),
1478 1524
            {'data': {'0': 'bar@localhost'}},
1479 1525
            status=403)
......
1483 1529
    wfedit.by = [local_user.roles[0]]
1484 1530
    workflow.store()
1485 1531

  
1486
    resp = get_app(pub).post_json(
1532
    get_app(pub).post_json(
1487 1533
            sign_uri('/api/forms/test/%s/' % formdata.id, user=local_user),
1488 1534
            {'data': {'0': 'bar2@localhost'}},
1489 1535
            status=200)
wcs/formdata.py
1108 1108
        wf_status = self.get_visible_status(user)
1109 1109
        if wf_status:
1110 1110
            data['workflow']['status'] = {'id': wf_status.id, 'name': wf_status.name}
1111
        wf_real_status = self.get_status()
1112
        if wf_real_status:
1113
            data['workflow']['real_status'] = {'id': wf_real_status.id, 'name': wf_real_status.name}
1111 1114
        # Workflow data have unknown purpose, do not store them in anonymised export
1112 1115
        if self.workflow_data and not anonymise:
1113 1116
            data['workflow']['data'] = self.workflow_data
1114
-