Files
odoo_source/addons/website/tests/test_configurator.py
T
Lou (loha)andqsm-odoo 0d448d950c [IMP] website: generate text with a LLM for configurator pages
When building a website with the website configurator, you get pages
with a nice layout. However, the text inside is not adapted to your
company, industry or even, most of the time, language.

Using a LLM, we could easily get text much more relevant to customer
needs. The scope of this work is static pages generated with the website
configurator (homepage, about us, pricing, ...).
Later, in other tasks, we also want users to be able to generate text
inside the website builder.

This commit implement the bare minimum to generate and replace a website
content by AI generated sentences (based on the information provided by
the user).

Related IAP PR at https://github.com/odoo/iap-apps/pull/656

task-3248852

closes odoo/odoo#121021

Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
Co-authored-by: qsm-odoo <qsm@odoo.com>
2023-09-06 22:40:22 +00:00

80 lines
3.7 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from unittest.mock import patch
import odoo.tests
class TestConfiguratorCommon(odoo.tests.HttpCase):
def _theme_upgrade_upstream(self):
# patch to prevent module install/upgrade during tests
pass
def setUp(self):
super().setUp()
def iap_jsonrpc_mocked_configurator(*args, **kwargs):
endpoint = args[0]
params = kwargs.get('params', {})
language = params.get('lang', 'en_US')
if endpoint.endswith('/api/website/1/configurator/industries'):
if language in ('fr_FR', 'pa_GB'):
return {"industries": [
{"id": 1, "label": "abbey in fr"},
{"id": 2, "label": "aboriginal and torres strait islander organisation in fr"},
{"id": 3, "label": "aboriginal art gallery in fr"},
{"id": 4, "label": "abortion clinic in fr"},
{"id": 5, "label": "abrasives supplier in fr"},
{"id": 6, "label": "abundant life church in fr"}]}
else:
return {"industries": [
{"id": 1, "label": "abbey"},
{"id": 2, "label": "aboriginal and torres strait islander organisation"},
{"id": 3, "label": "aboriginal art gallery"},
{"id": 4, "label": "abortion clinic"},
{"id": 5, "label": "abrasives supplier"},
{"id": 6, "label": "abundant life church"}]}
elif '/api/website/2/configurator/recommended_themes' in endpoint:
return []
elif '/api/website/2/configurator/custom_resources/' in endpoint:
return {'images': {}}
elif '/api/olg/1/generate_placeholder' in endpoint:
return {"a non existing placeholder": "😠", 'Catchy Headline': 'Welcome to XXXX - Your Super test'}
iap_patch = patch('odoo.addons.iap.tools.iap_tools.iap_jsonrpc', iap_jsonrpc_mocked_configurator)
self.startPatcher(iap_patch)
patcher = patch('odoo.addons.website.models.ir_module_module.IrModuleModule._theme_upgrade_upstream', wraps=self._theme_upgrade_upstream)
self.startPatcher(patcher)
@odoo.tests.common.tagged('post_install', '-at_install')
class TestConfiguratorTranslation(TestConfiguratorCommon):
def test_01_configurator_translation(self):
parseltongue = self.env['res.lang'].create({
'name': 'Parseltongue',
'code': 'pa_GB',
'iso_code': 'pa_GB',
'url_code': 'pa_GB',
})
self.env["base.language.install"].create({
'overwrite': True,
'lang_ids': [(6, 0, [parseltongue.id])],
}).lang_install()
feature = self.env['website.configurator.feature'].search([('name', '=', 'Privacy Policy')])
feature.with_context(lang=parseltongue.code).write({'name': 'Parseltongue_privacy'})
self.env.ref('base.user_admin').write({'lang': parseltongue.code})
website_fr = self.env['website'].create({
'name': "New website",
})
self.env.ref('web_editor.snippets').update_field_translations('arch_db', {
parseltongue.code: {
'Save': 'Save_Parseltongue'
}
})
# disable configurator todo to ensure this test goes through
active_todo = self.env['ir.actions.todo'].search([('state', '=', 'open')], limit=1)
active_todo.update({'state': 'done'})
self.start_tour('/website/force/%s?path=%%2Fwebsite%%2Fconfigurator' % website_fr.id, 'configurator_translation', login='admin')