Thank you!
diff --git a/privacy_consent/tests/test_consent.py b/privacy_consent/tests/test_consent.py
index 52c8000..24550e5 100644
--- a/privacy_consent/tests/test_consent.py
+++ b/privacy_consent/tests/test_consent.py
@@ -1,8 +1,10 @@
# Copyright 2018 Tecnativa - Jairo Llopis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from contextlib import contextmanager
+
from odoo.exceptions import ValidationError
-from odoo.tests.common import HttpCase
+from odoo.tests.common import HttpCase, Form
class ActivityCase(HttpCase):
@@ -70,6 +72,37 @@ class ActivityCase(HttpCase):
"server_action_id": self.sync_blacklist.id,
})
+ @contextmanager
+ def _patch_build(self):
+ self._built_messages = []
+ IMS = self.env['ir.mail_server']
+
+ def _build_email(
+ _self,
+ email_from,
+ email_to,
+ subject,
+ body,
+ *args,
+ **kwargs
+ ):
+ self._built_messages.append(body)
+ return _build_email.origin(
+ _self,
+ email_from,
+ email_to,
+ subject,
+ body,
+ *args,
+ **kwargs,
+ )
+
+ try:
+ IMS._patch_method('build_email', _build_email)
+ yield
+ finally:
+ IMS._revert_method('build_email')
+
def check_activity_auto_properly_sent(self):
"""Check emails sent by ``self.activity_auto``."""
consents = self.env["privacy.consent"].search([
@@ -81,8 +114,9 @@ class ActivityCase(HttpCase):
messages = consent.message_ids
self.assertEqual(len(messages), 2)
# Check sent mails
- self.cron_mail_queue.method_direct_trigger()
- for consent in consents:
+ with self._patch_build():
+ self.cron_mail_queue.method_direct_trigger()
+ for index, consent in enumerate(consents):
good_email = "@" in (consent.partner_id.email or "")
expected_messages = 3 if good_email else 2
self.assertEqual(
@@ -119,6 +153,14 @@ class ActivityCase(HttpCase):
)
# Partner's is_blacklisted should be synced with default consent
self.assertFalse(consent.partner_id.is_blacklisted)
+ # Check the sent message was built properly tokenized
+ accept_url, reject_url = map(consent._url, (True, False))
+ for body in self._built_messages:
+ if accept_url in body and reject_url in body:
+ self._built_messages.remove(body)
+ break
+ else:
+ raise AssertionError("Some message body should have these urls")
def test_default_template(self):
"""We have a good mail template by default."""
@@ -182,19 +224,27 @@ class ActivityCase(HttpCase):
# Send one manual request
action = consents[0].action_manual_ask()
self.assertEqual(action["res_model"], "mail.compose.message")
- composer = self.env[action["res_model"]] \
- .with_context(active_ids=consents[0].ids,
- active_model=consents._name,
- **action["context"]).create({})
- composer.onchange_template_id_wrapper()
- composer.send_mail()
+ Composer = self.env[action["res_model"]].with_context(
+ active_ids=consents[0].ids,
+ active_model=consents._name,
+ **action["context"],
+ )
+ composer_wizard = Form(Composer)
+ self.assertIn(consents[0].partner_id.name, composer_wizard.body)
+ composer_record = composer_wizard.save()
+ with self._patch_build():
+ composer_record.send_mail()
+ # Check the sent message was built properly tokenized
+ body = self._built_messages[0]
+ self.assertIn(consents[0]._url(True), body)
+ self.assertIn(consents[0]._url(False), body)
messages = consents.mapped("message_ids") - messages
self.assertEqual(len(messages), 2)
self.assertEqual(messages[0].subtype_id, self.mt_consent_state_changed)
self.assertEqual(consents.mapped("state"), ["sent", "draft", "draft"])
self.assertEqual(
consents.mapped("partner_id.is_blacklisted"),
- [False, False, False],
+ [True, False, False],
)
# Placeholder links should be logged
self.assertTrue("/privacy/consent/accept/" in messages[1].body)