[FIX] website_slides: fix slide.channel mail completed

PURPOSE

Fix the 'multi' behavior when sending completion emails for slide.channels.

SPECS

There was a typo in the 'slide.channel#_send_completed_mail' method that
prevented it from correctly working in "multi" mode.

A new test was introduced to ensure the fix is working.

LINKS

Task 2170708

closes odoo/odoo#61004

Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
Aurélien Warnon
2020-10-30 10:30:18 +00:00
parent 94a6d8d7c9
commit 4ebe8ccf00
2 changed files with 37 additions and 1 deletions
@@ -105,7 +105,7 @@ class ChannelUsersRelation(models.Model):
continue
email_values.update(
author_id=self.channel_id.user_id.partner_id.id or self.env.company.partner_id.id,
author_id=record.channel_id.user_id.partner_id.id or self.env.company.partner_id.id,
auto_delete=True,
recipient_ids=[(4, pid) for pid in email_values['partner_ids']],
)
@@ -42,6 +42,42 @@ class TestSlidesManagement(slides_common.SlidesCase):
else:
self.assertTrue(slide.is_published, "All slides should be unpublished when a channel is archived, except categories")
def test_mail_completed(self):
""" When the slide.channel is completed, an email is supposed to be sent to people that completed it. """
channel_2 = self.env['slide.channel'].create({
'name': 'Test Course 2',
'slide_ids': [(0, 0, {
'name': 'Test Slide 1'
})]
})
all_users = self.user_officer | self.user_emp | self.user_portal
all_channels = self.channel | channel_2
all_channels.sudo()._action_add_members(all_users.partner_id)
slide_slide_vals = []
for slide in all_channels.slide_content_ids:
for user in self.user_officer | self.user_emp:
slide_slide_vals.append({
'slide_id': slide.id,
'channel_id': self.channel.id,
'partner_id': user.partner_id.id,
'completed': True
})
self.env['slide.slide.partner'].create(slide_slide_vals)
created_mails = self.env['mail.mail'].search([])
# 2 'congratulations' emails are supposed to be sent to user_officer and user_emp
for user in self.user_officer | self.user_emp:
self.assertTrue(
any(mail.model == 'slide.channel.partner' and user.partner_id in mail.recipient_ids
for mail in created_mails)
)
# user_portal has not finished the course, it should not receive anything
self.assertFalse(
any(mail.model == 'slide.channel.partner' and self.user_portal.partner_id in mail.recipient_ids
for mail in created_mails)
)
class TestSequencing(slides_common.SlidesCase):
@users('user_officer')