Commit 850e1675eb improved the website.menu creation on module install
(eg: /shop for website_sale).
This commit aims to do the same on module uninstall.
Before this commit:
Uninstalling a website module would uninstall its website.menu (/shop) stored
on the default menu tree.
But the copies of that default menu, on websites, would remains.
Indeed, there is no direct link between the default menus and its copies.
More annoyingly, installing that website module again after uninstalling it
would create a new copy of the default menu, resulting in multiple same menus
on website.
Now, if the menu to be uninstalled is in the default tree menu, we remove all
its copies (the website.menu having that same URL).
Closes #27488, closes #27721
70 lines
2.7 KiB
Python
70 lines
2.7 KiB
Python
# coding: utf-8
|
|
from odoo.tests import common
|
|
|
|
|
|
class TestMenu(common.TransactionCase):
|
|
|
|
def test_menu_got_duplicated(self):
|
|
Menu = self.env['website.menu']
|
|
total_menu_items = Menu.search_count([])
|
|
|
|
self.menu_root = Menu.create({
|
|
'name': 'Root',
|
|
})
|
|
|
|
self.menu_child = Menu.create({
|
|
'name': 'Child',
|
|
'parent_id': self.menu_root.id,
|
|
})
|
|
|
|
self.assertEqual(total_menu_items + 4, Menu.search_count([]), "Creating a menu without a website_id should create this menu for every website_id")
|
|
|
|
def test_menu_count(self):
|
|
Menu = self.env['website.menu']
|
|
total_menu_items = Menu.search_count([])
|
|
|
|
top_menu = self.env['website'].get_current_website().menu_id
|
|
data = [
|
|
{
|
|
'id': 'new-1',
|
|
'parent_id': top_menu.id,
|
|
'name': 'New Menu Specific 1',
|
|
'url': '/new-specific-1',
|
|
},
|
|
{
|
|
'id': 'new-2',
|
|
'parent_id': top_menu.id,
|
|
'name': 'New Menu Specific 2',
|
|
'url': '/new-specific-2',
|
|
}
|
|
]
|
|
Menu.save(1, {'data': data, 'to_delete': []})
|
|
|
|
self.assertEqual(total_menu_items + 2, Menu.search_count([]), "Creating 2 new menus should create only 2 menus records")
|
|
|
|
def test_default_menu_for_new_website(self):
|
|
Website = self.env['website']
|
|
Menu = self.env['website.menu']
|
|
total_menu_items = Menu.search_count([])
|
|
|
|
# Simulating website.menu created on module install (blog, shop, forum..) that will be created on default menu tree
|
|
default_menu = self.env.ref('website.main_menu')
|
|
Menu.create({
|
|
'name': 'Sub Default Menu',
|
|
'parent_id': default_menu.id,
|
|
})
|
|
self.assertEqual(total_menu_items + 3, Menu.search_count([]), "Creating a default child menu should create it as such and copy it on every website")
|
|
|
|
# Ensure new website got a top menu
|
|
total_menus = Menu.search_count([])
|
|
Website.create({'name': 'new website'})
|
|
self.assertEqual(total_menus + 4, Menu.search_count([]), "New website's bootstraping should have duplicate default menu tree (Top/Home/Contactus/Sub Default Menu)")
|
|
|
|
def test_default_menu_unlink(self):
|
|
Menu = self.env['website.menu']
|
|
total_menu_items = Menu.search_count([])
|
|
|
|
default_menu = self.env.ref('website.main_menu')
|
|
default_menu.child_id[0].unlink()
|
|
self.assertEqual(total_menu_items - 3, Menu.search_count([]), "Deleting a default menu item should delete its 'copies' (same URL) from website's menu trees. In this case, the default child menu and its copies on website 1 and website 2")
|