You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.4 KiB
90 lines
3.4 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2017 Tecnativa - Jairo Llopis
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
from mock import patch
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.tests.common import TransactionCase
|
|
|
|
|
|
class DynamicListCase(TransactionCase):
|
|
def setUp(self):
|
|
super(DynamicListCase, self).setUp()
|
|
self.tag = self.env["res.partner.category"].create({
|
|
"name": "testing tag",
|
|
})
|
|
self.partners = self.env["res.partner"]
|
|
for number in range(5):
|
|
self.partners |= self.partners.create({
|
|
"name": "partner %d" % number,
|
|
"category_id": [(4, self.tag.id, False)],
|
|
"email": "%d@example.com" % number,
|
|
})
|
|
self.list = self.env["mail.mass_mailing.list"].create({
|
|
"name": "test list",
|
|
"dynamic": True,
|
|
"sync_domain": repr([("category_id", "in", self.tag.ids)]),
|
|
})
|
|
self.mail = self.env["mail.mass_mailing"].create({
|
|
"name": "test mass mailing",
|
|
"contact_list_ids": [(4, self.list.id, False)],
|
|
})
|
|
self.mail._onchange_model_and_list()
|
|
|
|
def test_list_sync(self):
|
|
"""List is synced correctly."""
|
|
Contact = self.env["mail.mass_mailing.contact"]
|
|
# Partner 0 is not categorized
|
|
self.partners[0].category_id = False
|
|
# Partner 1 has no email
|
|
self.partners[1].email = False
|
|
# Set list as unsynced
|
|
self.list.dynamic = False
|
|
# Create contact for partner 0 in unsynced list
|
|
contact0 = Contact.create({
|
|
"list_id": self.list.id,
|
|
"partner_id": self.partners[0].id,
|
|
})
|
|
self.assertEqual(self.list.contact_nbr, 1)
|
|
# Set list as add-synced
|
|
self.list.dynamic = True
|
|
self.list.action_sync()
|
|
self.assertEqual(self.list.contact_nbr, 4)
|
|
self.assertTrue(contact0.exists())
|
|
# Set list as full-synced
|
|
self.list.sync_method = "full"
|
|
self.list.action_sync()
|
|
self.assertEqual(self.list.contact_nbr, 3)
|
|
self.assertFalse(contact0.exists())
|
|
# Cannot add or edit contacts in fully synced lists
|
|
with self.assertRaises(ValidationError):
|
|
Contact.create({
|
|
"list_id": self.list.id,
|
|
"partner_id": self.partners[0].id,
|
|
})
|
|
contact1 = Contact.search([
|
|
("list_id", "=", self.list.id),
|
|
], limit=1)
|
|
with self.assertRaises(ValidationError):
|
|
contact1.name = "other"
|
|
with self.assertRaises(ValidationError):
|
|
contact1.email = "other@example.com"
|
|
with self.assertRaises(ValidationError):
|
|
contact1.partner_id = self.partners[0]
|
|
|
|
def test_sync_when_sending_mail(self):
|
|
"""Dynamic list is synced before mailing to it."""
|
|
self.list.action_sync()
|
|
self.assertEqual(self.list.contact_nbr, 5)
|
|
# Create a new partner
|
|
self.partners.create({
|
|
"name": "extra partner",
|
|
"category_id": [(4, self.tag.id, False)],
|
|
"email": "extra@example.com",
|
|
})
|
|
# Before sending the mail, the list is updated
|
|
with patch("odoo.addons.base.ir.ir_mail_server"
|
|
".IrMailServer.send_email") as send_email:
|
|
self.mail.send_mail()
|
|
self.assertEqual(6, send_email.call_count)
|
|
self.assertEqual(6, self.list.contact_nbr)
|