From 0e2497b8e84eab8957028f4d63ff0899a9fe6ab3 Mon Sep 17 00:00:00 2001 From: Romain Derie Date: Mon, 29 Aug 2022 21:55:51 +0000 Subject: [PATCH] [IMP] test_themes, theme_test_custo: add new test theme for tests This commit introduces a new theme for tests purpose. The goal is to be able to create records and simulate a real use case without only testing through unit tests in python. For instance, with this commit, we now fully test: - menu creation - page creation - new header & footer template - new image shape & background shape This will be extended later to be able to test other stuff too, maybe like changing the website logo (not supported yet). Also, our existing standalone test in themes should use this theme instead of nano to not rely on a real theme that might change. Courtesy of NMI as this theme is partly based on his job. closes odoo/design-themes#586 Related: odoo/odoo#99099 Signed-off-by: Quentin Smetz (qsm) --- test_themes/__init__.py | 7 +- theme_test_custo/__init__.py | 4 + theme_test_custo/__manifest__.py | 24 ++++++ theme_test_custo/data/images.xml | 10 +++ theme_test_custo/data/ir_asset.xml | 19 +++++ theme_test_custo/data/menu.xml | 80 ++++++++++++++++++ theme_test_custo/data/pages.xml | 44 ++++++++++ theme_test_custo/data/shapes.xml | 38 +++++++++ theme_test_custo/models/__init__.py | 4 + theme_test_custo/models/theme_models.py | 20 +++++ .../static/image_shapes/blob/01.svg | 12 +++ theme_test_custo/static/shapes/curves/01.svg | 4 + .../static/shapes/hexagons/01.svg | 3 + theme_test_custo/static/src/img/logo.jpg | Bin 0 -> 65018 bytes .../static/src/img/template_footer_opt.svg | 10 +++ .../static/src/img/template_header_opt.svg | 10 +++ .../static/src/scss/bootstrap_overridden.scss | 3 + .../static/src/scss/primary_variables.scss | 73 ++++++++++++++++ .../tests/tours/theme_menu_hierarchies.js | 64 ++++++++++++++ theme_test_custo/tests/__init__.py | 4 + theme_test_custo/tests/test_theme_creation.py | 16 ++++ theme_test_custo/views/footer.xml | 42 +++++++++ theme_test_custo/views/header.xml | 45 ++++++++++ 23 files changed, 530 insertions(+), 6 deletions(-) create mode 100644 theme_test_custo/__init__.py create mode 100644 theme_test_custo/__manifest__.py create mode 100644 theme_test_custo/data/images.xml create mode 100644 theme_test_custo/data/ir_asset.xml create mode 100644 theme_test_custo/data/menu.xml create mode 100644 theme_test_custo/data/pages.xml create mode 100644 theme_test_custo/data/shapes.xml create mode 100644 theme_test_custo/models/__init__.py create mode 100644 theme_test_custo/models/theme_models.py create mode 100644 theme_test_custo/static/image_shapes/blob/01.svg create mode 100644 theme_test_custo/static/shapes/curves/01.svg create mode 100644 theme_test_custo/static/shapes/hexagons/01.svg create mode 100644 theme_test_custo/static/src/img/logo.jpg create mode 100644 theme_test_custo/static/src/img/template_footer_opt.svg create mode 100644 theme_test_custo/static/src/img/template_header_opt.svg create mode 100644 theme_test_custo/static/src/scss/bootstrap_overridden.scss create mode 100644 theme_test_custo/static/src/scss/primary_variables.scss create mode 100644 theme_test_custo/static/tests/tours/theme_menu_hierarchies.js create mode 100644 theme_test_custo/tests/__init__.py create mode 100644 theme_test_custo/tests/test_theme_creation.py create mode 100644 theme_test_custo/views/footer.xml create mode 100644 theme_test_custo/views/header.xml diff --git a/test_themes/__init__.py b/test_themes/__init__.py index 89030f2e2..bd9f853b5 100644 --- a/test_themes/__init__.py +++ b/test_themes/__init__.py @@ -10,12 +10,7 @@ def post_init_hook(cr, registry): ''' Create a new website for each theme and install the theme on it. ''' env = api.Environment(cr, SUPERUSER_ID, {}) IrModule = env['ir.module.module'] - - themes = IrModule.search([ - ('category_id', 'child_of', env.ref('base.module_category_theme').id), - ], order='name') - exclude_list = ['_common', '_blog', '_sale'] - themes = themes.filtered(lambda t: not any([ex for ex in exclude_list if ex in t.name])) + themes = IrModule.search(IrModule.get_themes_domain(), order='name') assert len(themes) == len(env.ref('base.module_test_themes').dependencies_id) xmlids = [] diff --git a/theme_test_custo/__init__.py b/theme_test_custo/__init__.py new file mode 100644 index 000000000..dc5e6b693 --- /dev/null +++ b/theme_test_custo/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/theme_test_custo/__manifest__.py b/theme_test_custo/__manifest__.py new file mode 100644 index 000000000..6a2ea7c65 --- /dev/null +++ b/theme_test_custo/__manifest__.py @@ -0,0 +1,24 @@ +{ + 'name': 'Custom Theme (Testing suite)', + 'summary': '', + 'description': '', + # Remove the `/Hidden` part to make it selectable for tests purpose + 'category': 'Theme/Hidden', + 'version': '1.0', + 'depends': ['website'], + 'data': [ + 'data/images.xml', + 'data/ir_asset.xml', + 'data/menu.xml', + 'data/pages.xml', + 'data/shapes.xml', + 'views/footer.xml', + 'views/header.xml', + ], + 'assets': { + 'web.assets_tests': [ + 'theme_test_custo/static/tests/tours/**/*', + ], + }, + 'license': 'LGPL-3', +} diff --git a/theme_test_custo/data/images.xml b/theme_test_custo/data/images.xml new file mode 100644 index 000000000..70193a8df --- /dev/null +++ b/theme_test_custo/data/images.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/theme_test_custo/data/ir_asset.xml b/theme_test_custo/data/ir_asset.xml new file mode 100644 index 000000000..cbaeb2d96 --- /dev/null +++ b/theme_test_custo/data/ir_asset.xml @@ -0,0 +1,19 @@ + + + + + theme_test_custo.bootstrap_overridden_scss + Bootstrap overridden SCSS + web._assets_frontend_helpers + prepend + theme_test_custo/static/src/scss/bootstrap_overridden.scss + + + + theme_test_custo.primary_variables_scss + Primary variables SCSS + web._assets_primary_variables + theme_test_custo/static/src/scss/primary_variables.scss + + + diff --git a/theme_test_custo/data/menu.xml b/theme_test_custo/data/menu.xml new file mode 100644 index 000000000..dcacf2fcb --- /dev/null +++ b/theme_test_custo/data/menu.xml @@ -0,0 +1,80 @@ + + + + + + Example 1 + 20 + + + + + Item 1 + /example + + 21 + + + Item 2 + /example/item-2 + + 22 + + + Item 3 + /example/item-3 + + 23 + + + + + Mega Menu + /mega-menu + 30 + +
+
+
+
+ +

Text

+
+
+ +

Text

+
+
+ +

Text

+
+
+ +

Text

+
+
+
+
+
+
+ + + + Main Menu Animals + + /main-menu-animals + + + Dogs + /dogs + + 10 + + + Cats + /cats + + 20 + + +
diff --git a/theme_test_custo/data/pages.xml b/theme_test_custo/data/pages.xml new file mode 100644 index 000000000..13faf43bd --- /dev/null +++ b/theme_test_custo/data/pages.xml @@ -0,0 +1,44 @@ + + + + + + + + + /example + + + diff --git a/theme_test_custo/data/shapes.xml b/theme_test_custo/data/shapes.xml new file mode 100644 index 000000000..2fbabc99d --- /dev/null +++ b/theme_test_custo/data/shapes.xml @@ -0,0 +1,38 @@ + + + + + + + Hexagon Shape 01 + theme_test_custo.shape_hexagon_01 + /web_editor/shape/illustration/hexagons/01.svg + + + Curve Shape 01 + theme_test_custo.shape_curve_01 + /web_editor/shape/illustration/curves/01.svg + + + + + + Blob Shape 01 + theme_test_custo.img_shape_blob_01 + /web_editor/image_shape/blob/01.svg + + + diff --git a/theme_test_custo/models/__init__.py b/theme_test_custo/models/__init__.py new file mode 100644 index 000000000..c0e1920ac --- /dev/null +++ b/theme_test_custo/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import theme_models diff --git a/theme_test_custo/models/theme_models.py b/theme_test_custo/models/theme_models.py new file mode 100644 index 000000000..1aecb0333 --- /dev/null +++ b/theme_test_custo/models/theme_models.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models + + +class TestThemeCustom(models.AbstractModel): + _inherit = 'theme.utils' + + @property + def _header_templates(self): + return ['theme_test_custo.template_header_custom'] + super()._header_templates + + @property + def _footer_templates(self): + return ['theme_test_custo.template_footer_custom'] + super()._footer_templates + + def _theme_test_custo_post_copy(self, mod): + self.enable_view('theme_test_custo.template_header_custom') + self.enable_view('theme_test_custo.template_footer_custom') diff --git a/theme_test_custo/static/image_shapes/blob/01.svg b/theme_test_custo/static/image_shapes/blob/01.svg new file mode 100644 index 000000000..f2cd290aa --- /dev/null +++ b/theme_test_custo/static/image_shapes/blob/01.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/theme_test_custo/static/shapes/curves/01.svg b/theme_test_custo/static/shapes/curves/01.svg new file mode 100644 index 000000000..4d6bb4eb0 --- /dev/null +++ b/theme_test_custo/static/shapes/curves/01.svg @@ -0,0 +1,4 @@ + + + diff --git a/theme_test_custo/static/shapes/hexagons/01.svg b/theme_test_custo/static/shapes/hexagons/01.svg new file mode 100644 index 000000000..253f1c249 --- /dev/null +++ b/theme_test_custo/static/shapes/hexagons/01.svg @@ -0,0 +1,3 @@ + + + diff --git a/theme_test_custo/static/src/img/logo.jpg b/theme_test_custo/static/src/img/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72d1fa547b680b97d8a9f174fd974c1a9ba8d781 GIT binary patch literal 65018 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

8VN}+ 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 literal 0 HcmV?d00001 diff --git a/theme_test_custo/static/src/img/template_footer_opt.svg b/theme_test_custo/static/src/img/template_footer_opt.svg new file mode 100644 index 000000000..24014954f --- /dev/null +++ b/theme_test_custo/static/src/img/template_footer_opt.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/theme_test_custo/static/src/img/template_header_opt.svg b/theme_test_custo/static/src/img/template_header_opt.svg new file mode 100644 index 000000000..24014954f --- /dev/null +++ b/theme_test_custo/static/src/img/template_header_opt.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/theme_test_custo/static/src/scss/bootstrap_overridden.scss b/theme_test_custo/static/src/scss/bootstrap_overridden.scss new file mode 100644 index 000000000..4f9f65a68 --- /dev/null +++ b/theme_test_custo/static/src/scss/bootstrap_overridden.scss @@ -0,0 +1,3 @@ +// Cards + +$card-border-width: 0 !default; diff --git a/theme_test_custo/static/src/scss/primary_variables.scss b/theme_test_custo/static/src/scss/primary_variables.scss new file mode 100644 index 000000000..7c42a6ced --- /dev/null +++ b/theme_test_custo/static/src/scss/primary_variables.scss @@ -0,0 +1,73 @@ +// -------------------------------------------------------------------------- // +// PRESETS +// -------------------------------------------------------------------------- // + +$o-website-values-palettes: ( + ( + // Colors + 'color-palettes-name': 'custom-theme', + + // Fonts + 'font': 'Source Sans Pro', + 'headings-font': 'Poppins', + 'navbar-font': 'Source Sans Pro', + 'buttons-font': 'Source Sans Pro', + + // Header + 'header-template': 'custom-theme', + 'logo-height': 4rem, + + // Footer + 'footer-template': 'custom-theme', + ), +); + +// -------------------------------------------------------------------------- // +// FONTS +// -------------------------------------------------------------------------- // + +$o-theme-font-configs: ( + 'Source Sans Pro': ( + 'family': ('Source Sans Pro', sans-serif), + 'url': 'Source+Sans+Pro:300,400,400i,600', + ), + 'Poppins': ( + 'family': ('Poppins', sans-serif), + 'url': 'Poppins:400,500', + ), +); + +// -------------------------------------------------------------------------- // +// COLORS +// -------------------------------------------------------------------------- // + +$o-color-palettes: map-merge($o-color-palettes, + ( + 'custom-theme': ( + 'o-color-1': #BEDB39, + 'o-color-2': #2C3E50, + 'o-color-3': #ECF0F1, + 'o-color-4': #FFFFFF, + 'o-color-5': #212529, + + 'menu': 1, + 'footer': 3, + 'copyright': 5, + ), + ) +); + +$o-selected-color-palettes-names: append($o-selected-color-palettes-names, 'custom-theme'); + +// ------------------------------------------------------------------------------ // +// SHAPES +// ------------------------------------------------------------------------------ // + +$o-bg-shapes: map-merge($o-bg-shapes, + ( + 'theme_test_custo':( + 'hexagons/01': ('position': center center, 'size': auto 100%, 'colors': (1), 'repeat-y': false), + 'curves/01': ('position': center bottom, 'size': 100% auto, 'colors': (2), 'repeat-y': false), + ), + ) +); diff --git a/theme_test_custo/static/tests/tours/theme_menu_hierarchies.js b/theme_test_custo/static/tests/tours/theme_menu_hierarchies.js new file mode 100644 index 000000000..fd9d92aa0 --- /dev/null +++ b/theme_test_custo/static/tests/tours/theme_menu_hierarchies.js @@ -0,0 +1,64 @@ +/** @odoo-module */ + +import wTourUtils from 'website.tour_utils'; + +wTourUtils.registerEditionTour('theme_menu_hierarchies', { + url: '/example', + test: true, +}, [ + { + content: 'Check Mega Menu is correctly created', + trigger: 'iframe #top_menu a.o_mega_menu_toggle', + }, { + content: 'Check Mega Menu content', + trigger: 'iframe #top_menu div.o_mega_menu.show .fa-cube', + run: () => null, // It's a check. + }, { + content: 'Check new top level menu is correctly created', + trigger: 'iframe #top_menu .nav-item.dropdown .dropdown-toggle:contains("Example 1")', + }, { + content: 'Check sub menu are correctly created', + trigger: 'iframe #top_menu .dropdown-menu.show a.dropdown-item:contains("Item 1")', + run: () => null, // It's a check. + }, { + content: 'The new menu hierarchy should not be included in the navbar', + trigger: 'iframe body:not(:has(#top_menu a[href="/dogs"]))', + run: () => null, // It's a check. + }, { + content: 'The new menu hierarchy should be inside the footer', + trigger: 'iframe footer ul li a[href="/dogs"]', + run: () => null, // It's a check. + }, + wTourUtils.clickOnEdit(), + { + content: 'Click on footer', + // TODO: this extra_trigger should be part of the `clickOnEdit` util + extra_trigger: "#oe_snippets.o_loaded", + trigger: 'iframe footer', + }, { + content: 'The theme custom footer template should be listed and selected', + trigger: 'we-select[data-variable="footer-template"] we-toggler img[src*="/theme_test_custo"]', + run: () => null, // It's a check. + }, { + content: 'Click on header', + trigger: 'iframe header', + }, { + content: 'The theme custom header template should be listed and selected', + trigger: 'we-select[data-variable="header-template"] we-toggler img[src*="/theme_test_custo"]', + run: () => null, // It's a check. + }, { + content: 'Click on image which has a shape', + trigger: 'iframe #wrap .s_text_image img[data-shape]', + }, { + content: 'The theme custom "Blob 01" shape should be listed and selected', + trigger: 'we-select[data-name="shape_img_opt"] we-toggler:contains("Blob 01")', + run: () => null, // It's a check. + }, { + content: 'Click on section which has a bg shape', + trigger: 'iframe #wrap .s_text_block[data-oe-shape-data]', + }, { + content: 'The theme custom "Curve 01" shape should be listed and selected', + trigger: 'we-select[data-name="bg_shape_opt"] we-toggler:contains("Curve 01")', + run: () => null, // It's a check. + }, +]); diff --git a/theme_test_custo/tests/__init__.py b/theme_test_custo/tests/__init__.py new file mode 100644 index 000000000..b6d8f9e1e --- /dev/null +++ b/theme_test_custo/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_theme_creation diff --git a/theme_test_custo/tests/test_theme_creation.py b/theme_test_custo/tests/test_theme_creation.py new file mode 100644 index 000000000..10bc2f61e --- /dev/null +++ b/theme_test_custo/tests/test_theme_creation.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import HttpCase, tagged + + +# TODO: `test_themes` tag should not be there, runbot config should be adapted +# to test this module too. There is a special config for the theme repo. +@tagged('post_install', '-at_install', 'test_themes') +class Crawler(HttpCase): + def test_01_menu_hierarchies(self): + theme_custo = self.env.ref('base.module_theme_test_custo') + website = self.env['website'].browse(1) + website.theme_id = theme_custo.id + theme_custo.with_context(load_all_views=True, apply_new_theme=True)._theme_load(website) + self.start_tour('/@/example', "theme_menu_hierarchies", login='admin') diff --git a/theme_test_custo/views/footer.xml b/theme_test_custo/views/footer.xml new file mode 100644 index 000000000..99ea15554 --- /dev/null +++ b/theme_test_custo/views/footer.xml @@ -0,0 +1,42 @@ + + + + + + + + + + diff --git a/theme_test_custo/views/header.xml b/theme_test_custo/views/header.xml new file mode 100644 index 000000000..dc856336d --- /dev/null +++ b/theme_test_custo/views/header.xml @@ -0,0 +1,45 @@ + + + + + + + + + +