mirror of
https://github.com/bringout/oca-ocb-core.git
synced 2026-04-21 04:52:00 +02:00
167 lines
7 KiB
Python
167 lines
7 KiB
Python
from datetime import datetime
|
|
|
|
from odoo.addons.event.tests.common import EventCase
|
|
from odoo.addons.mail.tests.common import MockEmail
|
|
from odoo.tests import Form, tagged, users
|
|
from odoo.tools import formataddr
|
|
|
|
|
|
@tagged("event_mail", "mail_template", "mail_thread", "post_install", "-at_install")
|
|
class TestMailing(EventCase, MockEmail):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
# freeze some datetimes, and ensure more than 1D+1H before event starts
|
|
# to ease time-based scheduler check
|
|
# Since `now` is used to set the `create_date` of an event and create_date
|
|
# has often microseconds, we set it to ensure that the scheduler we still be
|
|
# launched if scheduled_date == create_date - microseconds
|
|
cls.reference_now = datetime(2024, 7, 20, 14, 30, 15, 123456)
|
|
cls.event_date_begin = datetime(2024, 7, 22, 8, 0, 0)
|
|
cls.event_date_end = datetime(2024, 7, 24, 18, 0, 0)
|
|
with cls.mock_datetime_and_now(cls, cls.reference_now):
|
|
cls.test_event = cls.env['event.event'].create({
|
|
'date_begin': cls.event_date_begin,
|
|
'date_end': cls.event_date_end,
|
|
'date_tz': 'Europe/Brussels',
|
|
'event_mail_ids': False,
|
|
'name': 'TestEvent',
|
|
})
|
|
cls.registrations = cls.env["event.registration"].create([
|
|
{
|
|
"event_id": cls.test_event.id,
|
|
"partner_id": cls.event_customer.id,
|
|
},
|
|
{
|
|
"event_id": cls.test_event.id,
|
|
"partner_id": cls.event_customer2.id,
|
|
},
|
|
{
|
|
"email": "robodoo@example.com",
|
|
"event_id": cls.test_event.id,
|
|
"name": "Robodoo",
|
|
},
|
|
{
|
|
"email": "another.email@example.com",
|
|
"event_id": cls.test_event.id,
|
|
"name": "Another Email",
|
|
"partner_id": cls.event_customer2.id,
|
|
},
|
|
])
|
|
|
|
@users("user_eventuser")
|
|
def test_event_mail_attendees(self):
|
|
template_form = Form(
|
|
self.env["mail.template"].with_context(default_model="event.registration", default_name="Test Template")
|
|
)
|
|
template = template_form.save()
|
|
event = self.test_event.with_user(self.env.user)
|
|
event.write({
|
|
'event_mail_ids': [
|
|
(0, 0, {
|
|
'interval_type': 'before_event',
|
|
'interval_nbr': 0,
|
|
'template_ref': f'mail.template,{template.id}',
|
|
})
|
|
]
|
|
})
|
|
|
|
for event_values, exp_mail_values in [
|
|
(
|
|
{"organizer_id": self.event_organizer.id, "user_id": self.user_eventmanager.id},
|
|
{"email_from": self.event_organizer.email_formatted},
|
|
),
|
|
(
|
|
{"organizer_id": False},
|
|
{"email_from": self.user_eventmanager.company_id.email_formatted},
|
|
),
|
|
(
|
|
{"company_id": False},
|
|
{"email_from": self.user_eventuser.email_formatted},
|
|
),
|
|
]:
|
|
with self.subTest(event_values=event_values):
|
|
event.write(event_values)
|
|
with self.mock_mail_gateway(), self.mock_datetime_and_now(self.event_date_begin):
|
|
event.event_mail_ids._send_mail(self.registrations)
|
|
|
|
# where email == partner.email -> partner is recipient
|
|
for customer in self.event_customer + self.event_customer2:
|
|
self.assertMailMail(
|
|
customer,
|
|
"outgoing",
|
|
fields_values=exp_mail_values,
|
|
)
|
|
# other registrations: emails
|
|
self.assertMailMailWEmails(
|
|
[
|
|
formataddr(("Robodoo", "robodoo@example.com")),
|
|
formataddr(("Another Email", "another.email@example.com")),
|
|
],
|
|
"outgoing",
|
|
fields_values=exp_mail_values,
|
|
)
|
|
self.assertEqual(len(self._new_mails), 4)
|
|
|
|
@users("user_eventmanager")
|
|
def test_event_mail_recipients(self):
|
|
""" Check default / suggested recipients """
|
|
_default_organizer = self.user_eventmanager.company_id.partner_id
|
|
for event_values, exp_followers, exp_defaults, exp_suggested in [
|
|
(
|
|
{"organizer_id": self.event_organizer.id, "user_id": self.user_eventuser.id},
|
|
self.user_eventmanager.partner_id + self.user_eventuser.partner_id,
|
|
{"email_cc": "", "email_to": "", "partner_ids": []},
|
|
[],
|
|
),
|
|
(
|
|
{"organizer_id": False, "user_id": self.user_eventuser.id},
|
|
self.user_eventmanager.partner_id + self.user_eventuser.partner_id,
|
|
{"email_cc": "", "email_to": "", "partner_ids": []},
|
|
[],
|
|
),
|
|
(
|
|
{},
|
|
self.user_eventmanager.partner_id,
|
|
{"email_cc": "", "email_to": "", "partner_ids": []},
|
|
[],
|
|
),
|
|
]:
|
|
with self.subTest(event_values=event_values):
|
|
test_event = self.env['event.event'].create({
|
|
'date_begin': self.event_date_begin,
|
|
'date_end': self.event_date_end,
|
|
'date_tz': 'Europe/Brussels',
|
|
'event_mail_ids': False,
|
|
'name': 'TestEvent',
|
|
**event_values,
|
|
})
|
|
self.assertEqual(test_event.message_partner_ids, exp_followers)
|
|
defaults = test_event._message_get_default_recipients()[test_event.id]
|
|
self.assertDictEqual(defaults, exp_defaults)
|
|
suggested = test_event._message_get_suggested_recipients()
|
|
self.assertEqual(suggested, exp_suggested)
|
|
|
|
@users("user_eventuser")
|
|
def test_mail_template_creation(self):
|
|
""" Check default values when creating registration templates, should
|
|
be correctly configured by default. """
|
|
template_form_default = Form(
|
|
self.env["mail.template"].with_context(default_model="event.registration")
|
|
)
|
|
template_form_user = Form(self.env["mail.template"])
|
|
template_form_user.model_id = self.env["ir.model"]._get("event.registration")
|
|
|
|
for template in (template_form_default, template_form_user):
|
|
self.assertEqual(
|
|
template.email_from,
|
|
"{{ (object.event_id.organizer_id.email_formatted or object.event_id.company_id.email_formatted or user.email_formatted or '') }}"
|
|
)
|
|
self.assertFalse(template.email_to)
|
|
self.assertEqual(
|
|
template.lang,
|
|
"{{ object.event_id.lang or object.partner_id.lang }}",
|
|
)
|
|
self.assertTrue(template.use_default_to)
|