3457 |
3457 |
assert formdata.data.get('1_display') is None
|
3458 |
3458 |
|
3459 |
3459 |
|
|
3460 |
def test_formdata_filtering_on_block_fields(pub):
|
|
3461 |
if not pub.is_using_postgresql():
|
|
3462 |
pytest.skip('this requires SQL')
|
|
3463 |
|
|
3464 |
NamedDataSource.wipe()
|
|
3465 |
data_source = NamedDataSource(name='foobar')
|
|
3466 |
data_source.data_source = {
|
|
3467 |
'type': 'formula',
|
|
3468 |
'value': repr([{'id': '1', 'text': 'foo'}, {'id': '2', 'text': 'bar'}]),
|
|
3469 |
}
|
|
3470 |
data_source.store()
|
|
3471 |
|
|
3472 |
BlockDef.wipe()
|
|
3473 |
block = BlockDef()
|
|
3474 |
block.name = 'foobar'
|
|
3475 |
block.fields = [
|
|
3476 |
fields.StringField(id='1', label='String', type='string', varname='string'),
|
|
3477 |
fields.ItemField(id='2', label='Item', type='item', data_source={'type': 'foobar'}, varname='item'),
|
|
3478 |
fields.BoolField(id='3', label='Bool', type='bool', varname='bool'),
|
|
3479 |
fields.DateField(id='4', label='Date', type='date', varname='date'),
|
|
3480 |
fields.EmailField(id='5', label='Email', type='email', varname='email'),
|
|
3481 |
]
|
|
3482 |
block.store()
|
|
3483 |
|
|
3484 |
FormDef.wipe()
|
|
3485 |
formdef = FormDef()
|
|
3486 |
formdef.name = 'test'
|
|
3487 |
formdef.fields = [
|
|
3488 |
fields.BlockField(id='0', label='Block Data', varname='blockdata', type='block:foobar', max_items=3),
|
|
3489 |
]
|
|
3490 |
formdef.store()
|
|
3491 |
|
|
3492 |
data_class = formdef.data_class()
|
|
3493 |
data_class.wipe()
|
|
3494 |
|
|
3495 |
for i in range(11):
|
|
3496 |
formdata = data_class()
|
|
3497 |
if i < 10: # None values for the last one
|
|
3498 |
formdata.data = {
|
|
3499 |
'0': {
|
|
3500 |
'data': [
|
|
3501 |
{
|
|
3502 |
'1': 'plop%s' % i,
|
|
3503 |
'2': '1' if i % 2 else '2',
|
|
3504 |
'2_display': 'foo' if i % 2 else 'bar',
|
|
3505 |
'2_structured': 'XXX' if i % 2 else 'YYY',
|
|
3506 |
'3': bool(i % 2),
|
|
3507 |
'4': '2021-06-%02d' % (i + 1),
|
|
3508 |
'5': 'a@localhost' if i % 2 else 'b@localhost',
|
|
3509 |
},
|
|
3510 |
],
|
|
3511 |
'schema': {}, # not important here
|
|
3512 |
},
|
|
3513 |
'0_display': 'hello',
|
|
3514 |
}
|
|
3515 |
if i == 0:
|
|
3516 |
formdata.data['0']['data'].append(
|
|
3517 |
{
|
|
3518 |
'1': 'plop%s' % (i + 1),
|
|
3519 |
'2': '1',
|
|
3520 |
'2_display': 'foo',
|
|
3521 |
'2_structured': 'XXX',
|
|
3522 |
'3': True,
|
|
3523 |
'4': '2021-06-02',
|
|
3524 |
'5': 'a@localhost',
|
|
3525 |
},
|
|
3526 |
)
|
|
3527 |
formdata.just_created()
|
|
3528 |
formdata.jump_status('new')
|
|
3529 |
formdata.store()
|
|
3530 |
|
|
3531 |
context = pub.substitutions.get_context_variables(mode='lazy')
|
|
3532 |
|
|
3533 |
# string
|
|
3534 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_string"|filter_value:"plop0"|count}}')
|
|
3535 |
assert tmpl.render(context) == '1'
|
|
3536 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_string"|filter_value:"plop1"|count}}')
|
|
3537 |
assert tmpl.render(context) == '2'
|
|
3538 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_string"|filter_value:"plop10"|count}}')
|
|
3539 |
assert tmpl.render(context) == '0'
|
|
3540 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_string"|exclude_value:"plop0"|count}}')
|
|
3541 |
assert tmpl.render(context) == '10'
|
|
3542 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_string"|exclude_value:"plop1"|count}}')
|
|
3543 |
assert tmpl.render(context) == '9'
|
|
3544 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_string"|exclude_value:"plop10"|count}}')
|
|
3545 |
assert tmpl.render(context) == '11'
|
|
3546 |
# item
|
|
3547 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_item"|filter_value:"1"|count}}')
|
|
3548 |
assert tmpl.render(context) == '6'
|
|
3549 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_item"|filter_value:"2"|count}}')
|
|
3550 |
assert tmpl.render(context) == '5'
|
|
3551 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_item"|filter_value:"3"|count}}')
|
|
3552 |
assert tmpl.render(context) == '0'
|
|
3553 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_item"|exclude_value:"1"|count}}')
|
|
3554 |
assert tmpl.render(context) == '5'
|
|
3555 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_item"|exclude_value:"2"|count}}')
|
|
3556 |
assert tmpl.render(context) == '6'
|
|
3557 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_item"|exclude_value:"3"|count}}')
|
|
3558 |
assert tmpl.render(context) == '11'
|
|
3559 |
# bool
|
|
3560 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_bool"|filter_value:"true"|count}}')
|
|
3561 |
assert tmpl.render(context) == '6'
|
|
3562 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_bool"|filter_value:"false"|count}}')
|
|
3563 |
assert tmpl.render(context) == '5'
|
|
3564 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_bool"|exclude_value:"true"|count}}')
|
|
3565 |
assert tmpl.render(context) == '5'
|
|
3566 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_bool"|exclude_value:"false"|count}}')
|
|
3567 |
assert tmpl.render(context) == '6'
|
|
3568 |
# date
|
|
3569 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_date"|filter_value:"2021-06-01"|count}}')
|
|
3570 |
assert tmpl.render(context) == '1'
|
|
3571 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_date"|filter_value:"2021-06-02"|count}}')
|
|
3572 |
assert tmpl.render(context) == '2'
|
|
3573 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_date"|exclude_value:"2021-06-01"|count}}')
|
|
3574 |
assert tmpl.render(context) == '10'
|
|
3575 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_date"|exclude_value:"2021-06-02"|count}}')
|
|
3576 |
assert tmpl.render(context) == '9'
|
|
3577 |
# email
|
|
3578 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_email"|filter_value:"a@localhost"|count}}')
|
|
3579 |
assert tmpl.render(context) == '6'
|
|
3580 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_email"|filter_value:"b@localhost"|count}}')
|
|
3581 |
assert tmpl.render(context) == '5'
|
|
3582 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_email"|filter_value:"c@localhost"|count}}')
|
|
3583 |
assert tmpl.render(context) == '0'
|
|
3584 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_email"|exclude_value:"a@localhost"|count}}')
|
|
3585 |
assert tmpl.render(context) == '5'
|
|
3586 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_email"|exclude_value:"b@localhost"|count}}')
|
|
3587 |
assert tmpl.render(context) == '6'
|
|
3588 |
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_email"|exclude_value:"c@localhost"|count}}')
|
|
3589 |
assert tmpl.render(context) == '11'
|
|
3590 |
|
|
3591 |
|
3460 |
3592 |
def test_items_field_getlist(pub):
|
3461 |
3593 |
NamedDataSource.wipe()
|
3462 |
3594 |
data_source = NamedDataSource(name='foobar')
|