From fb83e40b833b5e99ef975fa4dfead57ec2f9d2d1 Mon Sep 17 00:00:00 2001 From: Aungkokolin1997 Date: Tue, 26 May 2026 03:53:26 +0000 Subject: [PATCH] [FIX] endpoint_route_handler: precompute=True on route field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without precompute, the required computed field is evaluated after INSERT (during flush), so creating an endpoint whose route is derived from other fields by a downstream module fails with "Missing required value for the field 'Route'" — the INSERT runs before the compute can populate the column. --- .../models/endpoint_route_handler.py | 1 + endpoint_route_handler/tests/test_endpoint.py | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) 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)