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"

Reply via email to