diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 64208a3cd..7ff2ddd91 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -8692,3 +8692,74 @@ def test_block_digest(pub, blocks_feature): assert formdef.data_class().select()[0].data['1']['data'] == [ {'123': 'foo', '234': 'bar'}, {'123': 'foo2', '234': 'bar2'}] assert formdef.data_class().select()[0].data['1_display'] == 'XfooY, Xfoo2Y' + + +def test_block_digest_item(pub, blocks_feature): + create_user(pub) + FormDef.wipe() + BlockDef.wipe() + NamedDataSource.wipe() + + # add a named data source + data_source = NamedDataSource(name='foobar') + data_source.data_source = { + 'type': 'formula', + 'value': repr([{'id': '1', 'text': 'un'}, + {'id': '2', 'text': 'deux'}])} + data_source.store() + + block = BlockDef() + block.name = 'foobar' + block.fields = [ + fields.StringField(id='123', required=True, label='Test', + type='string', varname='foo'), + fields.ItemField(id='234', required=True, label='Test2', + type='item', varname='bar', data_source={'type': 'foobar'}), + ] + block.store() + + formdef = FormDef() + formdef.name = 'form title' + formdef.fields = [ + fields.BlockField(id='1', label='test', type='block:foobar', max_items=3), + ] + formdef.store() + + app = get_app(pub) + resp = app.get(formdef.get_url()) + resp.form['f1$element0$f123'] = 'foo' + resp.form['f1$element0$f234'] = '1' + resp = resp.form.submit('f1$add_element') + resp.form['f1$element1$f123'] = 'foo2' + resp.form['f1$element1$f234'] = '2' + + resp = resp.form.submit('submit') # -> validation page + resp = resp.form.submit('submit') # -> submit + + assert formdef.data_class().select()[0].data['1']['data'] == [ + {'123': 'foo', '234': '1', '234_display': 'un'}, + {'123': 'foo2', '234': '2', '234_display': 'deux'}, + ] + # by default it gets the type of object + assert formdef.data_class().select()[0].data['1_display'] == 'foobar, foobar' + + # set a digest template + formdef.data_class().wipe() + + block.digest_template = 'X{{foobar_var_bar}}Y' + block.store() + + resp = app.get(formdef.get_url()) + resp.form['f1$element0$f123'] = 'foo' + resp.form['f1$element0$f234'] = '1' + resp = resp.form.submit('f1$add_element') + resp.form['f1$element1$f123'] = 'foo2' + resp.form['f1$element1$f234'] = '2' + + resp = resp.form.submit('submit') # -> validation page + resp = resp.form.submit('submit') # -> submit + assert formdef.data_class().select()[0].data['1']['data'] == [ + {'123': 'foo', '234': '1', '234_display': 'un'}, + {'123': 'foo2', '234': '2', '234_display': 'deux'}, + ] + assert formdef.data_class().select()[0].data['1_display'] == 'XunY, XdeuxY'