From 4257ae03cdd8a571641df499e6bbd6b7590ba357 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 5 Sep 2022 09:42:22 +0000 Subject: [PATCH] [IMP] test_mail{..mailing/full}: backport tooling improvements PURPOSE Purpose of this commit is to backport some improvements done in mail testing tools done in newer versions. Some of them are required for incoming tests to be added, other just to try to ease writing tests across versions. SPECIFICATIONS Partial backport of odoo/odoo@94208cb8b470bda745f7cbb6bc386f44d7bf14ad Improve finding outgoing mails and emails when batch methods (mass mailing) create similar emails, that can be distinguished notably by the subject in addition to from / to. Partial backport of odoo/odoo@c98f259736b5aa9c37a3580b2dad5795e8d5f6df Add a method to check MailMail, based on a given record. When having duplicates to differentiate in a given mailing, having just recipients is not sufficient as multiple emails may match a given recipients list. Checking model / res_id is another method for finding emails. Partial backport of odoo/odoo@a3e404e17ea36447e0bbe5f92aef94e26c299366 Add some information and values propagation in some custom asserts in mail test tooling. Partial backport of odoo/odoo@b915617569c1de1ddef8c116aa1f7c9f66037598 Allow to return records and found outgoing emails when using asserts. It eases doing checks in some specific tests e.g. checking notification layout usage in emails. Indeed this is quite low level and does not really deserves its own assert tooling methods. Partial backport of odoo/odoo@bbf4783ac68f296dd028b46aff882b4187a0f9fb Improve checks and asserts done when asserting content of produced mailing content (mails, traces, ...). Task-3438381 (TestMail: backport tools) Prepares Task-2612945 (Mail: Defensive email formatting) X-original-commit: 2bc28c804a92f206133c352c046dcdd4971fd4a6 Part-of: odoo/odoo#129839 --- addons/mail/tests/common.py | 2 +- addons/mass_mailing/tests/common.py | 17 ++++++++++++++--- .../tests/test_mailing_internals.py | 5 ++++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/addons/mail/tests/common.py b/addons/mail/tests/common.py index a6ae60a84a2..2c1c33a44c3 100644 --- a/addons/mail/tests/common.py +++ b/addons/mail/tests/common.py @@ -324,7 +324,7 @@ class MockEmail(common.BaseCase, MockSmtplibCase): def _find_sent_email(self, email_from, emails_to, subject=None): """ Find an outgoing email based on from / to and optional subject when - having conflicts. + having a conflict. :return sent_email: an outgoing email generated during the mock; """ diff --git a/addons/mass_mailing/tests/common.py b/addons/mass_mailing/tests/common.py index eb2934fa017..c94762ec48e 100644 --- a/addons/mass_mailing/tests/common.py +++ b/addons/mass_mailing/tests/common.py @@ -121,18 +121,29 @@ class MassMailCase(MailCase, MockLinkTracker): # mail.mail specific values to check fields_values = {'mailing_id': mailing} + if 'failure_reason' in recipient_info: + fields_values['failure_reason'] = recipient_info['failure_reason'] # specific for partner: email_formatted is used if partner: if status == 'sent' and sent_unlink: self.assertSentEmail(author, [partner]) else: - self.assertMailMail(partner, state_mapping[status], author=author, content=content, fields_values=fields_values) + self.assertMailMail( + partner, state_mapping[status], + author=author, content=content, fields_values=fields_values + ) # specific if email is False -> could have troubles finding it if several falsy traces elif not email and status in ('cancel', 'bounce'): - self.assertMailMailWId(recipient_trace.mail_mail_id_int, state_mapping[status], author=author, content=content, fields_values=fields_values) + self.assertMailMailWId( + recipient_trace.mail_mail_id_int, state_mapping[status], + author=author, content=content, fields_values=fields_values + ) else: - self.assertMailMailWEmails([email], state_mapping[status], author=author, content=content, fields_values=fields_values) + self.assertMailMailWEmails( + [email], state_mapping[status], + author=author, content=content, fields_values=fields_values + ) if link_info: trace_mail = self._find_mail_mail_wrecord(record) diff --git a/addons/mass_mailing/tests/test_mailing_internals.py b/addons/mass_mailing/tests/test_mailing_internals.py index eca645ebaf9..4783b467861 100644 --- a/addons/mass_mailing/tests/test_mailing_internals.py +++ b/addons/mass_mailing/tests/test_mailing_internals.py @@ -15,11 +15,13 @@ from odoo.addons.base.tests.test_ir_cron import CronMixinCase from odoo.addons.mass_mailing.tests.common import MassMailCommon from odoo.exceptions import ValidationError from odoo.sql_db import Cursor -from odoo.tests.common import users, Form +from odoo.tests.common import users, Form, tagged from odoo.tools import mute_logger BASE_64_STRING = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=' + +@tagged('mass_mailing') class TestMassMailValues(MassMailCommon): @classmethod @@ -402,6 +404,7 @@ class TestMassMailValues(MassMailCommon): msg='The name must be unique') +@tagged('mass_mailing') class TestMassMailFeatures(MassMailCommon, CronMixinCase): @classmethod