summaryrefslogtreecommitdiff
path: root/addons/website_event_track/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_track/tests
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_event_track/tests')
-rw-r--r--addons/website_event_track/tests/__init__.py7
-rw-r--r--addons/website_event_track/tests/common.py28
-rw-r--r--addons/website_event_track/tests/test_track_internals.py194
-rw-r--r--addons/website_event_track/tests/test_website.py21
-rw-r--r--addons/website_event_track/tests/test_website_event.py90
5 files changed, 340 insertions, 0 deletions
diff --git a/addons/website_event_track/tests/__init__.py b/addons/website_event_track/tests/__init__.py
new file mode 100644
index 00000000..b4bf8180
--- /dev/null
+++ b/addons/website_event_track/tests/__init__.py
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import common
+from . import test_track_internals
+from . import test_website
+from . import test_website_event
diff --git a/addons/website_event_track/tests/common.py b/addons/website_event_track/tests/common.py
new file mode 100644
index 00000000..5215f620
--- /dev/null
+++ b/addons/website_event_track/tests/common.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.addons.website_event.tests.common import TestEventOnlineCommon
+
+
+class TestEventTrackOnlineCommon(TestEventOnlineCommon):
+
+ @classmethod
+ def setUpClass(cls):
+ super(TestEventTrackOnlineCommon, cls).setUpClass()
+
+ cls.sponsor_type_0 = cls.env['event.sponsor.type'].create({
+ 'name': 'GigaTop',
+ 'sequence': 1,
+ })
+ cls.sponsor_0_partner = cls.env['res.partner'].create({
+ 'name': 'EventSponsor',
+ 'country_id': cls.env.ref('base.be').id,
+ 'email': 'event.sponsor@example.com',
+ 'phone': '04856112233',
+ })
+
+ cls.sponsor_0 = cls.env['event.sponsor'].create({
+ 'partner_id': cls.sponsor_0_partner.id,
+ 'event_id': cls.event_0.id,
+ 'sponsor_type_id': cls.sponsor_type_0.id,
+ })
diff --git a/addons/website_event_track/tests/test_track_internals.py b/addons/website_event_track/tests/test_track_internals.py
new file mode 100644
index 00000000..b87a8c3c
--- /dev/null
+++ b/addons/website_event_track/tests/test_track_internals.py
@@ -0,0 +1,194 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from datetime import datetime, timedelta
+from unittest.mock import patch
+
+from odoo import fields
+from odoo.addons.website.models.website_visitor import WebsiteVisitor
+from odoo.addons.website_event_track.tests.common import TestEventTrackOnlineCommon
+from odoo.tests.common import users
+
+
+class TestTrackData(TestEventTrackOnlineCommon):
+
+ @users('user_eventmanager')
+ def test_track_partner_sync(self):
+ """ Test registration computed fields about partner """
+ test_email = '"Nibbler In Space" <nibbler@futurama.example.com>'
+ test_phone = '0456001122'
+ test_bio = '<p>UserInput</p>'
+ test_bio_void = '<p><br/></p>'
+
+ event = self.env['event.event'].browse(self.event_0.ids)
+ customer = self.env['res.partner'].browse(self.event_customer.id)
+
+ # take all from partner
+ new_track = self.env['event.track'].create({
+ 'event_id': event.id,
+ 'name': 'Mega Track',
+ 'partner_id': customer.id,
+ })
+ self.assertEqual(new_track.partner_id, customer)
+ self.assertEqual(new_track.partner_name, customer.name)
+ self.assertEqual(new_track.partner_email, customer.email)
+ self.assertEqual(new_track.partner_phone, customer.phone)
+ self.assertEqual(new_track.partner_biography, customer.website_description)
+ self.assertIn(customer.name, new_track.partner_biography, 'Low-level test: ensure correctly updated')
+
+ # partial update
+ new_track = self.env['event.track'].create({
+ 'event_id': event.id,
+ 'name': 'Mega Track',
+ 'partner_id': customer.id,
+ 'partner_name': 'Nibbler In Space',
+ 'partner_email': test_email,
+ })
+ self.assertEqual(new_track.partner_id, customer)
+ self.assertEqual(
+ new_track.partner_name, 'Nibbler In Space',
+ 'Track should take user input over computed partner value')
+ self.assertEqual(
+ new_track.partner_email, test_email,
+ 'Track should take user input over computed partner value')
+ self.assertEqual(
+ new_track.partner_phone, customer.phone,
+ 'Track should take partner value if not user input')
+
+ # already filled information should not be updated
+ new_track = self.env['event.track'].create({
+ 'event_id': event.id,
+ 'name': 'Mega Track',
+ 'partner_name': 'Nibbler In Space',
+ 'partner_phone': test_phone,
+ 'partner_biography': test_bio,
+ })
+ self.assertEqual(new_track.partner_name, 'Nibbler In Space')
+ self.assertEqual(new_track.partner_email, False)
+ self.assertEqual(new_track.partner_phone, test_phone)
+ self.assertEqual(new_track.partner_biography, test_bio)
+ new_track.write({'partner_id': customer.id})
+ self.assertEqual(new_track.partner_id, customer)
+ self.assertEqual(
+ new_track.partner_name, customer.name,
+ 'Track customer should take over existing value')
+ self.assertEqual(
+ new_track.partner_email, customer.email,
+ 'Track customer should take over existing value')
+ self.assertEqual(
+ new_track.partner_phone, customer.phone,
+ 'Track customer should take over existing value')
+
+
+class TestTrackSuggestions(TestEventTrackOnlineCommon):
+
+ def test_track_suggestion(self):
+ [location_1, location_2] = self.env['event.track.location'].create([
+ {'name': 'Location 1'},
+ {'name': 'Location 2'},
+ ])
+
+ [tag_1, tag_2, tag_3, tag_4] = self.env['event.track.tag'].create([
+ {'name': 'Tag 1'}, {'name': 'Tag 2'}, {'name': 'Tag 3'}, {'name': 'Tag 4'}
+ ])
+
+ date = fields.Datetime.from_string(datetime.now().strftime('%Y-%m-%d %H:00:00'))
+ [track_1, track_2, track_3, track_4, track_5, track_6] = self.env['event.track'].create([{
+ 'name': 'Track 1',
+ 'location_id': location_1.id,
+ 'event_id': self.event_0.id,
+ 'tag_ids': [(4, tag_1.id), (4, tag_2.id)],
+ 'date': date + timedelta(hours=-1),
+ }, {
+ 'name': 'Track 2',
+ 'location_id': location_2.id,
+ 'event_id': self.event_0.id,
+ 'date': date,
+ }, {
+ 'name': 'Track 3',
+ 'location_id': location_2.id,
+ 'event_id': self.event_0.id,
+ 'tag_ids': [(4, tag_1.id), (4, tag_3.id), (4, tag_4.id)],
+ 'date': date,
+ }, {
+ 'name': 'Track 4',
+ 'event_id': self.event_0.id,
+ 'tag_ids': [(4, tag_1.id), (4, tag_2.id)],
+ 'date': date,
+ }, {
+ 'name': 'Track 5',
+ 'event_id': self.event_0.id,
+ 'tag_ids': [(4, tag_1.id), (4, tag_3.id)],
+ 'wishlisted_by_default': True,
+ 'date': date,
+ }, {
+ 'name': 'Track 6',
+ 'location_id': location_1.id,
+ 'event_id': self.event_0.id,
+ 'tag_ids': [(4, tag_1.id), (4, tag_3.id)],
+ 'date': date,
+ }])
+
+ emp_visitor = self.env['website.visitor'].create({
+ 'name': 'Visitor',
+ 'partner_id': self.user_employee.partner_id.id
+ })
+ visitor_track = self.env['event.track.visitor'].create({
+ 'visitor_id': emp_visitor.id,
+ 'track_id': track_3.id,
+ 'is_wishlisted': True,
+ })
+
+ with patch.object(WebsiteVisitor, '_get_visitor_from_request', lambda *args, **kwargs: emp_visitor), \
+ self.with_user('user_employee'):
+ current_track = self.env['event.track'].browse(track_1.id)
+ all_suggestions = current_track._get_track_suggestions()
+ self.assertEqual(
+ all_suggestions.ids,
+ (track_3 + track_5 + track_4 + track_6 + track_2).ids # whlst / wishlst def / tags count / location
+ )
+
+ track_suggestion = current_track._get_track_suggestions(limit=1)
+ self.assertEqual(track_suggestion, track_3,
+ 'Returned track should be the manually wishlisted one')
+
+ # remove wishlist, keynote should be top
+ visitor_track.unlink()
+ track_suggestion = current_track._get_track_suggestions(limit=1)
+ self.assertEqual(
+ track_suggestion, track_5,
+ 'Returned track should be the default wishlisted one')
+
+ # toggle wishlisted by default off through blacklist
+ track_5_visitor = self.env['event.track.visitor'].sudo().create({
+ 'visitor_id': emp_visitor.id,
+ 'track_id': track_5.id,
+ 'is_blacklisted': True,
+ })
+ track_suggestion = current_track._get_track_suggestions(limit=1)
+ self.assertEqual(
+ track_suggestion, track_4,
+ 'Returned track should the one with the most common tags as keynote is blacklisted')
+ track_5_visitor.unlink()
+
+ # remove keynote default, now based on tags
+ track_5.write({'wishlisted_by_default': False})
+ # all_suggestions.invalidate_cache(fnames=['is_reminder_on'])
+ track_suggestion = current_track._get_track_suggestions(limit=1)
+ self.assertEqual(
+ track_suggestion, track_4,
+ 'Returned track should the one with the most common tags')
+
+ # remove tags, now based on location
+ all_suggestions.sudo().write({'tag_ids': [(5,)]})
+ track_suggestion = current_track._get_track_suggestions(limit=1)
+ self.assertEqual(
+ track_suggestion, track_6,
+ 'Returned track should the one with matching location')
+
+ # remove location, now based o random
+ all_suggestions.sudo().write({'location_id': False})
+ track_suggestion = current_track._get_track_suggestions(limit=1)
+ self.assertTrue(
+ track_suggestion in [track_2, track_3, track_4, track_5, track_6],
+ "Returned track should the a random one (but not the one we're trying to get suggestion for)")
diff --git a/addons/website_event_track/tests/test_website.py b/addons/website_event_track/tests/test_website.py
new file mode 100644
index 00000000..55626730
--- /dev/null
+++ b/addons/website_event_track/tests/test_website.py
@@ -0,0 +1,21 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+# -*- coding: utf-8 -*-
+
+from odoo.tests import tagged
+from odoo.tests.common import TransactionCase
+
+
+@tagged('post_install','-at_install')
+class TestWebsite(TransactionCase):
+
+ def test_event_app_name(self):
+ website0 = self.env['website'].create({'name': 'Foo'})
+ self.assertEqual(website0.events_app_name, 'Foo Events')
+
+ website1 = self.env['website'].create({'name': 'Foo', 'events_app_name': 'Bar Events'})
+ self.assertEqual(website1.events_app_name, 'Bar Events')
+
+ website2 = self.env['website'].create({'name': 'Foo'})
+ self.assertEqual(website2.events_app_name, 'Foo Events')
+ website2.write({'name': 'Bar'})
+ self.assertEqual(website2.events_app_name, 'Foo Events')
diff --git a/addons/website_event_track/tests/test_website_event.py b/addons/website_event_track/tests/test_website_event.py
new file mode 100644
index 00000000..233018d4
--- /dev/null
+++ b/addons/website_event_track/tests/test_website_event.py
@@ -0,0 +1,90 @@
+# -*- 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 TestEventWebsiteTrack(TestWebsiteEventCommon):
+
+ def _get_menus(self):
+ return super(TestEventWebsiteTrack, self)._get_menus() | set(['Community', 'Talks', 'Agenda', 'Talk Proposals'])
+
+ @users('user_eventmanager')
+ def test_create_menu(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,
+ 'name': 'test_reg',
+ })],
+ 'website_menu': True,
+ 'community_menu': True,
+ 'website_track': True,
+ 'website_track_proposal': True,
+ })
+
+ 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': True,
+ 'website_track': True,
+ 'website_track_proposal': True,
+ })
+ self.assertTrue(event.website_track)
+ self.assertTrue(event.website_track_proposal)
+ self._assert_website_menus(event)
+
+ introduction_menu = event.menu_id.child_id.filtered(lambda menu: menu.name == 'Introduction')
+ introduction_menu.unlink()
+ self._assert_website_menus(event, set(['Location', 'Register', 'Community', 'Talks', 'Agenda', 'Talk Proposals']))
+
+ menus = event.menu_id.child_id.filtered(lambda menu: menu.name in ['Agenda', 'Talk Proposals'])
+ menus.unlink()
+ self.assertTrue(event.website_track)
+ self.assertFalse(event.website_track_proposal)
+
+ menus = event.menu_id.child_id.filtered(lambda menu: menu.name in ['Talks'])
+ menus.unlink()
+ self.assertFalse(event.website_track)
+ self.assertFalse(event.website_track_proposal)
+
+ self._assert_website_menus(event, set(['Location', 'Register', 'Community']))
+
+ event.write({'website_track_proposal': True})
+ self.assertFalse(event.website_track)
+ self.assertTrue(event.website_track_proposal)
+ self._assert_website_menus(event, set(['Location', 'Register', 'Community', 'Talk Proposals']))
+
+ event.write({'website_track': True})
+ self.assertTrue(event.website_track)
+ self.assertTrue(event.website_track_proposal)
+ self._assert_website_menus(event, set(['Location', 'Register', 'Community', 'Talks', 'Agenda', 'Talk Proposals']))
+
+ @users('user_eventmanager')
+ def test_write_menu(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': False,
+ })
+ self.assertFalse(event.menu_id)
+ event.write({
+ 'website_menu': True,
+ 'community_menu': True,
+ 'website_track': True,
+ 'website_track_proposal': True,
+ })
+ self._assert_website_menus(event)