100 lines
3.0 KiB
Python
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"
|