misc: add basic odt support to block fields (#50030)

This commit is contained in:
Frédéric Péters 2021-04-03 18:00:22 +02:00
parent 17b135023d
commit 3fff9b48a5
2 changed files with 24 additions and 0 deletions

View File

@ -3590,7 +3590,18 @@ def test_export_to_model_django_template(pub):
@pytest.mark.parametrize('filename', ['template-form-details.odt', 'template-form-details-no-styles.odt'])
def test_export_to_model_form_details_section(pub, filename):
BlockDef.wipe()
FormDef.wipe()
block = BlockDef()
block.name = 'foobar'
block.digest_template = 'X{{foobar_var_foo}}Y'
block.fields = [
StringField(id='123', required=True, label='Test', type='string', varname='foo'),
StringField(id='234', required=True, label='Test2', type='string', varname='bar'),
]
block.store()
formdef = FormDef()
formdef.name = 'foo-export-details'
formdef.fields = [
@ -3609,6 +3620,7 @@ def test_export_to_model_form_details_section(pub, filename):
PageField(id='13', label='Empty Page', type='page'),
TitleField(id='14', label='Empty Title', type='title'),
StringField(id='15', label='Empty String', type='string', varname='invisiblestr'),
BlockField(id='16', label='Block Field', type='block:foobar'),
]
formdef.store()
formdef.data_class().wipe()
@ -3624,6 +3636,12 @@ def test_export_to_model_form_details_section(pub, filename):
'10': time.strptime('2015-05-12', '%Y-%m-%d'),
'11': 'foo',
'12': [['1', '2'], ['3', '4']],
# value from test_block_digest in tests/form_pages/test_block.py
'16': {
'data': [{'123': 'foo', '234': 'bar'}, {'123': 'foo2', '234': 'bar2'}],
'schema': {'123': 'string', '234': 'string'},
},
'16_display': 'XfooY, Xfoo2Y',
}
formdata.just_created()
formdata.store()
@ -3663,6 +3681,7 @@ def test_export_to_model_form_details_section(pub, filename):
assert '>2015-05-12<' in new_content
assert 'Invisible' not in new_content
assert new_content.count('/table:table-cell') == 8
assert 'XfooY, Xfoo2Y' in new_content
if filename == 'template-form-details-no-styles.odt':
new_styles = force_text(

View File

@ -3363,6 +3363,11 @@ class BlockField(WidgetField):
)
return result
def get_opendocument_node_value(self, value, formdata=None, **kwargs):
node = ET.Element('{%s}span' % OD_NS['text'])
node.text = od_clean_text(force_text(value))
return node
def get_field_class_by_type(type):
for k in field_classes: