9c73a79802
The standalone theme configurator test (test_02_theme_default_generate_primary_templates) failed locally because `configurator_apply()` attempts to perform real HTTP requests through `_website_api_rpc()` and `_OLG_api_rpc()`. Standalone tests run without network access by design, so these calls must be mocked to ensure deterministic behavior. This commit patches both RPC methods during the test execution to return minimal, valid fake payloads. IAP itself does not need to be tested here: its behavior and endpoints are already covered indirectly by the configurator_flow web tour test in test_website_modules, which exercises the full configurator flow end-to-end with real network access. runbot-231270 closes odoo/design-themes#1152 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
75 lines
3.4 KiB
Python
75 lines
3.4 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from unittest.mock import patch
|
|
from odoo.tests import standalone
|
|
|
|
|
|
@standalone('website_standalone')
|
|
def test_01_theme_install_generate_primary_templates(env):
|
|
""" This test ensures the theme `_generate_primary_snippet_templates()`
|
|
method is correctly called before xml views are generated.
|
|
"""
|
|
# 1. Setup
|
|
theme_buzzy = env.ref('base.module_theme_clean')
|
|
|
|
if theme_buzzy.state == 'installed':
|
|
theme_buzzy.button_immediate_uninstall()
|
|
# Ensure those views are deleted to mimic the initial state of theme not installed.
|
|
# Because "theme_buzzy" was installed before through "test_themes" dependencies, removing
|
|
# those views is needed to replicate the bug: if the configurator views are not generated,
|
|
# the theme install will fail because some of the imported views inherit them.
|
|
env['ir.ui.view'].with_context(_force_unlink=True).search([('key', '=', 'website.configurator_s_banner')]).unlink()
|
|
env['ir.ui.view'].with_context(_force_unlink=True).search([('key', '=', 'website.configurator_s_cover')]).unlink()
|
|
theme_buzzy.button_immediate_install()
|
|
|
|
|
|
@standalone('website_standalone')
|
|
def test_02_theme_default_generate_primary_templates(env):
|
|
|
|
def fake_website_api(self, path, payload):
|
|
# Only the configurator custom_resources endpoint is used here
|
|
assert path.startswith("/api/website/2/configurator/custom_resources")
|
|
return {'images': {}}
|
|
|
|
def fake_olg_api(self, path, payload):
|
|
# Placeholder generator used by configurator
|
|
assert path == "/api/olg/1/generate_placeholder"
|
|
placeholders = payload.get("placeholders", [])
|
|
mapping = {key: key for key in placeholders}
|
|
return mapping
|
|
|
|
# Verify that theme default's configurator templates are created
|
|
# on website update.
|
|
theme_default = env.ref('base.module_theme_default')
|
|
website_module = env.ref('base.module_website')
|
|
|
|
if theme_default.state == 'installed':
|
|
theme_default.button_immediate_uninstall()
|
|
env['ir.ui.view'].with_context(_force_unlink=True).search([('key', 'like', 'website.configurator_')]).unlink()
|
|
|
|
with patch("odoo.addons.website.models.website.Website._website_api_rpc", autospec=True, side_effect=fake_website_api), \
|
|
patch("odoo.addons.website.models.website.Website._OLG_api_rpc", autospec=True, side_effect=fake_olg_api):
|
|
|
|
if website_module.state == 'installed':
|
|
website_module.button_immediate_upgrade()
|
|
else:
|
|
website_module.button_immediate_install()
|
|
|
|
template_keys = env['ir.ui.view'].search([('key', 'like', 'website.configurator')]).mapped('key')
|
|
manifest = env['ir.module.module'].get_module_info('theme_default')
|
|
snippets_per_page = manifest.get('configurator_snippets')
|
|
for page in snippets_per_page:
|
|
for snippet in snippets_per_page[page]:
|
|
template_key = f'website.configurator_{page}_{snippet}'
|
|
assert template_key in template_keys, f"{template_key} should exist"
|
|
|
|
env['website'].with_context(website_id=1).configurator_apply(
|
|
selected_features=[1, 2, 3, 4],
|
|
industry_id=2836,
|
|
industry_name='private university',
|
|
selected_palette='default-15',
|
|
theme_name='theme_bewise',
|
|
website_purpose='get_leads',
|
|
website_type='business',
|
|
)
|