summaryrefslogtreecommitdiff
path: root/addons/test_mass_mailing
diff options
context:
space:
mode:
authorSébastien Mottet (oms) <oms@odoo.com>2020-03-30 10:42:36 +0000
committerThibault Delavallée <tde@odoo.com>2020-05-19 10:21:28 +0000
commit28734ac268c7ef24c78e32223b9a4398e96cdb93 (patch)
tree70e2d5268d9fd4b5023f45d92b905643f9e77308 /addons/test_mass_mailing
parentc142f1628d4e7b13a7de5a8cf0790d7425badc05 (diff)
[IMP] mass_mailing: propagate UTM on replies
USE CASE Send a mailing to some recipients. Set reply-to of this mailing to an alias creating records on a model inheriting from utm.mixin. UTM informations on mailing are not propagated to the newly-created records. SPECIFICATIONS When an user answers to a mail of a mailing with an alias creating records on an UTM enabled model, propagate UTM from the mailing to the new record. In order to set UTM informations during record creation, "message_new" has been overridden in mass_mailing. That way it is automatically available on all models inheriting from utm.mixin. A test simulating this scenario has been added. It checks if UTMs info are correctlwy set on the created record by comparing them to the mailing's UTM info. Task Id 2210334 closes odoo/odoo#48602 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons/test_mass_mailing')
-rw-r--r--addons/test_mass_mailing/models/mailing_models.py9
-rw-r--r--addons/test_mass_mailing/security/ir.model.access.csv2
-rw-r--r--addons/test_mass_mailing/tests/test_mailing_internals.py46
3 files changed, 57 insertions, 0 deletions
diff --git a/addons/test_mass_mailing/models/mailing_models.py b/addons/test_mass_mailing/models/mailing_models.py
index 826b52a2c51..54ede3f8e14 100644
--- a/addons/test_mass_mailing/models/mailing_models.py
+++ b/addons/test_mass_mailing/models/mailing_models.py
@@ -15,6 +15,15 @@ class MailingSimple(models.Model):
email_from = fields.Char()
+class MailingUTM(models.Model):
+ """ Model inheriting from mail.thread and utm.mixin for checking utm of mailing is caught and set on reply """
+ _description = 'Mailing: UTM enabled to test UTM sync with mailing'
+ _name = 'mailing.test.utm'
+ _inherit = ['mail.thread', 'utm.mixin']
+
+ name = fields.Char()
+
+
class MailingBLacklist(models.Model):
""" Model using blacklist mechanism for mass mailing features. """
_description = 'Mailing Blacklist Enabled'
diff --git a/addons/test_mass_mailing/security/ir.model.access.csv b/addons/test_mass_mailing/security/ir.model.access.csv
index c4588843ba3..5deee89f578 100644
--- a/addons/test_mass_mailing/security/ir.model.access.csv
+++ b/addons/test_mass_mailing/security/ir.model.access.csv
@@ -9,3 +9,5 @@ access_mailing_performance_all,access.mailing.performance.all,model_mailing_perf
access_mailing_performance_user,access.mailing.performance.user,model_mailing_performance,base.group_user,1,1,1,1
access_mailing_performance_blacklist_all,access.mailing.performance.blacklist.all,model_mailing_performance_blacklist,,0,0,0,0
access_mailing_performance_blacklist_user,access.mailing.performance.blacklist.user,model_mailing_performance_blacklist,base.group_user,1,1,1,1
+access_mailing_test_utm_all,access.mailing.test.utm.all,model_mailing_test_utm,,0,0,0,0
+access_mailing_test_utm_user,access.mailing.test.utm.user,model_mailing_test_utm,base.group_user,1,1,1,1
diff --git a/addons/test_mass_mailing/tests/test_mailing_internals.py b/addons/test_mass_mailing/tests/test_mailing_internals.py
index 4d91af5b5b6..48eab1853bb 100644
--- a/addons/test_mass_mailing/tests/test_mailing_internals.py
+++ b/addons/test_mass_mailing/tests/test_mailing_internals.py
@@ -3,6 +3,7 @@
from odoo.addons.test_mass_mailing.tests.common import TestMassMailCommon
from odoo.addons.test_mass_mailing.data.mail_test_data import MAIL_TEMPLATE
+from odoo.tests.common import users
class TestMailingInternals(TestMassMailCommon):
@@ -74,3 +75,48 @@ class TestMailingInternals(TestMassMailCommon):
self.assertEqual(mailing.delivered, 3)
self.assertEqual(mailing.opened, 2)
self.assertEqual(mailing.replied, 2)
+
+ @users('user_marketing')
+ def test_mailing_trace_utm(self):
+ """ Test mailing UTMs are caught on reply"""
+ self._create_mailing_list()
+ self.test_alias.write({
+ 'alias_model_id': self.env['ir.model']._get('mailing.test.utm').id
+ })
+
+ source = self.env['utm.source'].create({'name': 'Source test'})
+ medium = self.env['utm.medium'].create({'name': 'Medium test'})
+ campaign = self.env['utm.campaign'].create({'name': 'Campaign test'})
+ subject = 'MassMailingTestUTM'
+
+ mailing = self.env['mailing.mailing'].create({
+ 'name': 'UTMTest',
+ 'subject': subject,
+ 'body_html': '<p>Hello ${object.name}</p>',
+ 'reply_to_mode': 'email',
+ 'reply_to': '%s@%s' % (self.test_alias.alias_name, self.test_alias.alias_domain),
+ 'keep_archives': True,
+ 'mailing_model_id': self.env['ir.model']._get('mailing.list').id,
+ 'contact_list_ids': [(4, self.mailing_list_1.id)],
+ 'source_id': source.id,
+ 'medium_id': medium.id,
+ 'campaign_id': campaign.id
+ })
+
+ mailing.action_put_in_queue()
+ with self.mock_mail_gateway(mail_unlink_sent=False):
+ mailing._process_mass_mailing_queue()
+
+ traces = self.env['mailing.trace'].search([('model', '=', self.mailing_list_1.contact_ids._name), ('res_id', 'in', self.mailing_list_1.contact_ids.ids)])
+ self.assertEqual(len(traces), 3)
+
+ # simulate response to mailing
+ self.gateway_reply_wrecord(MAIL_TEMPLATE, self.mailing_list_1.contact_ids[0], use_in_reply_to=True)
+ self.gateway_reply_wrecord(MAIL_TEMPLATE, self.mailing_list_1.contact_ids[1], use_in_reply_to=False)
+
+ mailing_test_utms = self.env['mailing.test.utm'].search([('name', '=', 'Re: %s' % subject)])
+ self.assertEqual(len(mailing_test_utms), 2)
+ for test_utm in mailing_test_utms:
+ self.assertEqual(test_utm.campaign_id, campaign)
+ self.assertEqual(test_utm.source_id, source)
+ self.assertEqual(test_utm.medium_id, medium)