diff --git a/endpoint_route_handler/models/endpoint_route_handler.py b/endpoint_route_handler/models/endpoint_route_handler.py index bba74a54..7fb1f821 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 14901918..82e7552f 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 from odoo import api, modules from odoo.tests import common @@ -50,6 +51,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)