From 18b4902a197c93e073a65652df575b91b413d9dd Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Mon, 14 Nov 2022 11:23:15 +0000 Subject: [PATCH] [FIX] base: allow browsing form view of missing module Before this patch, if you once had one module available and, later, remove it, you'd be getting an exception when browsing its form view and trying to get its icon image. Now it gets the base module icon image, just like it should. @moduon MT-1524 closes odoo/odoo#151870 X-original-commit: 4543f45e0066814d5722acfcac3c8bc8d09b8cb1 Signed-off-by: Xavier Morel (xmo) Co-authored-by: xmo-odoo --- odoo/addons/base/models/ir_module.py | 11 +++++------ odoo/addons/base/tests/__init__.py | 1 + odoo/addons/base/tests/test_ir_module.py | 22 ++++++++++++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 odoo/addons/base/tests/test_ir_module.py diff --git a/odoo/addons/base/models/ir_module.py b/odoo/addons/base/models/ir_module.py index 61772cbff0a..5cfb3156f09 100644 --- a/odoo/addons/base/models/ir_module.py +++ b/odoo/addons/base/models/ir_module.py @@ -248,15 +248,14 @@ class Module(models.Model): @api.depends('icon') def _get_icon_image(self): + self.icon_image = '' for module in self: - module.icon_image = '' + if not module.id: + continue if module.icon: - path_parts = module.icon.split('/') - path = os.path.join(path_parts[1], *path_parts[2:]) - elif module.id: - path = modules.module.get_module_icon_path(module) + path = os.path.join(module.icon.lstrip("/")) else: - path = '' + path = modules.module.get_module_icon_path(module) if path: try: with tools.file_open(path, 'rb') as image_file: diff --git a/odoo/addons/base/tests/__init__.py b/odoo/addons/base/tests/__init__.py index 314c5e4e602..515b927915a 100644 --- a/odoo/addons/base/tests/__init__.py +++ b/odoo/addons/base/tests/__init__.py @@ -24,6 +24,7 @@ from . import test_ir_filters from . import test_ir_http from . import test_ir_mail_server from . import test_ir_model +from . import test_ir_module from . import test_ir_sequence from . import test_ir_sequence_date_range from . import test_ir_default diff --git a/odoo/addons/base/tests/test_ir_module.py b/odoo/addons/base/tests/test_ir_module.py new file mode 100644 index 00000000000..65b18043144 --- /dev/null +++ b/odoo/addons/base/tests/test_ir_module.py @@ -0,0 +1,22 @@ +from odoo.tests.common import TransactionCase +from odoo.tools import mute_logger + + +class IrModuleCase(TransactionCase): + @mute_logger("odoo.modules.module") + def test_missing_module_icon(self): + module = self.env["ir.module.module"].create({"name": "missing"}) + base = self.env["ir.module.module"].search([("name", "=", "base")]) + self.assertEqual(base.icon_image, module.icon_image) + + @mute_logger("odoo.modules.module") + def test_new_module_icon(self): + module = self.env["ir.module.module"].new({"name": "missing"}) + self.assertFalse(module.icon_image) + + @mute_logger("odoo.modules.module") + def test_module_wrong_icon(self): + module = self.env["ir.module.module"].create( + {"name": "wrong_icon", "icon": "/not/valid.png"} + ) + self.assertFalse(module.icon_image)