153 lines
6.7 KiB
Python
153 lines
6.7 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from datetime import datetime, timedelta
|
||
|
|
||
|
from odoo import fields
|
||
|
from odoo.addons.website_event.tests.common import OnlineEventCase
|
||
|
from odoo.tests.common import HttpCase, users
|
||
|
|
||
|
|
||
|
class TestEventMenus(OnlineEventCase, HttpCase):
|
||
|
|
||
|
@users('user_eventmanager')
|
||
|
def test_menu_management(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)),
|
||
|
'website_menu': True,
|
||
|
'community_menu': False,
|
||
|
})
|
||
|
self.assertTrue(event.website_menu)
|
||
|
self.assertTrue(event.introduction_menu)
|
||
|
self.assertTrue(event.location_menu)
|
||
|
self.assertTrue(event.register_menu)
|
||
|
self.assertFalse(event.community_menu)
|
||
|
self._assert_website_menus(event, ['Introduction', 'Location', 'Info'], menus_out=['Community'])
|
||
|
|
||
|
event.community_menu = True
|
||
|
self._assert_website_menus(event, ['Introduction', 'Location', 'Info', 'Community'])
|
||
|
|
||
|
# test create without any requested menus
|
||
|
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)),
|
||
|
'website_menu': False,
|
||
|
})
|
||
|
self.assertFalse(event.website_menu)
|
||
|
self.assertFalse(event.introduction_menu)
|
||
|
self.assertFalse(event.location_menu)
|
||
|
self.assertFalse(event.register_menu)
|
||
|
self.assertFalse(event.community_menu)
|
||
|
self.assertFalse(event.menu_id)
|
||
|
|
||
|
# test update of website_menu triggering 3 sub menus
|
||
|
event.write({'website_menu': True})
|
||
|
self._assert_website_menus(event, ['Introduction', 'Location', 'Info'], menus_out=['Community'])
|
||
|
|
||
|
@users('user_event_web_manager')
|
||
|
def test_menu_management_frontend(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)),
|
||
|
'website_menu': True,
|
||
|
'community_menu': False,
|
||
|
})
|
||
|
self._assert_website_menus(event, ['Introduction', 'Location', 'Info'], menus_out=['Community'])
|
||
|
|
||
|
# simulate menu removal from frontend: aka unlinking a menu
|
||
|
event.menu_id.child_id.filtered(lambda menu: menu.name == 'Introduction').unlink()
|
||
|
|
||
|
self.assertTrue(event.website_menu)
|
||
|
self._assert_website_menus(event, ['Location', 'Info'], menus_out=['Introduction', 'Community'])
|
||
|
|
||
|
# re-created from backend
|
||
|
event.introduction_menu = True
|
||
|
self._assert_website_menus(event, ['Introduction', 'Location', 'Info'], menus_out=['Community'])
|
||
|
|
||
|
def test_submenu_url(self):
|
||
|
""" Test that the different URL of a submenu page of an event are accessible """
|
||
|
old_event_1, old_event_2, event_1, event_2, event_3 = self.env["event.event"].create(
|
||
|
[
|
||
|
{
|
||
|
"community_menu": False,
|
||
|
"date_begin": fields.Datetime.to_string(
|
||
|
datetime.today() + timedelta(days=1)
|
||
|
),
|
||
|
"date_end": fields.Datetime.to_string(
|
||
|
datetime.today() + timedelta(days=15)
|
||
|
),
|
||
|
"is_published": True,
|
||
|
"name": "Test Event",
|
||
|
"website_menu": True,
|
||
|
}
|
||
|
for _ in range(5)
|
||
|
]
|
||
|
)
|
||
|
|
||
|
# Use previous URL for submenu page
|
||
|
old_event_1.introduction_menu_ids.menu_id.url = f"/event/test-event-{old_event_1.id}/page/introduction-test-event"
|
||
|
old_event_2.introduction_menu_ids.menu_id.url = f"/event/test-event-{old_event_2.id}/page/introduction-test-event"
|
||
|
old_event_menus = (old_event_1 + old_event_2).introduction_menu_ids
|
||
|
self.assertEqual(len(old_event_menus.view_id), 2, "Each menu should have a view")
|
||
|
|
||
|
# Menu with unique page
|
||
|
new_event_menus = (event_1 + event_2).introduction_menu_ids
|
||
|
self.assertEqual(len(new_event_menus.view_id), 2, "Each menu should have a view")
|
||
|
|
||
|
# Menu without views
|
||
|
menu_without_view = event_3._create_menu(1, 'custom', f"/event/test-event-{event_3.id}/page/introduction-test-event", 'website_event.template_intro', 'introduction')
|
||
|
self.assertEqual(
|
||
|
len(self.env['website.event.menu'].search([('menu_id', 'in', menu_without_view.ids)]).view_id), 0,
|
||
|
"The menu should not have a view assigned because an URL has been given manually"
|
||
|
)
|
||
|
|
||
|
all_menus = old_event_menus.menu_id + new_event_menus.menu_id + menu_without_view
|
||
|
for menu in all_menus:
|
||
|
res = self.url_open(menu.url)
|
||
|
self.assertEqual(res.status_code, 200)
|
||
|
|
||
|
def test_submenu_url_uniqueness(self):
|
||
|
"""Ensure that the last part of the menus URL (used to retrieve the right view)
|
||
|
are unique when creating two events with same name."""
|
||
|
event_1, event_2 = self.env["event.event"].create(
|
||
|
[
|
||
|
{
|
||
|
"name": "Test Event",
|
||
|
"date_begin": fields.Datetime.to_string(
|
||
|
datetime.today() + timedelta(days=1)
|
||
|
),
|
||
|
"date_end": fields.Datetime.to_string(
|
||
|
datetime.today() + timedelta(days=15)
|
||
|
),
|
||
|
"website_menu": True,
|
||
|
"community_menu": False,
|
||
|
}
|
||
|
for _ in range(2)
|
||
|
]
|
||
|
)
|
||
|
|
||
|
# Skip the register and community menus since they already have a unique URL
|
||
|
event_1_menus = event_1.menu_id.child_id.filtered(
|
||
|
lambda menu: menu.name in ["Introduction", "Location"]
|
||
|
)
|
||
|
event_2_menus = event_2.menu_id.child_id.filtered(
|
||
|
lambda menu: menu.name in ["Introduction", "Location"]
|
||
|
)
|
||
|
for event_1_menu, event_2_menu in zip(event_1_menus, event_2_menus):
|
||
|
end_url_1 = event_1_menu.url.split("/")[-1]
|
||
|
end_url_2 = event_2_menu.url.split("/")[-1]
|
||
|
self.assertNotEqual(end_url_1, end_url_2)
|
||
|
IrUiView = self.env["ir.ui.view"]
|
||
|
self.assertEqual(
|
||
|
IrUiView.search_count([("key", "=", "website_event.%s" % end_url_1)]),
|
||
|
1,
|
||
|
)
|
||
|
self.assertEqual(
|
||
|
IrUiView.search_count([("key", "=", "website_event.%s" % end_url_2)]),
|
||
|
1,
|
||
|
)
|