diff --git a/addons/event/event.py b/addons/event/event.py index 42ed73fc055..ab4b6e8f9fa 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -331,7 +331,11 @@ class event_registration(models.Model): body=_('New registration confirmed: %s.') % (self.name or ''), subtype="event.mt_event_registration") self.state = 'open' - self.env['event.mail'].run() + + # auto-trigger after_sub (on subscribe) mail schedulers, if needed + onsubscribe_schedulers = self.event_id.event_mail_ids.filtered( + lambda s: s.interval_type == 'after_sub') + onsubscribe_schedulers.execute() @api.one def button_reg_close(self): diff --git a/addons/event/tests/test_mail_schedule.py b/addons/event/tests/test_mail_schedule.py index c712e48919f..f92cf0fcc5b 100644 --- a/addons/event/tests/test_mail_schedule.py +++ b/addons/event/tests/test_mail_schedule.py @@ -48,27 +48,12 @@ class TestMailSchedule(TestEventCommon): 'email': 'reg1@example.com', }) - # check before event scheduler - schedulers = self.EventMail.search([('event_id', '=', test_event.id), ('interval_type', '=', 'before_event')]) - self.assertEqual(len(schedulers), 1, 'event: wrong scheduler creation') - self.assertEqual(schedulers[0].scheduled_date, datetime.datetime.strftime(event_date_begin + relativedelta(days=-2), tools.DEFAULT_SERVER_DATETIME_FORMAT), 'event: incorrect scheduled date') - - # execute event reminder scheduler - schedulers[0].execute() - - self.assertTrue(schedulers[0].mail_sent, 'event: reminder scheduler should have sent an email') - self.assertTrue(schedulers[0].done, 'event: reminder scheduler should be done') - - mails = self.env['mail.mail'].search([('subject', 'ilike', 'reminder'), ('date', '>=', datetime.datetime.strftime(now, tools.DEFAULT_SERVER_DATETIME_FORMAT))], order='date DESC', limit=3) - self.assertEqual(len(mails), 0, 'event: reminder to sent is not empty') - # check subscription scheduler schedulers = self.EventMail.search([('event_id', '=', test_event.id), ('interval_type', '=', 'after_sub')]) self.assertEqual(len(schedulers), 1, 'event: wrong scheduler creation') self.assertEqual(schedulers[0].scheduled_date, test_event.create_date, 'event: incorrect scheduled date for checking controller') - # execute subscription scheduler - schedulers[0].execute() + # verify that subscription scheduler was auto-executed after each registration self.assertEqual(len(schedulers[0].mail_registration_ids), 2, 'event: incorrect number of mail scheduled date') mails = self.env['mail.mail'].search([('subject', 'ilike', 'subscription'), ('date', '>=', datetime.datetime.strftime(now, tools.DEFAULT_SERVER_DATETIME_FORMAT))], order='date DESC', limit=3) @@ -76,3 +61,19 @@ class TestMailSchedule(TestEventCommon): for registration in schedulers[0].mail_registration_ids: self.assertTrue(registration.mail_sent, 'event: wrongly confirmed mailing on subscription') + + # check before event scheduler + schedulers = self.EventMail.search([('event_id', '=', test_event.id), ('interval_type', '=', 'before_event')]) + self.assertEqual(len(schedulers), 1, 'event: wrong scheduler creation') + self.assertEqual(schedulers[0].scheduled_date, datetime.datetime.strftime(event_date_begin + relativedelta(days=-2), tools.DEFAULT_SERVER_DATETIME_FORMAT), 'event: incorrect scheduled date') + + # execute event reminder scheduler explicitly + schedulers[0].execute() + + self.assertTrue(schedulers[0].mail_sent, 'event: reminder scheduler should have sent an email') + self.assertTrue(schedulers[0].done, 'event: reminder scheduler should be done') + + mails = self.env['mail.mail'].search([('subject', 'ilike', 'reminder'), ('date', '>=', datetime.datetime.strftime(now, tools.DEFAULT_SERVER_DATETIME_FORMAT))], order='date DESC', limit=3) + self.assertEqual(len(mails), 2, 'event: wrong number of reminders in outgoing mail queue') + +