changeset 1ea664070b7a in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset;node=1ea664070b7a
description:
Ensure that views are valid when replacing link by label
issue9548
review327881002
diffstat:
trytond/model/modelview.py | 2 ++
trytond/tests/test_modelview.py | 21 +++++++++++++++++++++
2 files changed, 23 insertions(+), 0 deletions(-)
diffs (44 lines):
diff -r 0775630fb492 -r 1ea664070b7a trytond/model/modelview.py
--- a/trytond/model/modelview.py Wed Sep 23 10:04:19 2020 +0200
+++ b/trytond/model/modelview.py Wed Sep 23 10:06:49 2020 +0200
@@ -660,7 +660,9 @@
action.res_model, 'read', raise_exception=False)):
element.tag = 'label'
colspan = element.attrib.get('colspan')
+ link_name = element.attrib['name']
element.attrib.clear()
+ element.attrib['id'] = link_name
if colspan is not None:
element.attrib['colspan'] = colspan
else:
diff -r 0775630fb492 -r 1ea664070b7a trytond/tests/test_modelview.py
--- a/trytond/tests/test_modelview.py Wed Sep 23 10:04:19 2020 +0200
+++ b/trytond/tests/test_modelview.py Wed Sep 23 10:06:49 2020 +0200
@@ -419,6 +419,27 @@
self.assertFalse(links)
self.assertTrue(labels)
+ @unittest.skipUnless(hasattr(etree, 'RelaxNG'), "etree is missing RelaxNG")
+ @with_transaction()
+ def test_link_label_valid_view(self):
+ "Test that replacing link by label results in a valid view"
+ pool = Pool()
+ TestModel = pool.get('test.modelview.link')
+ Model = pool.get('ir.model')
+ ModelAccess = pool.get('ir.model.access')
+ UIView = pool.get('ir.ui.view')
+
+ model, = Model.search([('model', '=', 'test.modelview.link.target')])
+ access = ModelAccess(model=model, group=None, perm_read=False)
+ access.save()
+
+ arch = TestModel.fields_view_get()['arch']
+ parser = etree.XMLParser()
+ tree = etree.fromstring(arch, parser=parser)
+ validator = etree.RelaxNG(etree=UIView.get_rng('form'))
+
+ self.assertTrue(validator.validate(tree))
+
@with_transaction()
def test_link_without_action_access(self):
"Test link in view without action access"