diff --git a/addons/website/models/website.py b/addons/website/models/website.py index a371d760e8e..0c18a2c05d9 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -1114,6 +1114,13 @@ class Menu(models.Model): res = super(Menu, self).create(vals) return res # Only one record is returned but multiple could have been created + @api.multi + def unlink(self): + default_menu = self.env.ref('website.main_menu', raise_if_not_found=False) + for menu in self.filtered(lambda m: default_menu and m.parent_id.id == default_menu.id): + self.env['website.menu'].search([('url', '=', menu.url), ('id', '!=', menu.id)]).unlink() + return super(Menu, self).unlink() + @api.one def _compute_visible(self): visible = True diff --git a/addons/website/tests/test_menu.py b/addons/website/tests/test_menu.py index c907b986171..e2a80902aea 100644 --- a/addons/website/tests/test_menu.py +++ b/addons/website/tests/test_menu.py @@ -59,3 +59,11 @@ class TestMenu(common.TransactionCase): 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")