Odoo18-Base/addons/website_event/tests/test_event_menus.py

153 lines
6.7 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
# -*- 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,
)