[IMP] event: improve some type -> event configuration tests

Purpose of this commit is to add some tests related to event_type to event
configuration. Indeed changing a type on an event may change its sub models
(mails, tickets, questions). Asserting current behavior is necessary before
tweaking behavior considered as to be improved.

Task ID 2244487
PR odoo/odoo#52998
FwdPort of odoo/odoo#52923

X-original-commit: 6fb42e70164bab05681b11f1e76e320db0266445
This commit is contained in:
Thibault Delavallée
2020-06-16 09:14:31 +00:00
parent 71578c69f6
commit 7c37d457e7
2 changed files with 107 additions and 47 deletions
+1 -1
View File
@@ -92,7 +92,7 @@ class TestEventCommon(common.SavepointCase):
'date_tz': 'Europe/Brussels',
})
# set country in order to format belgium numbers
# set country in order to format Belgian numbers
cls.event_0.company_id.write({'country_id': cls.env.ref('base.be').id})
@classmethod
+106 -46
View File
@@ -69,63 +69,25 @@ class TestEventData(TestEventCommon):
self.assertTrue(event.is_one_day)
self.assertFalse(event.is_ongoing)
@users('user_eventmanager')
def test_event_fields(self):
event_type = self.event_type_complex.with_user(self.env.user)
event = self.env['event.event'].create({
'name': 'Event Update Type',
'event_type_id': event_type.id,
'date_begin': FieldsDatetime.to_string(datetime.today() + timedelta(days=1)),
'date_end': FieldsDatetime.to_string(datetime.today() + timedelta(days=15)),
})
self.assertEqual(event.address_id, self.env.user.company_id.partner_id)
# seats: coming from event type configuration
self.assertTrue(event.seats_limited)
self.assertEqual(event.seats_available, event.event_type_id.seats_max)
self.assertEqual(event.seats_unconfirmed, 0)
self.assertEqual(event.seats_reserved, 0)
self.assertEqual(event.seats_used, 0)
self.assertEqual(event.seats_expected, 0)
# create registration in order to check the seats computation
self.assertTrue(event.auto_confirm)
for x in range(5):
reg = self.env['event.registration'].create({
'event_id': event.id,
'name': 'reg_open',
})
self.assertEqual(reg.state, 'open')
reg_draft = self.env['event.registration'].create({
'event_id': event.id,
'name': 'reg_draft',
})
reg_draft.write({'state': 'draft'})
reg_done = self.env['event.registration'].create({
'event_id': event.id,
'name': 'reg_done',
})
reg_done.write({'state': 'done'})
self.assertEqual(event.seats_available, event.event_type_id.seats_max - 6)
self.assertEqual(event.seats_unconfirmed, 1)
self.assertEqual(event.seats_reserved, 5)
self.assertEqual(event.seats_used, 1)
self.assertEqual(event.seats_expected, 7)
@users('user_eventmanager')
@mute_logger('odoo.models.unlink')
def test_event_configuration_from_type(self):
""" Test data computation of event coming from its event.type template.
Some one2many notably are duplicated from type configuration and some
advanced testing is required, notably mail schedulers. """
self.assertEqual(self.env.user.tz, 'Europe/Brussels')
event_type = self.event_type_complex.with_user(self.env.user)
# ------------------------------------------------------------
# STARTING DATA
# ------------------------------------------------------------
event_type = self.env['event.type'].browse(self.event_type_complex.id)
event_type.write({
'use_mail_schedule': False,
'use_ticket': False,
})
self.assertEqual(event_type.event_type_mail_ids, self.env['event.type.mail'])
self.assertEqual(event_type.event_type_ticket_ids, self.env['event.type.ticket'])
event = self.env['event.event'].create({
'name': 'Event Update Type',
@@ -136,22 +98,77 @@ class TestEventData(TestEventCommon):
self.assertFalse(event.seats_limited)
self.assertFalse(event.auto_confirm)
self.assertEqual(event.event_mail_ids, self.env['event.mail'])
self.assertEqual(event.event_ticket_ids, self.env['event.event.ticket'])
registration = self._create_registrations(event, 1)
self.assertEqual(registration.state, 'draft') # event is not auto confirm
# ------------------------------------------------------------
# FILL SYNC TEST
# ------------------------------------------------------------
# change template to a one with mails -> fill event as it is void
event_type.write({
'use_mail_schedule': True,
'event_type_mail_ids': [(5, 0), (0, 0, {
'interval_nbr': 1, 'interval_unit': 'days', 'interval_type': 'before_event',
'template_id': self.env['ir.model.data'].xmlid_to_res_id('event.event_reminder')})]
'template_id': self.env['ir.model.data'].xmlid_to_res_id('event.event_reminder')})],
'use_ticket': True,
'event_type_ticket_ids': [(5, 0), (0, 0, {'name': 'TestRegistration'})],
})
event.write({'event_type_id': event_type.id})
self.assertEqual(event.date_tz, 'Europe/Paris')
self.assertTrue(event.seats_limited)
self.assertEqual(event.seats_max, event_type.seats_max)
self.assertTrue(event.auto_confirm)
# check 2many fields being populated
self.assertEqual(len(event.event_mail_ids), 1)
self.assertEqual(event.event_mail_ids.interval_nbr, 1)
self.assertEqual(event.event_mail_ids.interval_unit, 'days')
self.assertEqual(event.event_mail_ids.interval_type, 'before_event')
self.assertEqual(event.event_mail_ids.template_id, self.env.ref('event.event_reminder'))
self.assertEqual(len(event.event_ticket_ids), 1)
event_ticket1 = event.event_ticket_ids[0]
self.assertEqual(event_ticket1.name, 'TestRegistration')
# ------------------------------------------------------------
# RESET TEST
# ------------------------------------------------------------
# link registration to ticket
registration.write({'event_ticket_id': event_ticket1.id})
self.assertEqual(registration.event_ticket_id, event_ticket1)
# change template to a void one for mails -> do not reset event
# change template to a one with other tickets -> reset event
event_type.write({
'use_mail_schedule': False,
'event_type_mail_ids': [(5, 0)],
'event_type_ticket_ids': [(5, 0),
(0, 0, {'name': 'Registration1'}),
(0, 0, {'name': 'Registration2'})],
})
event._compute_from_event_type()
self.assertEqual(len(event.event_mail_ids), 1)
self.assertEqual(len(event.event_ticket_ids), 2)
self.assertEqual(
set(event.mapped('event_ticket_ids.name')),
set(['Registration1', 'Registration2'])
)
# registration loose its ticket
self.assertEqual(registration.event_ticket_id, self.env['event.event.ticket'])
# change template to a one with different mails -> reset event
event_type.write({
'use_mail_schedule': True,
'event_type_mail_ids': [(5, 0), (0, 0, {
'interval_nbr': 3, 'interval_unit': 'days', 'interval_type': 'after_event',
'template_id': self.env['ir.model.data'].xmlid_to_res_id('event.event_reminder')})]
})
event._compute_from_event_type()
self.assertEqual(len(event.event_mail_ids), 1)
self.assertEqual(event.event_mail_ids.interval_nbr, 3)
self.assertEqual(event.event_mail_ids.interval_type, 'after_event')
@users('user_eventmanager')
def test_event_registrable(self):
@@ -235,6 +252,49 @@ class TestEventData(TestEventCommon):
finished_or_upcoming_event_ids = self.env['event.event']._search([('is_ongoing', '=', False)])
self.assertNotIn(event_2.id, finished_or_upcoming_event_ids)
@users('user_eventmanager')
def test_event_seats(self):
event_type = self.event_type_complex.with_user(self.env.user)
event = self.env['event.event'].create({
'name': 'Event Update Type',
'event_type_id': event_type.id,
'date_begin': FieldsDatetime.to_string(datetime.today() + timedelta(days=1)),
'date_end': FieldsDatetime.to_string(datetime.today() + timedelta(days=15)),
})
self.assertEqual(event.address_id, self.env.user.company_id.partner_id)
# seats: coming from event type configuration
self.assertTrue(event.seats_limited)
self.assertEqual(event.seats_available, event.event_type_id.seats_max)
self.assertEqual(event.seats_unconfirmed, 0)
self.assertEqual(event.seats_reserved, 0)
self.assertEqual(event.seats_used, 0)
self.assertEqual(event.seats_expected, 0)
# create registration in order to check the seats computation
self.assertTrue(event.auto_confirm)
for x in range(5):
reg = self.env['event.registration'].create({
'event_id': event.id,
'name': 'reg_open',
})
self.assertEqual(reg.state, 'open')
reg_draft = self.env['event.registration'].create({
'event_id': event.id,
'name': 'reg_draft',
})
reg_draft.write({'state': 'draft'})
reg_done = self.env['event.registration'].create({
'event_id': event.id,
'name': 'reg_done',
})
reg_done.write({'state': 'done'})
self.assertEqual(event.seats_available, event.event_type_id.seats_max - 6)
self.assertEqual(event.seats_unconfirmed, 1)
self.assertEqual(event.seats_reserved, 5)
self.assertEqual(event.seats_used, 1)
self.assertEqual(event.seats_expected, 7)
class TestEventTicketData(TestEventCommon):