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_track/tests | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_event_track/tests')
| -rw-r--r-- | addons/website_event_track/tests/__init__.py | 7 | ||||
| -rw-r--r-- | addons/website_event_track/tests/common.py | 28 | ||||
| -rw-r--r-- | addons/website_event_track/tests/test_track_internals.py | 194 | ||||
| -rw-r--r-- | addons/website_event_track/tests/test_website.py | 21 | ||||
| -rw-r--r-- | addons/website_event_track/tests/test_website_event.py | 90 |
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) |
