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"