diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website_event/tests | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_event/tests')
| -rw-r--r-- | addons/website_event/tests/__init__.py | 9 | ||||
| -rw-r--r-- | addons/website_event/tests/common.py | 116 | ||||
| -rw-r--r-- | addons/website_event/tests/test_event_internals.py | 47 | ||||
| -rw-r--r-- | addons/website_event/tests/test_ui.py | 11 | ||||
| -rw-r--r-- | addons/website_event/tests/test_visitor_events.py | 50 | ||||
| -rw-r--r-- | addons/website_event/tests/test_website_event.py | 13 | ||||
| -rw-r--r-- | addons/website_event/tests/test_website_event_access.py | 125 |
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.') |
