From b5c7099b9562721cd00f4626e78df0bda3db0fb4 Mon Sep 17 00:00:00 2001 From: "Lucas Perais (lpe)" Date: Thu, 7 Feb 2019 13:43:00 +0000 Subject: [PATCH] [FIX] website_event[_track]: create menus on create Before this commit, the website menus were created only on write on an event After this commit, the menus are created at create time too OPW 1914343 closes odoo/odoo#30919 --- addons/website_event/models/event.py | 15 ++++++-- addons/website_event/tests/__init__.py | 1 + .../website_event/tests/test_event_website.py | 37 +++++++++++++++++++ addons/website_event_track/models/event.py | 19 ++++------ addons/website_event_track/tests/__init__.py | 1 + .../tests/test_event_track_website.py | 34 +++++++++++++++++ 6 files changed, 93 insertions(+), 14 deletions(-) create mode 100644 addons/website_event/tests/test_event_website.py create mode 100644 addons/website_event_track/tests/__init__.py create mode 100644 addons/website_event_track/tests/test_event_track_website.py diff --git a/addons/website_event/models/event.py b/addons/website_event/models/event.py index 460f1bd818c..ec78aff6741 100644 --- a/addons/website_event/models/event.py +++ b/addons/website_event/models/event.py @@ -72,9 +72,7 @@ class Event(models.Model): (_('Register'), '/event/%s/register' % slug(self), False), ] - @api.multi - def write(self, vals): - res = super(Event, self).write(vals) + def _toggle_create_website_menus(self, vals): for event in self: if 'website_menu' in vals: if event.menu_id and not event.website_menu: @@ -85,6 +83,17 @@ class Event(models.Model): event.menu_id = root_menu for sequence, (name, url, xml_id) in enumerate(event._get_menu_entries()): event._create_menu(sequence, name, url, xml_id) + + @api.model + def create(self, vals): + res = super(Event, self).create(vals) + res._toggle_create_website_menus(vals) + return res + + @api.multi + def write(self, vals): + res = super(Event, self).write(vals) + self._toggle_create_website_menus(vals) return res def _create_menu(self, sequence, name, url, xml_id): diff --git a/addons/website_event/tests/__init__.py b/addons/website_event/tests/__init__.py index 2235dde4188..8db62f8ae97 100644 --- a/addons/website_event/tests/__init__.py +++ b/addons/website_event/tests/__init__.py @@ -2,3 +2,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import test_ui +from . import test_event_website diff --git a/addons/website_event/tests/test_event_website.py b/addons/website_event/tests/test_event_website.py new file mode 100644 index 00000000000..bc8e9b18a1e --- /dev/null +++ b/addons/website_event/tests/test_event_website.py @@ -0,0 +1,37 @@ +from datetime import datetime, timedelta + +from odoo import fields +from odoo.addons.event.tests.common import TestEventCommon + + +class TestEventWebsiteHelper(TestEventCommon): + def _get_menus(self): + return set(['Introduction', 'Location', 'Register']) + + def _assert_website_menus(self, event): + self.assertTrue(event.menu_id) + + menus = self.env['website.menu'].search([('parent_id', '=', event.menu_id.id)]) + self.assertEqual(len(menus), len(self._get_menus())) + self.assertEqual(set(menus.mapped('name')), self._get_menus()) + + +class TestEventWebsite(TestEventWebsiteHelper): + + def test_create_menu0(self): + event = self.env['event.event'].create({ + 'name': 'TestEvent', + 'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)), + 'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)), + 'registration_ids': [(0, 0, { + 'partner_id': self.user_eventuser.partner_id.id, + })], + 'website_menu': True, + }) + + self._assert_website_menus(event) + + def test_write_menu0(self): + self.assertFalse(self.event_0.menu_id) + self.event_0.website_menu = True + self._assert_website_menus(self.event_0) diff --git a/addons/website_event_track/models/event.py b/addons/website_event_track/models/event.py index 422b91bef67..159272983e5 100644 --- a/addons/website_event_track/models/event.py +++ b/addons/website_event_track/models/event.py @@ -61,18 +61,17 @@ class Event(models.Model): for event in self: event.sponsor_count = result.get(event.id, 0) - @api.multi - def write(self, vals): - res = super(Event, self).write(vals) + def _toggle_create_website_menus(self, vals): + super(Event, self)._toggle_create_website_menus(vals) for event in self: if 'website_track' in vals: if vals['website_track']: for sequence, (name, url, xml_id, menu_type) in enumerate(self._get_track_menu_entries()): menu = super(Event, self)._create_menu(sequence, name, url, xml_id) self.env['website.event.menu'].create({ - 'menu_id':menu.id, - 'event_id':self.id, - 'menu_type':menu_type, + 'menu_id': menu.id, + 'event_id': self.id, + 'menu_type': menu_type, }) else: self.track_menu_ids.mapped('menu_id').unlink() @@ -81,14 +80,12 @@ class Event(models.Model): for sequence, (name, url, xml_id, menu_type) in enumerate(self._get_track_proposal_menu_entries()): menu = super(Event, self)._create_menu(sequence, name, url, xml_id) self.env['website.event.menu'].create({ - 'menu_id':menu.id, - 'event_id':self.id, - 'menu_type':menu_type, + 'menu_id': menu.id, + 'event_id': self.id, + 'menu_type': menu_type, }) else: self.track_proposal_menu_ids.mapped('menu_id').unlink() - return res - def _get_track_menu_entries(self): self.ensure_one() diff --git a/addons/website_event_track/tests/__init__.py b/addons/website_event_track/tests/__init__.py new file mode 100644 index 00000000000..a2186e6f137 --- /dev/null +++ b/addons/website_event_track/tests/__init__.py @@ -0,0 +1 @@ +from . import test_event_track_website \ No newline at end of file diff --git a/addons/website_event_track/tests/test_event_track_website.py b/addons/website_event_track/tests/test_event_track_website.py new file mode 100644 index 00000000000..b84ba41547c --- /dev/null +++ b/addons/website_event_track/tests/test_event_track_website.py @@ -0,0 +1,34 @@ +from datetime import datetime, timedelta + +from odoo import fields +from odoo.addons.website_event.tests.test_event_website import TestEventWebsiteHelper + + +class TestEventWebsiteTrack(TestEventWebsiteHelper): + + def _get_menus(self): + return super(TestEventWebsiteTrack, self)._get_menus() | set(['Talks', 'Agenda', 'Talk Proposals']) + + def test_create_menu1(self): + event = self.env['event.event'].create({ + 'name': 'TestEvent', + 'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)), + 'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)), + 'registration_ids': [(0, 0, { + 'partner_id': self.user_eventuser.partner_id.id, + })], + 'website_menu': True, + 'website_track': True, + 'website_track_proposal': True, + }) + + self._assert_website_menus(event) + + def test_write_menu1(self): + self.assertFalse(self.event_0.menu_id) + self.event_0.write({ + 'website_menu': True, + 'website_track': True, + 'website_track_proposal': True, + }) + self._assert_website_menus(self.event_0)