[IMP] test_event_full: add tests for template and seats synchronization

Purpose of this commit is to add tests about template (``event.type`` model)
synchronization when creating an event. Some tests already exist in event sub
addons but this one has all community features activate. It eases checking the
final result.

Tests about seats computation and registration creation prevention due to
limits are also added as this behavior may be re-implemented soon.

Task-2703285 (Event performance improvements)
Task-2703289 (Event testing and coverage)

Part-of: odoo/odoo#81068
This commit is contained in:
Thibault Delavallée
2021-12-16 17:33:48 +00:00
parent ad5c08ca09
commit ea56328280
3 changed files with 162 additions and 1 deletions
+2
View File
@@ -14,7 +14,9 @@ automatic lead generation, full Online support, ...
'event',
'event_booth',
'event_crm',
'event_crm_sale',
'event_sale',
'event_sms',
'website_event_booth_sale_exhibitor',
'website_event_crm_questions',
'website_event_exhibitor',
+2 -1
View File
@@ -3,5 +3,6 @@
from . import common
from . import test_event_crm
from . import test_wevent_register
from . import test_event_event
from . import test_event_security
from . import test_wevent_register
@@ -0,0 +1,158 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import datetime, timedelta
from freezegun import freeze_time
from odoo import Command, exceptions
from odoo.addons.test_event_full.tests.common import TestEventFullCommon
from odoo.tests.common import users
class TestEventEvent(TestEventFullCommon):
@users('event_user')
def test_event_create_wtype(self):
""" Test a single event creation with a type defining all sub records. """
event_type = self.env['event.type'].browse(self.test_event_type.ids)
event_values = dict(
self.event_base_vals,
event_type_id=event_type.id,
)
event = self.env['event.event'].create([event_values])
event.write({
'event_ticket_ids': [
Command.update(
event.event_ticket_ids[0].id,
{'start_sale_datetime': self.reference_now + timedelta(hours=1)},
),
Command.update(
event.event_ticket_ids[1].id,
{'start_sale_datetime': self.reference_now + timedelta(hours=2)},
)
],
})
# check result
self.assertEqual(event.address_id, self.env.user.company_id.partner_id)
self.assertTrue(event.auto_confirm)
self.assertEqual(event.country_id, self.env.user.company_id.country_id)
self.assertEqual(event.date_tz, 'Europe/Paris')
self.assertEqual(event.event_booth_count, 4)
self.assertEqual(len(event.event_mail_ids), 3)
self.assertEqual(len(event.event_ticket_ids), 2)
self.assertTrue(event.introduction_menu)
self.assertTrue(event.location_menu)
self.assertTrue(event.menu_register_cta)
self.assertEqual(event.message_partner_ids, self.env.user.partner_id + self.env.user.company_id.partner_id)
self.assertEqual(event.note, '<p>Template note</p>')
self.assertTrue(event.register_menu)
self.assertEqual(len(event.question_ids), 3)
self.assertTrue(event.seats_limited)
self.assertEqual(event.seats_max, 30)
self.assertEqual(event.stage_id, self.stage_def)
self.assertEqual(event.tag_ids, self.tags)
self.assertTrue(event.website_menu)
# check time dependent computation: before event
with freeze_time(self.reference_now):
self.assertFalse(event.is_finished)
self.assertFalse(event.is_ongoing)
self.assertFalse(event.event_registrations_started)
# check time dependent computation: registrations started
with freeze_time(self.reference_now + timedelta(hours=1)):
event.invalidate_cache(fnames=['is_finished', 'is_ongoing', 'event_registrations_started'])
self.assertFalse(event.is_finished)
self.assertFalse(event.is_ongoing)
self.assertTrue(event.event_registrations_started)
# check time dependent computation: during event
with freeze_time(self.reference_now + timedelta(days=1, hours=1)):
event.invalidate_cache(fnames=['is_finished', 'is_ongoing', 'event_registrations_started'])
self.assertFalse(event.is_finished)
self.assertTrue(event.is_ongoing)
self.assertTrue(event.event_registrations_started)
@freeze_time('2021-12-01 11:00:00')
@users('event_user')
def test_event_seats_and_schedulers(self):
now = datetime.now() # used to force create_date, as sql is not wrapped by freeze gun
self.env.cr._now = now
test_event = self.env['event.event'].browse(self.test_event.ids)
ticket_1 = test_event.event_ticket_ids.filtered(lambda ticket: ticket.name == 'Ticket1')
ticket_2 = test_event.event_ticket_ids.filtered(lambda ticket: ticket.name == 'Ticket2')
# check initial data
self.assertTrue(test_event.event_registrations_started)
self.assertEqual(test_event.seats_available, 30)
self.assertEqual(ticket_1.seats_available, 10)
self.assertTrue(ticket_1.sale_available)
self.assertEqual(ticket_2.seats_available, 0)
self.assertFalse(ticket_2.sale_available)
# make 9 registrations (let 1 on ticket)
with self.mock_mail_gateway():
self.env['event.registration'].create([
{'create_date': now,
'email': 'test.customer.%02d@test.example.com' % x,
'phone': '04560011%02d' % x,
'event_id': test_event.id,
'event_ticket_id': ticket_1.id,
'name': 'Customer %d' % x,
}
for x in range(0, 9)
])
# generated emails from scheduler
self.assertEqual(len(self._new_mails), 9)
# event and ticket seats update
self.assertEqual(len(test_event.registration_ids), 9)
self.assertEqual(test_event.seats_available, 21)
self.assertEqual(ticket_1.seats_available, 1)
self.assertEqual(ticket_2.seats_available, 0)
# prevent registration due to ticket limit
with self.assertRaises(exceptions.ValidationError):
self.env['event.registration'].create([
{'create_date': now,
'email': 'additional.customer.%02d@test.example.com' % x,
'phone': '04560011%02d' % x,
'event_id': test_event.id,
'event_ticket_id': ticket_1.id,
'name': 'Additional Customer %d' % x,
}
for x in range(0, 2)
])
# make 20 registrations (on free ticket)
with self.mock_mail_gateway():
self.env['event.registration'].create([
{'create_date': now,
'email': 'other.customer.%02d@test.example.com' % x,
'phone': '04560011%02d' % x,
'event_id': test_event.id,
'event_ticket_id': ticket_2.id,
'name': 'Other Customer %d' % x,
}
for x in range(0, 20)
])
# event and ticket seats update
self.assertEqual(len(test_event.registration_ids), 29)
self.assertEqual(test_event.seats_available, 1)
self.assertEqual(ticket_1.seats_available, 1)
self.assertEqual(ticket_2.seats_available, 0)
# prevent registration due to event limit
with self.assertRaises(exceptions.ValidationError):
self.env['event.registration'].create([
{'create_date': now,
'email': 'additional.customer.%02d@test.example.com' % x,
'phone': '04560011%02d' % x,
'event_id': test_event.id,
'event_ticket_id': ticket_2.id,
'name': 'Additional Customer %d' % x,
}
for x in range(0, 2)
])