summaryrefslogtreecommitdiff
path: root/addons/website_event/tests
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_event/tests
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_event/tests')
-rw-r--r--addons/website_event/tests/__init__.py9
-rw-r--r--addons/website_event/tests/common.py116
-rw-r--r--addons/website_event/tests/test_event_internals.py47
-rw-r--r--addons/website_event/tests/test_ui.py11
-rw-r--r--addons/website_event/tests/test_visitor_events.py50
-rw-r--r--addons/website_event/tests/test_website_event.py13
-rw-r--r--addons/website_event/tests/test_website_event_access.py125
7 files changed, 371 insertions, 0 deletions
diff --git a/addons/website_event/tests/__init__.py b/addons/website_event/tests/__init__.py
new file mode 100644
index 00000000..77fa25d4
--- /dev/null
+++ b/addons/website_event/tests/__init__.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import common
+from . import test_event_internals
+from . import test_ui
+from . import test_visitor_events
+from . import test_website_event
+from . import test_website_event_access
diff --git a/addons/website_event/tests/common.py b/addons/website_event/tests/common.py
new file mode 100644
index 00000000..7fc54ad1
--- /dev/null
+++ b/addons/website_event/tests/common.py
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from datetime import datetime, timedelta, time
+from unittest.mock import patch
+
+from odoo.addons.event.tests.common import TestEventCommon
+from odoo.addons.mail.tests.common import mail_new_test_user
+from odoo.fields import Datetime as FieldsDatetime, Date as FieldsDate
+from odoo.tests.common import SavepointCase
+
+
+class EventDtPatcher(SavepointCase):
+
+ @classmethod
+ def setUpClass(cls):
+ super(EventDtPatcher, cls).setUpClass()
+
+ cls.reference_now = datetime(2020, 7, 6, 10, 0, 0)
+ cls.reference_today = datetime(2020, 7, 6)
+
+ cls.event_dt = patch(
+ 'odoo.addons.event.models.event_event.fields.Datetime',
+ wraps=FieldsDatetime
+ )
+ cls.wevent_dt = patch(
+ 'odoo.addons.website_event.models.event_event.fields.Datetime',
+ wraps=FieldsDatetime
+ )
+ cls.wevent_main_dt = patch(
+ 'odoo.addons.website_event.controllers.main.fields.Datetime',
+ wraps=FieldsDatetime
+ )
+ cls.event_date = patch(
+ 'odoo.addons.event.models.event_event.fields.Date',
+ wraps=FieldsDate
+ )
+ cls.wevent_main_date = patch(
+ 'odoo.addons.website_event.controllers.main.fields.Date',
+ wraps=FieldsDate
+ )
+ cls.mock_event_dt = cls.event_dt.start()
+ cls.mock_wevent_dt = cls.wevent_dt.start()
+ cls.mock_wevent_main_dt = cls.wevent_main_dt.start()
+ cls.mock_event_date = cls.event_date.start()
+ cls.mock_wevent_main_date = cls.wevent_main_date.start()
+ cls.mock_event_dt.now.return_value = cls.reference_now
+ cls.mock_wevent_dt.now.return_value = cls.reference_now
+ cls.mock_wevent_main_dt.now.return_value = cls.reference_now
+ cls.mock_event_date.today.return_value = cls.reference_today
+ cls.mock_wevent_main_date.today.return_value = cls.reference_today
+ cls.addClassCleanup(cls.event_dt.stop)
+ cls.addClassCleanup(cls.wevent_dt.stop)
+ cls.addClassCleanup(cls.wevent_main_dt.stop)
+ cls.addClassCleanup(cls.event_date.stop)
+ cls.addClassCleanup(cls.wevent_main_date.stop)
+
+
+class TestWebsiteEventCommon(TestEventCommon):
+
+ @classmethod
+ def setUpClass(cls):
+ super(TestWebsiteEventCommon, cls).setUpClass()
+
+ cls.company_main = cls.env.user.company_id
+ cls.user_event_web_manager = mail_new_test_user(
+ cls.env, login='user_event_web_manager',
+ name='Martin Sales Manager', email='crm_manager@test.example.com',
+ company_id=cls.company_main.id,
+ notification_type='inbox',
+ groups='event.group_event_manager,website.group_website_designer',
+ )
+
+ def _get_menus(self):
+ return set(['Introduction', 'Location', 'Register'])
+
+ def _assert_website_menus(self, event, menu_entries=None):
+ self.assertTrue(event.menu_id)
+
+ if menu_entries is None:
+ menu_entries = self._get_menus()
+
+ menus = self.env['website.menu'].search([('parent_id', '=', event.menu_id.id)])
+ self.assertEqual(len(menus), len(menu_entries))
+ self.assertEqual(set(menus.mapped('name')), menu_entries)
+
+ for page_specific in ['Introduction', 'Location']:
+ view = self.env['ir.ui.view'].search(
+ [('name', '=', page_specific + ' ' + event.name)]
+ )
+ if page_specific in menu_entries:
+ self.assertTrue(bool(view))
+ # TDE FIXME: page deletion not done in 13.3 for Introduction/Location, difficult to fix
+ # without website.event.menu model (or crappy code based on name)
+ # else:
+ # self.assertFalse(bool(view))
+
+
+class TestEventOnlineCommon(TestEventCommon, EventDtPatcher):
+
+ @classmethod
+ def setUpClass(cls):
+ super(TestEventOnlineCommon, cls).setUpClass()
+
+ # event if 8-18 in Europe/Brussels (DST) (first day: begins at 9, last day: ends at 15)
+ cls.event_0.write({
+ 'date_begin': datetime.combine(cls.reference_now, time(7, 0)) - timedelta(days=1),
+ 'date_end': datetime.combine(cls.reference_now, time(13, 0)) + timedelta(days=1),
+ })
+
+ cls.event_customer.write({
+ 'website_description': '<p>I am your best customer, %s</p>' % cls.event_customer.name,
+ })
+ cls.event_customer2.write({
+ 'website_description': '<p>I am your best customer, %s</p>' % cls.event_customer2.name,
+ })
diff --git a/addons/website_event/tests/test_event_internals.py b/addons/website_event/tests/test_event_internals.py
new file mode 100644
index 00000000..9339da20
--- /dev/null
+++ b/addons/website_event/tests/test_event_internals.py
@@ -0,0 +1,47 @@
+# -*- 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 TestWebsiteEventCommon
+from odoo.tests.common import users
+
+
+class TestEventWebsite(TestWebsiteEventCommon):
+
+ @users('user_eventmanager')
+ def test_menu_create(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)
+
+ @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.assertTrue(event.website_menu)
+ self._assert_website_menus(event)
+
+ introduction_menu = event.menu_id.child_id.filtered(lambda menu: menu.name == 'Introduction')
+ introduction_menu.unlink()
+
+ self.assertTrue(event.website_menu)
+ self._assert_website_menus(event, set(['Location', 'Register']))
+
+ @users('user_eventmanager')
+ def test_menu_update(self):
+ event = self.env['event.event'].browse(self.event_0.id)
+ self.assertFalse(event.menu_id)
+ event.website_menu = True
+ self._assert_website_menus(event)
diff --git a/addons/website_event/tests/test_ui.py b/addons/website_event/tests/test_ui.py
new file mode 100644
index 00000000..7c99f40c
--- /dev/null
+++ b/addons/website_event/tests/test_ui.py
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import odoo.tests
+from odoo import tools
+
+
+@odoo.tests.tagged('post_install', '-at_install')
+class TestUi(odoo.tests.HttpCase):
+ def test_admin(self):
+ self.start_tour("/", 'event', login='admin', step_delay=100)
diff --git a/addons/website_event/tests/test_visitor_events.py b/addons/website_event/tests/test_visitor_events.py
new file mode 100644
index 00000000..814cd531
--- /dev/null
+++ b/addons/website_event/tests/test_visitor_events.py
@@ -0,0 +1,50 @@
+# -*- 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.event.tests.common import TestEventCommon
+
+
+class TestVisitorEvents(TestEventCommon):
+ def test_visitor_events(self):
+ event_1 = self.env['event.event'].create({
+ 'name': 'OtherEvent',
+ 'auto_confirm': True,
+ 'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)),
+ 'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)),
+ })
+
+ [main_visitor, child_visitor] = self.env['website.visitor'].create([{
+ 'name': 'Main Visitor',
+ 'event_registration_ids': [(0, 0, {
+ 'event_id': self.event_0.id
+ })]
+ }, {
+ 'name': 'Child Visitor',
+ 'event_registration_ids': [(0, 0, {
+ 'event_id': event_1.id
+ })]
+ }])
+
+ self.assertEqual(self.event_0, main_visitor.event_registered_ids)
+ self.assertEqual(event_1, child_visitor.event_registered_ids)
+ self.assertEqual(
+ main_visitor,
+ self.env['website.visitor'].search([('event_registered_ids', 'in', self.event_0.ids)])
+ )
+ self.assertEqual(
+ child_visitor,
+ self.env['website.visitor'].search([('event_registered_ids', 'in', event_1.ids)])
+ )
+ child_visitor._link_to_visitor(main_visitor)
+ self.assertEqual(self.event_0 | event_1, main_visitor.event_registered_ids)
+ self.assertEqual(
+ main_visitor | child_visitor,
+ self.env['website.visitor'].with_context(active_test=False).search([('event_registered_ids', 'in', self.event_0.ids)])
+ )
+ self.assertEqual(
+ main_visitor | child_visitor,
+ self.env['website.visitor'].with_context(active_test=False).search([('event_registered_ids', 'in', event_1.ids)])
+ )
diff --git a/addons/website_event/tests/test_website_event.py b/addons/website_event/tests/test_website_event.py
new file mode 100644
index 00000000..54e657d2
--- /dev/null
+++ b/addons/website_event/tests/test_website_event.py
@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.addons.website.tests.test_base_url import TestUrlCommon
+from odoo.tests import tagged
+
+
+@tagged('-at_install', 'post_install')
+class TestUrlCanonical(TestUrlCommon):
+
+ def test_01_canonical_url(self):
+ self._assertCanonical('/event?date=all', self.domain + '/event')
+ self._assertCanonical('/event?date=old', self.domain + '/event?date=old')
diff --git a/addons/website_event/tests/test_website_event_access.py b/addons/website_event/tests/test_website_event_access.py
new file mode 100644
index 00000000..1782e058
--- /dev/null
+++ b/addons/website_event/tests/test_website_event_access.py
@@ -0,0 +1,125 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from datetime import datetime, timedelta
+
+from odoo.addons.mail.tests.common import mail_new_test_user
+from odoo.tests import HttpCase, tagged
+from odoo.tools import mute_logger
+
+
+@tagged('post_install', '-at_install')
+class TestWebsiteEventAccess(HttpCase):
+ def setUp(self):
+ super(TestWebsiteEventAccess, self).setUp()
+
+ self.events = self.env['event.event'].create([{
+ 'name': 'Event 0 - Sitemap test',
+ 'website_published': True,
+ 'date_begin': datetime.today() - timedelta(days=1),
+ 'date_end': datetime.today() + timedelta(days=1),
+ }, {
+ 'name': 'Event 1 - Sitemap test',
+ 'website_published': True,
+ 'date_begin': datetime.today() - timedelta(days=1),
+ 'date_end': datetime.today() + timedelta(days=1),
+ }, {
+ 'name': 'Event 2 - Sitemap test',
+ 'date_begin': datetime.today() - timedelta(days=1),
+ 'date_end': datetime.today() + timedelta(days=1),
+ }])
+
+ self.event_manager = mail_new_test_user(
+ self.env, name='Gandalf le blanc', login='event_manager', password='event_manager', email='event.manager@example.com',
+ groups='event.group_event_manager,base.group_user'
+ )
+
+ self.event_user = mail_new_test_user(
+ self.env, name='Frodon Sacquet', login='event_user', password='event_user', email='event.user@example.com',
+ groups='event.group_event_user,base.group_user'
+ )
+
+ self.portal_user = mail_new_test_user(
+ self.env, name='Smeagol', login='user_portal', password='user_portal', email='portal@example.com',
+ groups='base.group_portal'
+ )
+
+ def test_sitemap(self):
+ resp = self.url_open('/sitemap.xml')
+ self.assertTrue('/event/event-0' in resp.text, 'Published events must be present in the sitemap')
+ self.assertTrue('/event/event-1' in resp.text, 'Published events must be present in the sitemap')
+ self.assertFalse('/event/event-2' in resp.text, 'Unpublished events must not be present in the sitemap')
+
+ def test_events_access_1(self):
+ """Access to a published event with public user."""
+ published_events = self.events.filtered(lambda event: event.website_published)
+ resp = self.url_open('/event/%i' % published_events[0].id)
+ self.assertEqual(resp.status_code, 200, 'We must have access to published event')
+
+ def test_events_access_2(self):
+ """Access to an unpublished event with public user."""
+ with mute_logger('odoo.addons.http_routing.models.ir_http'):
+ unpublished_events = self.events.filtered(lambda event: not event.website_published)
+ resp = self.url_open('/event/%i' % unpublished_events[0].id)
+ self.assertEqual(resp.status_code, 403, 'We must not have access to unpublished event')
+
+ def test_events_access_3(self):
+ """Access to an published event with admin user."""
+ self.authenticate('event_manager', 'event_manager')
+ published_events = self.events.filtered(lambda event: event.website_published)
+ resp = self.url_open('/event/%i' % published_events[0].id)
+ self.assertEqual(resp.status_code, 200, 'Admin must have access to published event.')
+
+ def test_events_access_4(self):
+ """Access to an unpublished event with admin user."""
+ self.authenticate('event_manager', 'event_manager')
+ unpublished_events = self.events.filtered(lambda event: not event.website_published)
+ resp = self.url_open('/event/%i' % unpublished_events[0].id)
+ self.assertEqual(resp.status_code, 200, 'Admin must have access to unpublished event.')
+
+ def test_events_access_5(self):
+ """Access to an published event with event user."""
+ self.authenticate('event_user', 'event_user')
+ published_events = self.events.filtered(lambda event: event.website_published)
+ resp = self.url_open('/event/%i' % published_events[0].id)
+ self.assertEqual(resp.status_code, 200, 'Event user must have access to published event.')
+
+ def test_events_access_6(self):
+ """Access to an unpublished event with event user."""
+ self.authenticate('event_user', 'event_user')
+ unpublished_events = self.events.filtered(lambda event: not event.website_published)
+ resp = self.url_open('/event/%i' % unpublished_events[0].id)
+ self.assertEqual(resp.status_code, 200, 'Event user must have access to unpublished event.')
+
+ def test_events_access_7(self):
+ """Access to an published event with portal user."""
+ self.authenticate('user_portal', 'user_portal')
+ published_events = self.events.filtered(lambda event: event.website_published)
+ resp = self.url_open('/event/%i' % published_events[0].id)
+ self.assertEqual(resp.status_code, 200, 'Portal user must have access to published event.')
+
+ def test_events_access_8(self):
+ """Access to an unpublished event with portal user."""
+ with mute_logger('odoo.addons.http_routing.models.ir_http'):
+ self.authenticate('user_portal', 'user_portal')
+ unpublished_events = self.events.filtered(lambda event: not event.website_published)
+ resp = self.url_open('/event/%i' % unpublished_events[0].id)
+ self.assertEqual(resp.status_code, 403, 'Portal user must not have access to unpublished event.')
+
+ def test_events_home_page_1(self):
+ """Portal can only view the published events."""
+ self.authenticate('user_portal', 'user_portal')
+ published_event = self.events.filtered(lambda event: event.website_published)[0]
+ unpublished_event = self.events.filtered(lambda event: not event.website_published)[0]
+ resp = self.url_open('/event')
+ self.assertTrue(unpublished_event.name not in resp.text, 'Portal should not see the unpublished events.')
+ self.assertTrue(published_event.name in resp.text, 'Portal must see the published events.')
+
+ def test_events_home_page_2(self):
+ """Admin can see all the events."""
+ self.authenticate('event_manager', 'event_manager')
+ published_event = self.events.filtered(lambda event: event.website_published)[0]
+ unpublished_event = self.events.filtered(lambda event: not event.website_published)[0]
+ resp = self.url_open('/event')
+ self.assertTrue(unpublished_event.name in resp.text, 'Admin must see the unpublished events.')
+ self.assertTrue(published_event.name in resp.text, 'Admin must see the published events.')