[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)
| 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'
|