Projet

Général

Profil

0001-api-expose-_structured-field-variants-in-json-output.patch

Frédéric Péters, 02 novembre 2015 19:14

Télécharger (4,16 ko)

Voir les différences:

Subject: [PATCH] api: expose _structured field variants in json output (#8844)

 tests/test_api.py | 34 +++++++++++++++++++++++++++++++---
 wcs/formdata.py   |  3 +++
 2 files changed, 34 insertions(+), 3 deletions(-)
tests/test_api.py
15 15
from wcs.roles import Role
16 16
from wcs.formdef import FormDef
17 17
from wcs.categories import Category
18
from wcs.data_sources import NamedDataSource
18 19
from wcs import fields
19 20
from wcs.api import sign_url
20 21

  
......
391 392

  
392 393

  
393 394
def test_formdata(local_user):
395
    NamedDataSource.wipe()
396
    data_source = NamedDataSource(name='foobar')
397
    data_source.data_source = {'type': 'formula',
398
            'value': repr(
399
                [{'id': '1', 'text': 'foo', 'more': 'XXX'},
400
                 {'id': '2', 'text': 'bar', 'more': 'YYY'}])}
401
    data_source.store()
402

  
394 403
    Role.wipe()
395 404
    role = Role(name='test')
396 405
    role.store()
......
401 410
        fields.StringField(id='0', label='foobar', varname='foobar'),
402 411
        fields.StringField(id='1', label='foobar2'),
403 412
        fields.DateField(id='2', label='foobar3', varname='date'),
404
        fields.FileField(id='3', label='foobar4', varname='file'),]
413
        fields.FileField(id='3', label='foobar4', varname='file'),
414
        fields.ItemField(id='4', label='foobar5', varname='item',
415
            data_source={'type': 'foobar'}),
416
    ]
405 417
    formdef.workflow_roles = {'_receiver': role.id}
406 418
    formdef.store()
419
    item_field = formdef.fields[4]
407 420

  
408 421
    formdata = formdef.data_class()()
409 422
    date = time.strptime('2014-01-20', '%Y-%m-%d')
410 423
    upload = PicklableUpload('test.txt', 'text/plain', 'ascii')
411 424
    upload.receive(['base64me'])
412
    formdata.data = {'0': 'foo@localhost', '1': 'xxx', '2': date, '3': upload}
425
    formdata.data = {
426
        '0': 'foo@localhost',
427
        '1': 'xxx',
428
        '2': date,
429
        '3': upload,
430
        '4': '1',
431
    }
432
    formdata.data['4_display'] = item_field.store_display_value(
433
            formdata.data, item_field.id)
434
    formdata.data['4_structured'] = item_field.store_structured_value(
435
            formdata.data, item_field.id)
413 436
    formdata.user_id = local_user.id
414 437
    formdata.just_created()
415 438
    formdata.store()
......
427 450
    resp2 = get_app(pub).get(sign_uri('/test/%s/' % formdata.id, user=local_user))
428 451
    assert resp.json == resp2.json
429 452
    assert 'last_update_time' in resp.json
430
    assert len(resp.json['fields']) == 3 # foobar2 has no varname, not in json
453
    assert len(resp.json['fields']) == 6
454
    assert 'foobar' in resp.json['fields']
455
    assert 'foobar2' not in resp.json['fields']  # foobar2 has no varname, not in json
431 456
    assert resp.json['user']['name'] == local_user.name
432 457
    assert resp.json['fields']['foobar'] == 'foo@localhost'
433 458
    assert resp.json['fields']['date'] == '2014-01-20'
434 459
    assert resp.json['fields']['file']['content'] == 'YmFzZTY0bWU=' # base64('base64me')
435 460
    assert resp.json['fields']['file']['filename'] == 'test.txt'
436 461
    assert resp.json['fields']['file']['content_type'] == 'text/plain'
462
    assert resp.json['fields']['item'] == 'foo'
463
    assert resp.json['fields']['item_raw'] == '1'
464
    assert resp.json['fields']['item_structured'] == {'id': '1', 'text': 'foo', 'more': 'XXX'}
437 465

  
438 466
def test_user_forms(local_user):
439 467
    FormDef.wipe()
wcs/formdata.py
107 107
            new_data[field.varname] = data.get('%s_display' % field.id)
108 108
        else:
109 109
            new_data[field.varname] = value
110
        if field.store_structured_value:
111
            if data.get('%s_structured' % field.id):
112
                new_data[field.varname + '_structured'] = data.get('%s_structured' % field.id)
110 113
    return new_data
111 114

  
112 115

  
113
-