social/mail_autosubscribe/tests/test_mail_autosubscribe.py

133 lines
5.6 KiB
Python

# Copyright 2021 Camptocamp (http://www.camptocamp.com).
# @author Iván Todorovich <ivan.todorovich@gmail.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo_test_helper import FakeModelLoader
from odoo.tests.common import Form, TransactionCase, tagged
@tagged("post_install", "-at_install")
class TestMailAutosubscribe(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
# Setup env
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
# Load fake order model
cls.loader = FakeModelLoader(cls.env, cls.__module__)
cls.loader.backup_registry()
from .models.fake_order import FakeOrder
cls.loader.update_registry((FakeOrder,))
cls.fake_order_model = cls.env["ir.model"].search(
[("model", "=", "fake.order")]
)
# Email Template
cls.mail_template = cls.env["mail.template"].create(
{
"model_id": cls.fake_order_model.id,
"name": "Fake Order: Send by Mail",
"subject": "Fake Order: {{object.partner_id.name}}",
"partner_to": "{{object.partner_id.id}}",
"body_html": "Hello, this is a fake order",
}
)
# Partners
cls.commercial_partner = cls.env.ref("base.res_partner_4")
cls.partner_1 = cls.env.ref("base.res_partner_address_13")
cls.partner_2 = cls.env.ref("base.res_partner_address_14")
cls.partner_3 = cls.env.ref("base.res_partner_address_24")
# Autosubscribe rules
cls.autosubscribe_fake_order = cls.env["mail.autosubscribe"].create(
{"model_id": cls.fake_order_model.id}
)
cls.partner_3.mail_autosubscribe_ids = [(4, cls.autosubscribe_fake_order.id)]
# Empty fake.order
cls.order = cls.env["fake.order"].create({"partner_id": cls.partner_2.id})
@classmethod
def tearDownClass(cls):
cls.loader.restore_registry()
return super().tearDownClass()
def test_message_subscribe(self):
"""Test autosubscribe on a basic workflow"""
self.assertFalse(self.order.message_partner_ids, "No subscribers yet")
self.order.message_subscribe([self.order.partner_id.id])
self.assertEqual(
self.order.message_partner_ids,
self.partner_2 | self.partner_3,
"Partner 3 is automatically subscribed",
)
def test_message_subscribe_disabled(self):
"""Test autosubscribe on a basic workflow (disabled)"""
self.partner_3.mail_autosubscribe_ids = [(5, False)]
self.assertFalse(self.order.message_partner_ids, "No subscribers yet")
self.order.message_subscribe([self.order.partner_id.id])
self.assertEqual(
self.order.message_partner_ids,
self.partner_2,
"Partner 2 is the only subscriber",
)
def test_mail_template(self):
"""Test autosubscribe when partner is set in the mail.template partners_to"""
self.mail_template.send_mail(self.order.id)
message = self.order.message_ids[0]
self.assertEqual(message.partner_ids, self.partner_2 | self.partner_3)
def test_mail_template_disabled(self):
"""Test autosubscribe when the partner is not an autosubscribe follower"""
self.partner_3.mail_autosubscribe_ids = [(5, False)]
self.mail_template.send_mail(self.order.id)
message = self.order.message_ids[0]
self.assertEqual(message.partner_ids, self.partner_2)
def test_mail_template_no_autosubscribe_followers(self):
"""Test autosubscribe doesn't apply if it's disabled on the template"""
self.mail_template.use_autosubscribe_followers = False
self.mail_template.send_mail(self.order.id)
message = self.order.message_ids[0]
self.assertEqual(message.partner_ids, self.partner_2)
def test_mail_template_default_recipients(self):
"""Test autosubscribe when using default recipients"""
self.mail_template.use_default_to = True
self.mail_template.send_mail(self.order.id)
message = self.order.message_ids[0]
self.assertEqual(message.partner_ids, self.partner_2 | self.partner_3)
def test_mail_message_composer(self):
"""Test autosubscribe when using the mail composer"""
self.assertFalse(self.order.message_partner_ids, "No subscribers yet")
composer = Form(
self.env["mail.compose.message"].with_context(
default_model="fake.order",
default_res_id=self.order.id,
default_use_template=True,
default_template_id=self.mail_template.id,
default_composition_mode="comment",
)
)
composer.save().action_send_mail()
message = self.order.message_ids[0]
self.assertEqual(message.partner_ids, self.partner_2 | self.partner_3)
def test_mail_message_composer_no_autosubscribe_followers(self):
"""Test autosubscribe when using the mail composer and it's disabled"""
self.mail_template.use_autosubscribe_followers = False
composer = Form(
self.env["mail.compose.message"].with_context(
default_model="fake.order",
default_res_id=self.order.id,
default_use_template=True,
default_template_id=self.mail_template.id,
default_composition_mode="comment",
)
)
composer.save().action_send_mail()
message = self.order.message_ids[0]
self.assertEqual(message.partner_ids, self.partner_2)