odoo/ext/3rd-party-addons/website_multi_theme/tests/test_themes.py

100 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2018 Ivan Yelizariev <https://it-projects.info/team/yelizariev>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from odoo.tests.common import TransactionCase
THEME_MODULE = 'theme_module'
class TestThemes(TransactionCase):
def _create_view(self, parent, xml_id, arch):
module, _ = xml_id.split('.')
view = self.env['ir.ui.view'].create({
'inherit_id': parent.id,
'arch': arch,
'key': xml_id,
})
self.env['ir.model.data'].create({
'name': xml_id,
'model': 'ir.ui.view',
'module': module,
'res_id': view.id,
})
return view
def test_dependency(self):
"""Test that dependency's views are copied too"""
theme = self.env.ref('website_multi_theme.demo_multi')
website = self.env.ref("website.default_website")
dep_view = self.env.ref('website.footer_custom')
theme._convert_assets()
# setting multi_theme_id calls _multi_theme_activate
website.multi_theme_id = theme
self.assertTrue(
website._find_duplicated_view_for_website(dep_view),
"Dependency's view was not copied")
theme.write({'dependency_ids': [(5, 0, 0)]})
theme._convert_assets()
website._multi_theme_activate()
self.assertFalse(
website._find_duplicated_view_for_website(dep_view),
"The dependency is removed, but its view still has duplicate")
def test_copied_parent(self):
"""Test a case, when copied view has to reference
to copied parent instead of original one"""
assets_frontend = self.env.ref('website.assets_frontend')
# data below is simplified version of theme_clean module.
# similar to theme_clean.less
middle_view = self._create_view(
assets_frontend,
'%s.middle_view' % THEME_MODULE,
"""<?xml version="1.0"?>
<data name="middle view" inherit_id="website.assets_frontend">
<xpath expr="//link[last()]" position="after">
<!-- middle_view -->
</xpath>
</data>
"""
)
# similar to one of the options,
# e.g. theme_clean.option_bg_shade_light2
self._create_view(
middle_view,
'%s.option_view' % THEME_MODULE,
"""<?xml version="1.0"?>
<data name="option view" inherit_id="%s.middle_view">
<xpath expr="." position="inside">
<!-- option_view -->
</xpath>
</data>
""" % THEME_MODULE
)
theme = self.env['website.theme'].create({
'name': THEME_MODULE,
'converted_theme_addon': THEME_MODULE,
})
theme._convert_assets()
website = self.env.ref("website.default_website")
website.multi_theme_id = theme
website._multi_theme_activate()
# TODO: instead of just making coverage, we could add checking
# that option_view data are presented in corresponding "auto assets"