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)