summaryrefslogtreecommitdiff
path: root/addons/website/tests/test_ui.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website/tests/test_ui.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website/tests/test_ui.py')
-rw-r--r--addons/website/tests/test_ui.py194
1 files changed, 194 insertions, 0 deletions
diff --git a/addons/website/tests/test_ui.py b/addons/website/tests/test_ui.py
new file mode 100644
index 00000000..1a629bc4
--- /dev/null
+++ b/addons/website/tests/test_ui.py
@@ -0,0 +1,194 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import odoo
+import odoo.tests
+
+
+@odoo.tests.tagged('-at_install', 'post_install')
+class TestUiCustomizeTheme(odoo.tests.HttpCase):
+ def test_01_attachment_website_unlink(self):
+ ''' Some ir.attachment needs to be unlinked when a website is unlink,
+ otherwise some flows will just crash. That's the case when 2 website
+ have their theme color customized. Removing a website will make its
+ customized attachment generic, thus having 2 attachments with the
+ same URL available for other websites, leading to singleton errors
+ (among other).
+
+ But no all attachment should be deleted, eg we don't want to delete
+ a SO or invoice PDF coming from an ecommerce order.
+ '''
+ Website = self.env['website']
+ Page = self.env['website.page']
+ Attachment = self.env['ir.attachment']
+
+ website_default = Website.browse(1)
+ website_test = Website.create({'name': 'Website Test'})
+
+ # simulate attachment state when editing 2 theme through customize
+ custom_url = '/TEST/website/static/src/scss/options/colors/user_theme_color_palette.custom.web.assets_common.scss'
+ scss_attachment = Attachment.create({
+ 'name': custom_url,
+ 'type': 'binary',
+ 'mimetype': 'text/scss',
+ 'datas': '',
+ 'url': custom_url,
+ 'website_id': website_default.id
+ })
+ scss_attachment.copy({'website_id': website_test.id})
+
+ # simulate PDF from ecommerce order
+ # Note: it will only have its website_id flag if the website has a domain
+ # equal to the current URL (fallback or get_current_website())
+ so_attachment = Attachment.create({
+ 'name': 'SO036.pdf',
+ 'type': 'binary',
+ 'mimetype': 'application/pdf',
+ 'datas': '',
+ 'website_id': website_test.id
+ })
+
+ # avoid sql error on page website_id restrict
+ Page.search([('website_id', '=', website_test.id)]).unlink()
+ website_test.unlink()
+ self.assertEqual(Attachment.search_count([('url', '=', custom_url)]), 1, 'Should not left duplicates when deleting a website')
+ self.assertTrue(so_attachment.exists(), 'Most attachment should not be deleted')
+ self.assertFalse(so_attachment.website_id, 'Website should be removed')
+
+
+@odoo.tests.tagged('-at_install', 'post_install')
+class TestUiHtmlEditor(odoo.tests.HttpCase):
+ def test_html_editor_multiple_templates(self):
+ Website = self.env['website']
+ View = self.env['ir.ui.view']
+ Page = self.env['website.page']
+
+ self.generic_view = View.create({
+ 'name': 'Generic',
+ 'type': 'qweb',
+ 'arch': '''
+ <div>content</div>
+ ''',
+ 'key': 'test.generic_view',
+ })
+
+ self.generic_page = Page.create({
+ 'view_id': self.generic_view.id,
+ 'url': '/generic',
+ })
+
+ generic_page = Website.viewref('test.generic_view')
+ # Use an empty page layout with oe_structure id for this test
+ oe_structure_layout = '''
+ <t name="Generic" t-name="test.generic_view">
+ <t t-call="website.layout">
+ <div id="oe_structure_test_ui" class="oe_structure oe_empty"/>
+ </t>
+ </t>
+ '''
+ generic_page.arch = oe_structure_layout
+ self.start_tour("/", 'html_editor_multiple_templates', login='admin')
+ self.assertEqual(View.search_count([('key', '=', 'test.generic_view')]), 2, "homepage view should have been COW'd")
+ self.assertTrue(generic_page.arch == oe_structure_layout, "Generic homepage view should be untouched")
+ self.assertEqual(len(generic_page.inherit_children_ids.filtered(lambda v: 'oe_structure' in v.name)), 0, "oe_structure view should have been deleted when aboutus was COW")
+ specific_page = Website.with_context(website_id=1).viewref('test.generic_view')
+ self.assertTrue(specific_page.arch != oe_structure_layout, "Specific homepage view should have been changed")
+ self.assertEqual(len(specific_page.inherit_children_ids.filtered(lambda v: 'oe_structure' in v.name)), 1, "oe_structure view should have been created on the specific tree")
+
+ def test_html_editor_scss(self):
+ self.start_tour("/", 'test_html_editor_scss', login='admin')
+
+@odoo.tests.tagged('-at_install', 'post_install')
+class TestUiTranslate(odoo.tests.HttpCase):
+ def test_admin_tour_rte_translator(self):
+ fr_BE = self.env.ref('base.lang_fr_BE')
+ fr_BE.active = True
+ self.env.ref('website.default_website').language_ids |= fr_BE
+ self.start_tour("/", 'rte_translator', login='admin', timeout=120)
+
+
+@odoo.tests.common.tagged('post_install', '-at_install')
+class TestUi(odoo.tests.HttpCase):
+
+ def test_01_admin_tour_homepage(self):
+ self.start_tour("/?enable_editor=1", 'homepage', login='admin')
+
+ def test_02_restricted_editor(self):
+ self.restricted_editor = self.env['res.users'].create({
+ 'name': 'Restricted Editor',
+ 'login': 'restricted',
+ 'password': 'restricted',
+ 'groups_id': [(6, 0, [
+ self.ref('base.group_user'),
+ self.ref('website.group_website_publisher')
+ ])]
+ })
+ self.start_tour("/", 'restricted_editor', login='restricted')
+
+ def test_03_backend_dashboard(self):
+ self.start_tour("/", 'backend_dashboard', login='admin')
+
+ def test_04_website_navbar_menu(self):
+ website = self.env['website'].search([], limit=1)
+ self.env['website.menu'].create({
+ 'name': 'Test Tour Menu',
+ 'url': '/test-tour-menu',
+ 'parent_id': website.menu_id.id,
+ 'sequence': 0,
+ 'website_id': website.id,
+ })
+ self.start_tour("/", 'website_navbar_menu')
+
+ def test_05_specific_website_editor(self):
+ website_default = self.env['website'].search([], limit=1)
+ new_website = self.env['website'].create({'name': 'New Website'})
+ website_editor_assets_view = self.env.ref('website.assets_wysiwyg')
+ self.env['ir.ui.view'].create({
+ 'name': 'Editor Extension',
+ 'type': 'qweb',
+ 'inherit_id': website_editor_assets_view.id,
+ 'website_id': new_website.id,
+ 'arch': """
+ <xpath expr="." position="inside">
+ <script type="text/javascript">document.body.dataset.hello = 'world';</script>
+ </xpath>
+ """,
+ })
+ self.start_tour("/website/force/%s" % website_default.id, "generic_website_editor", login='admin')
+ self.start_tour("/website/force/%s" % new_website.id, "specific_website_editor", login='admin')
+
+ def test_06_public_user_editor(self):
+ website_default = self.env['website'].search([], limit=1)
+ website_default.homepage_id.arch = """
+ <t name="Homepage" t-name="website.homepage">
+ <t t-call="website.layout">
+ <textarea class="o_public_user_editor_test_textarea o_wysiwyg_loader"/>
+ </t>
+ </t>
+ """
+ self.start_tour("/", "public_user_editor", login=None)
+
+ def test_07_snippet_version(self):
+ website_snippets = self.env.ref('website.snippets')
+ self.env['ir.ui.view'].create([{
+ 'name': 'Test snip',
+ 'type': 'qweb',
+ 'key': 'website.s_test_snip',
+ 'arch': """
+ <section class="s_test_snip">
+ <t t-snippet-call="website.s_share"/>
+ </section>
+ """,
+ }, {
+ 'type': 'qweb',
+ 'inherit_id': website_snippets.id,
+ 'arch': """
+ <xpath expr="//t[@t-snippet='website.s_parallax']" position="after">
+ <t t-snippet="website.s_test_snip" t-thumbnail="/website/static/src/img/snippets_thumbs/s_website_form.svg"/>
+ </xpath>
+ """,
+ }])
+ self.start_tour("/", 'snippet_version', login='admin')
+
+ def test_08_website_style_custo(self):
+ self.start_tour("/", "website_style_edition", login="admin")