Name: [FIX] pos_loyalty, sale_loyalty: backport two upstream loyalty fixes

State: Failed finished in 83m

PR State: open

PR Author: David Tran

PR Author Email:

PR: #1290

Committer: David Tran

Committer Email: david.tran@tvtmarine.com

Commit: c855d12ce8bceca251d4c4707fe9d0fa67df3a97

Description:

                                            [FIX] sale_loyalty: allow invoicing-only users to open sale orders

Steps to reproduce:
1. Create a user in the Invoicing group (account.group_account_invoice)
   only, without any Sales group.
2. As that user, open any sale order form (draft or confirmed with
   loyalty history).

Issue:
The form never opens; the client raises "You are not allowed to
access 'Loyalty Coupon' (loyalty.card) records". This blocks a user
who already has read/write access to sale.order in core, via the
access_sale_order_invoicing_payments rule in sale's own security
CSV, from doing their job.

Cause:
Two non-sudo reads in the sale.order extension hit loyalty models
that are restricted to the Sales groups: the gift card stat button
count queries loyalty.card directly, and the loyalty summary looks
up the coupon point name via coupon_point_ids.coupon_id without the
sudo already used one line above for loyalty.history.

Fix:
Gate the gift card count query behind a has_access('read') check, so
a user without access simply sees a zero count (the stat button
stays hidden), matching the has_access guard sale.order already uses
in _create_invoices(). Read the coupon point name through sudo(),
consistent with the loyalty.history read beside it, since the
loyalty summary is meant to be visible to anyone who can already
read the order.

Signed-off-by: David Tran <david.tran@tvtmarine.com>
(cherry picked from commit 84536036b471ced708a149c40c7f01dbf9a2d2fc)
                                            

Branch: 19.0

Age:

Up-time:

Subbuilds Name State Detail
Build 418424 At install tests: from account to website_timesheet 68m Succeed Log
Build 418425 Post install tests: step install all modules 12m Succeed Log
Build 418426 Post install tests: from account to hr_recruitment_survey 69m Succeed Log
Build 418427 Post install tests: from hr_skills to phone_validation 55m Succeed Log
Build 418428 Post install tests: from point_of_sale to purchase_requisition_stock 94m Succeed Log
Build 418429 Post install tests: from purchase_stock to test_inherits_depends 60m Succeed Log
Build 418430 Post install tests: from test_mail to to_product_return_reason_stock 69m Failed Log
Build 418431 Post install tests: from to_sale_order_advance to viin_approval_purpose_routing 24m Succeed Log
Build 418432 Post install tests: from viin_approval_sale to viin_product 39m Succeed Log
Build 418433 Post install tests: from viin_project to web_unsplash 69m Succeed Log
Build 418434 Post install tests: from website to website_timesheet 64m Succeed Log
Create Date Level Message
09/24/2026 22:15:36 INFO
Updated repository Viindoo-tvtmaaddons
09/24/2026 22:15:36 INFO
Updated repository Viindoo-erponline-enterprise
09/24/2026 22:15:36 INFO
Updated repository Viindoo-branding
09/24/2026 22:15:36 INFO
Cloned repository Viindoo-odoo
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_main_flows.tests.test_flow.TestUi.test_01_main_flow_tour.browser: FAILED: [153/306] Tour main_flow_tour → Step .ui-menu-item > a:contains('the_flow.product'). Element (.ui-menu-item > a:contains('the_flow.product')) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.bus.websocket: Unable to acquire lock for test cursor after 20s Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 364, in get_messages self._process_control_command(cmd, data) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 750, in _process_control_command self._disconnect(data['code'], data.get('reason')) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 618, in _disconnect self._terminate() File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 643, in _terminate with acquire_cursor(self._db) as cr: File "/usr/lib/python3.12/contextlib.py", line 137, in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 55, in acquire_cursor with suppress(PoolError), Registry(db).cursor() as cr: ^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 801, in _patched_cursor return test_cursor.TestCursor( ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/test_cursor.py", line 47, in __init__ raise Exception(f'Unable to acquire lock for test cursor after {lock_timeout}s') Exception: Unable to acquire lock for test cursor after 20s
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_main_flows.tests.test_flow: FAIL: TestUi.test_01_main_flow_tour Traceback (most recent call last): File "/data/build/rb-c855d12-225060/odoo/addons/test_main_flows/tests/test_flow.py", line 107, in test_01_main_flow_tour self.main_flow_tour() File "/data/build/rb-c855d12-225060/odoo/addons/test_main_flows/tests/test_flow.py", line 100, in main_flow_tour self.start_tour("/odoo", 'main_flow_tour', login="admin", timeout=180) File "/data/build/rb-c855d12-225060/addons/account/tests/common.py", line 1656, in start_tour super().start_tour(url_path, tour_name, **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('main_flow_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [153/306] Tour main_flow_tour → Step .ui-menu-item > a:contains('the_flow.product'). Element (.ui-menu-item > a:contains('the_flow.product')) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_event_sale_with_product_configurator.TestEventProductConfiguratorUi.test_event_using_product_configurator.browser: FAILED: [11/51] Tour event_sale_with_product_configurator_tour → Step ul.ui-autocomplete a:contains("Registration Event (TEST variants)"). Element (ul.ui-autocomplete a:contains("Registration Event (TEST variants)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.bus.websocket: Unable to acquire lock for test cursor after 20s Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 364, in get_messages self._process_control_command(cmd, data) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 750, in _process_control_command self._disconnect(data['code'], data.get('reason')) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 618, in _disconnect self._terminate() File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 643, in _terminate with acquire_cursor(self._db) as cr: File "/usr/lib/python3.12/contextlib.py", line 137, in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 55, in acquire_cursor with suppress(PoolError), Registry(db).cursor() as cr: ^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 801, in _patched_cursor return test_cursor.TestCursor( ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/test_cursor.py", line 47, in __init__ raise Exception(f'Unable to acquire lock for test cursor after {lock_timeout}s') Exception: Unable to acquire lock for test cursor after 20s
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_event_sale_with_product_configurator: FAIL: TestEventProductConfiguratorUi.test_event_using_product_configurator Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_event_sale_with_product_configurator.py", line 118, in test_event_using_product_configurator self.start_tour("/odoo", 'event_sale_with_product_configurator_tour', login='salesman') File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('event_sale_with_product_configurator_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [11/51] Tour event_sale_with_product_configurator_tour → Step ul.ui-autocomplete a:contains("Registration Event (TEST variants)"). Element (ul.ui-autocomplete a:contains("Registration Event (TEST variants)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator.TestProductConfiguratorUi.test_01_product_configurator.browser: FAILED: [11/32] Tour sale_product_configurator_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.bus.websocket: Unable to acquire lock for test cursor after 20s Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 364, in get_messages self._process_control_command(cmd, data) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 750, in _process_control_command self._disconnect(data['code'], data.get('reason')) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 618, in _disconnect self._terminate() File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 643, in _terminate with acquire_cursor(self._db) as cr: File "/usr/lib/python3.12/contextlib.py", line 137, in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 55, in acquire_cursor with suppress(PoolError), Registry(db).cursor() as cr: ^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 801, in _patched_cursor return test_cursor.TestCursor( ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/test_cursor.py", line 47, in __init__ raise Exception(f'Unable to acquire lock for test cursor after {lock_timeout}s') Exception: Unable to acquire lock for test cursor after 20s
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator: FAIL: TestProductConfiguratorUi.test_01_product_configurator Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_sale_product_configurator.py", line 37, in test_01_product_configurator self.start_tour("/odoo", 'sale_product_configurator_tour', login='salesman') File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('sale_product_configurator_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [11/32] Tour sale_product_configurator_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator.TestProductConfiguratorUi.test_02_product_configurator_advanced.browser: FAILED: [12/28] Tour sale_product_configurator_advanced_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.bus.websocket: Unable to acquire lock for test cursor after 20s Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 364, in get_messages self._process_control_command(cmd, data) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 750, in _process_control_command self._disconnect(data['code'], data.get('reason')) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 618, in _disconnect self._terminate() File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 643, in _terminate with acquire_cursor(self._db) as cr: File "/usr/lib/python3.12/contextlib.py", line 137, in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 55, in acquire_cursor with suppress(PoolError), Registry(db).cursor() as cr: ^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 801, in _patched_cursor return test_cursor.TestCursor( ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/test_cursor.py", line 47, in __init__ raise Exception(f'Unable to acquire lock for test cursor after {lock_timeout}s') Exception: Unable to acquire lock for test cursor after 20s
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator: FAIL: TestProductConfiguratorUi.test_02_product_configurator_advanced Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_sale_product_configurator.py", line 105, in test_02_product_configurator_advanced self.start_tour("/odoo", 'sale_product_configurator_advanced_tour', login='salesman') File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('sale_product_configurator_advanced_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [12/28] Tour sale_product_configurator_advanced_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator.TestProductConfiguratorUi.test_03_product_configurator_edition.browser: FAILED: [11/42] Tour sale_product_configurator_edition_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.bus.websocket: Unable to acquire lock for test cursor after 20s Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 364, in get_messages self._process_control_command(cmd, data) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 750, in _process_control_command self._disconnect(data['code'], data.get('reason')) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 618, in _disconnect self._terminate() File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 643, in _terminate with acquire_cursor(self._db) as cr: File "/usr/lib/python3.12/contextlib.py", line 137, in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 55, in acquire_cursor with suppress(PoolError), Registry(db).cursor() as cr: ^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 801, in _patched_cursor return test_cursor.TestCursor( ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/test_cursor.py", line 47, in __init__ raise Exception(f'Unable to acquire lock for test cursor after {lock_timeout}s') Exception: Unable to acquire lock for test cursor after 20s
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator: FAIL: TestProductConfiguratorUi.test_03_product_configurator_edition Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_sale_product_configurator.py", line 128, in test_03_product_configurator_edition self.start_tour("/odoo", 'sale_product_configurator_edition_tour', login='salesman') File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('sale_product_configurator_edition_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [11/42] Tour sale_product_configurator_edition_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator.TestProductConfiguratorUi.test_05_product_configurator_pricelist.browser: FAILED: [15/29] Tour sale_product_configurator_pricelist_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.bus.websocket: Unable to acquire lock for test cursor after 20s Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 364, in get_messages self._process_control_command(cmd, data) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 750, in _process_control_command self._disconnect(data['code'], data.get('reason')) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 618, in _disconnect self._terminate() File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 643, in _terminate with acquire_cursor(self._db) as cr: File "/usr/lib/python3.12/contextlib.py", line 137, in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 55, in acquire_cursor with suppress(PoolError), Registry(db).cursor() as cr: ^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 801, in _patched_cursor return test_cursor.TestCursor( ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/test_cursor.py", line 47, in __init__ raise Exception(f'Unable to acquire lock for test cursor after {lock_timeout}s') Exception: Unable to acquire lock for test cursor after 20s
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator: FAIL: TestProductConfiguratorUi.test_05_product_configurator_pricelist Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_sale_product_configurator.py", line 193, in test_05_product_configurator_pricelist self.start_tour("/odoo", 'sale_product_configurator_pricelist_tour', login='salesman') File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('sale_product_configurator_pricelist_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [15/29] Tour sale_product_configurator_pricelist_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator.TestProductConfiguratorUi.test_06_product_configurator_optional_products.browser: FAILED: [11/26] Tour sale_product_configurator_optional_products_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.bus.websocket: Unable to acquire lock for test cursor after 20s Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 364, in get_messages self._process_control_command(cmd, data) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 750, in _process_control_command self._disconnect(data['code'], data.get('reason')) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 618, in _disconnect self._terminate() File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 643, in _terminate with acquire_cursor(self._db) as cr: File "/usr/lib/python3.12/contextlib.py", line 137, in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 55, in acquire_cursor with suppress(PoolError), Registry(db).cursor() as cr: ^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 801, in _patched_cursor return test_cursor.TestCursor( ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/test_cursor.py", line 47, in __init__ raise Exception(f'Unable to acquire lock for test cursor after {lock_timeout}s') Exception: Unable to acquire lock for test cursor after 20s
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator: FAIL: TestProductConfiguratorUi.test_06_product_configurator_optional_products Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_sale_product_configurator.py", line 219, in test_06_product_configurator_optional_products self.start_tour( File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('sale_product_configurator_optional_products_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [11/26] Tour sale_product_configurator_optional_products_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator.TestProductConfiguratorUi.test_product_attribute_multi_type.browser: FAILED: [11/16] Tour product_attribute_multi_type → Step ul.ui-autocomplete a:contains("Big Burger"). Element (ul.ui-autocomplete a:contains("Big Burger")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator: FAIL: TestProductConfiguratorUi.test_product_attribute_multi_type Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_sale_product_configurator.py", line 286, in test_product_attribute_multi_type self.start_tour("/odoo", 'product_attribute_multi_type', login="salesman") File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('product_attribute_multi_type', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [11/16] Tour product_attribute_multi_type → Step ul.ui-autocomplete a:contains("Big Burger"). Element (ul.ui-autocomplete a:contains("Big Burger")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator.TestProductConfiguratorUi.test_product_configurator_uom_selection.browser: FAILED: [14/37] Tour sale_product_configurator_uom_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.bus.websocket: Unable to acquire lock for test cursor after 20s Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 364, in get_messages self._process_control_command(cmd, data) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 750, in _process_control_command self._disconnect(data['code'], data.get('reason')) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 618, in _disconnect self._terminate() File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 643, in _terminate with acquire_cursor(self._db) as cr: File "/usr/lib/python3.12/contextlib.py", line 137, in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 55, in acquire_cursor with suppress(PoolError), Registry(db).cursor() as cr: ^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 801, in _patched_cursor return test_cursor.TestCursor( ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/test_cursor.py", line 47, in __init__ raise Exception(f'Unable to acquire lock for test cursor after {lock_timeout}s') Exception: Unable to acquire lock for test cursor after 20s
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator: FAIL: TestProductConfiguratorUi.test_product_configurator_uom_selection Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_sale_product_configurator.py", line 335, in test_product_configurator_uom_selection self.start_tour("/odoo", 'sale_product_configurator_uom_tour', login='salesman') File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('sale_product_configurator_uom_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [14/37] Tour sale_product_configurator_uom_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator.TestProductConfiguratorUi.test_product_configurator_update_custom_values.browser: FAILED: [11/27] Tour sale_product_configurator_custom_value_update_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.bus.websocket: Unable to acquire lock for test cursor after 20s Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 364, in get_messages self._process_control_command(cmd, data) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 750, in _process_control_command self._disconnect(data['code'], data.get('reason')) File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 618, in _disconnect self._terminate() File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 643, in _terminate with acquire_cursor(self._db) as cr: File "/usr/lib/python3.12/contextlib.py", line 137, in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/addons/bus/websocket.py", line 55, in acquire_cursor with suppress(PoolError), Registry(db).cursor() as cr: ^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 801, in _patched_cursor return test_cursor.TestCursor( ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/build/rb-c855d12-225060/odoo/tests/test_cursor.py", line 47, in __init__ raise Exception(f'Unable to acquire lock for test cursor after {lock_timeout}s') Exception: Unable to acquire lock for test cursor after 20s
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_configurator: FAIL: TestProductConfiguratorUi.test_product_configurator_update_custom_values Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_sale_product_configurator.py", line 248, in test_product_configurator_update_custom_values self.start_tour( File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('sale_product_configurator_custom_value_update_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [11/27] Tour sale_product_configurator_custom_value_update_tour → Step ul.ui-autocomplete a:contains("Customizable Desk (TEST)"). Element (ul.ui-autocomplete a:contains("Customizable Desk (TEST)")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_matrix.TestSaleMatrixUi.test_sale_matrix_ui.browser: FAILED: [11/47] Tour sale_matrix_tour → Step ul.ui-autocomplete a:contains("Matrix"). Element (ul.ui-autocomplete a:contains("Matrix")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.addons.test_sale_product_configurators.tests.test_sale_product_matrix: FAIL: TestSaleMatrixUi.test_sale_matrix_ui Traceback (most recent call last): File "/data/build/rb-c855d12-225060/addons/test_sale_product_configurators/tests/test_sale_product_matrix.py", line 58, in test_sale_matrix_ui self.start_tour("/odoo", 'sale_matrix_tour', login='salesman') File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2610, in start_tour self.browser_js(url_path=url_path, code=code, ready=ready, timeout=timeout, success_signal="tour succeeded", **kwargs) File "/data/build/rb-c855d12-225060/odoo/tests/common.py", line 2580, in browser_js self.fail('%s\n\n%s' % (message, error)) AssertionError: The test code "odoo.startTour('sale_matrix_tour', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/odoo", "delayToCheckUndeterminisms": 0})" failed FAILED: [11/47] Tour sale_matrix_tour → Step ul.ui-autocomplete a:contains("Matrix"). Element (ul.ui-autocomplete a:contains("Matrix")) has not been found. TIMEOUT step failed to complete within 10000 ms.
09/24/2026 23:40:04 ERROR
Subbuild # 418430: odoo.tests.result: 11 failed, 0 error(s) of 2013 tests when loading database 'rb-c855d12-225060-418430'