diff --git a/endpoint_route_handler/models/endpoint_route_handler.py b/endpoint_route_handler/models/endpoint_route_handler.py index 19a8c766..206e1837 100644 --- a/endpoint_route_handler/models/endpoint_route_handler.py +++ b/endpoint_route_handler/models/endpoint_route_handler.py @@ -22,6 +22,7 @@ class EndpointRouteHandler(models.AbstractModel): index=True, compute="_compute_route", inverse="_inverse_route", + precompute=True, readonly=False, store=True, copy=False, diff --git a/endpoint_route_handler/tests/test_endpoint.py b/endpoint_route_handler/tests/test_endpoint.py index 2dfde2b1..d1253c6c 100644 --- a/endpoint_route_handler/tests/test_endpoint.py +++ b/endpoint_route_handler/tests/test_endpoint.py @@ -2,6 +2,7 @@ # @author: Simone Orsi # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). from contextlib import contextmanager +from unittest.mock import patch import odoo from odoo.tools import mute_logger @@ -49,6 +50,27 @@ def test_as_tool_base_data(self): new_route.route += "/new" self.assertNotEqual(new_route.endpoint_hash, first_hash) + def test_route_field_precomputed(self): + """Regression guard: ensure ``precompute=True`` stays on ``route``. + + Without it, downstream modules that derive ``route`` via compute + would hit a "Missing required value" error at INSERT time. + """ + Model = type(self.env["endpoint.route.handler.tool"]) + + def _fake_compute_route(self): + for rec in self: + rec.route = "/precompute/probe" + + with patch.object(Model, "_compute_route", _fake_compute_route): + rec = self.env["endpoint.route.handler.tool"].create( + { + "name": "Precompute test", + "request_method": "GET", + } + ) + self.assertEqual(rec.route, "/precompute/probe") + @mute_logger("odoo.addons.base.models.ir_http") def test_as_tool_register_single_controller(self): new_route = make_new_route(self.env)