ba8cf6ec7a
After installing the module, any user was required to have admin rights to be able to search across models. This fix does just that search with sudo and returns back to non-sudo mode immediately after. This way, we don't need to increase permissions for everybody. Tests now run unprivileged, to assert this problem never happens again. @moduon MT-1644 MT-1645
194 lines
8.1 KiB
Python
194 lines
8.1 KiB
Python
# Copyright 2020 Tecnativa - João Marques
|
|
# Copyright 2022 Tecnativa - Víctor Martínez
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
# pylint: disable=C8107
|
|
from odoo.tests import common
|
|
from odoo.tools import mute_logger
|
|
|
|
|
|
class TestMailNotificationCustomSubject(common.TransactionCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.partner_1, cls.partner_2 = (
|
|
cls.env["res.partner"]
|
|
.with_context(tracking_disable=True)
|
|
.create(
|
|
[
|
|
{"name": "Test partner 1", "email": "partner1@example.com"},
|
|
{"name": "Test partner 2", "email": "partner2@example.com"},
|
|
]
|
|
)
|
|
)
|
|
cls.admin = common.new_test_user(cls.env, "boss", "base.group_system")
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.uid = common.new_test_user(self.env, "worker")
|
|
|
|
def test_email_subject_template_overrides(self):
|
|
with self.with_user("boss"):
|
|
self.env["mail.message.custom.subject"].create(
|
|
{
|
|
"name": "Test template 1",
|
|
"model_id": self.env.ref("base.model_res_partner").id,
|
|
"subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
|
|
"subject_template": "{{object.name or 'n/a'}} and something more",
|
|
}
|
|
)
|
|
# Send message in partner
|
|
mail_message_1 = self.partner_1.message_post(
|
|
body="Test", subtype_xmlid="mail.mt_comment"
|
|
)
|
|
# Get message and check subject
|
|
self.assertEqual(mail_message_1.subject, "Test partner 1 and something more")
|
|
|
|
# Send message in partner 2
|
|
mail_message_2 = self.partner_2.message_post(
|
|
body="Test", subtype_xmlid="mail.mt_comment"
|
|
)
|
|
# Get message and check subject
|
|
self.assertEqual(mail_message_2.subject, "Test partner 2 and something more")
|
|
|
|
# Explicit subject should also be overwritten
|
|
mail_message_3 = self.partner_2.message_post(
|
|
body="Test", subtype_xmlid="mail.mt_comment", subject="Test"
|
|
)
|
|
# Get message and check subject
|
|
self.assertEqual(mail_message_3.subject, "Test partner 2 and something more")
|
|
|
|
def test_email_subject_template_normal(self):
|
|
with self.with_user("boss"):
|
|
self.env["mail.message.custom.subject"].create(
|
|
{
|
|
"name": "Test template 1",
|
|
"model_id": self.env.ref("base.model_res_partner").id,
|
|
"subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
|
|
"subject_template": "{{object.name or 'n/a'}} and something more",
|
|
}
|
|
)
|
|
# Send note in partner
|
|
mail_message_1 = self.partner_1.message_post(
|
|
body="Test", subtype_xmlid="mail.mt_note", subject="Test"
|
|
)
|
|
# Get message and check subject. Subject Template should not apply
|
|
self.assertEqual(mail_message_1.subject, "Test")
|
|
|
|
def test_email_subject_template_multi(self):
|
|
with self.with_user("boss"):
|
|
self.env["mail.message.custom.subject"].create(
|
|
{
|
|
"name": "Test template 1",
|
|
"model_id": self.env.ref("base.model_res_partner").id,
|
|
"subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
|
|
"subject_template": "{{object.name or 'n/a'}} and something more",
|
|
}
|
|
)
|
|
with self.with_user("boss"):
|
|
self.env["mail.message.custom.subject"].create(
|
|
{
|
|
"name": "Test template 2",
|
|
"model_id": self.env.ref("base.model_res_partner").id,
|
|
"subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
|
|
"subject_template": "{{object.name or 'n/a'}} and something different",
|
|
}
|
|
)
|
|
# Send message in partner
|
|
mail_message_1 = self.partner_1.message_post(
|
|
body="Test", subtype_xmlid="mail.mt_comment"
|
|
)
|
|
# Get message and check subject
|
|
self.assertEqual(
|
|
mail_message_1.subject, "Test partner 1 and something different"
|
|
)
|
|
with self.with_user("boss"):
|
|
self.env["mail.message.custom.subject"].create(
|
|
{
|
|
"name": "Test template 3",
|
|
"model_id": self.env.ref("base.model_res_partner").id,
|
|
"subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
|
|
"subject_template": "{{' and yet something else'}}",
|
|
"position": "append_after",
|
|
}
|
|
)
|
|
# Send message in partner
|
|
mail_message_2 = self.partner_1.message_post(
|
|
body="Test", subtype_xmlid="mail.mt_comment"
|
|
)
|
|
# Get message and check subject
|
|
self.assertEqual(
|
|
mail_message_2.subject,
|
|
"Test partner 1 and something different and yet something else",
|
|
)
|
|
with self.with_user("boss"):
|
|
self.env["mail.message.custom.subject"].create(
|
|
{
|
|
"name": "Test template 4",
|
|
"model_id": self.env.ref("base.model_res_partner").id,
|
|
"subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
|
|
"subject_template": "{{'Re: '}}",
|
|
"position": "append_before",
|
|
}
|
|
)
|
|
# Send message in partner
|
|
mail_message_3 = self.partner_1.message_post(
|
|
body="Test", subtype_xmlid="mail.mt_comment"
|
|
)
|
|
# Get message and check subject
|
|
self.assertEqual(
|
|
mail_message_3.subject,
|
|
"Re: Test partner 1 and something different and yet something else",
|
|
)
|
|
|
|
def test_email_subject_template_w_original(self):
|
|
with self.with_user("boss"):
|
|
self.env["mail.message.custom.subject"].create(
|
|
{
|
|
"name": "Test template 1",
|
|
"model_id": self.env.ref("base.model_res_partner").id,
|
|
"subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
|
|
"subject_template": "{{' and something more'}}",
|
|
"position": "append_after",
|
|
}
|
|
)
|
|
# Send message in partner
|
|
mail_message_1 = self.partner_1.message_post(
|
|
body="Test",
|
|
subtype_xmlid="mail.mt_comment",
|
|
subject="Test",
|
|
)
|
|
# Get message and check subject
|
|
self.assertEqual(mail_message_1.subject, "Test and something more")
|
|
|
|
def test_bad_template_does_not_break(self):
|
|
"""Create template with error (obaject) to test error."""
|
|
with self.with_user("boss"):
|
|
self.env["mail.message.custom.subject"].create(
|
|
{
|
|
"name": "Test bad template 1",
|
|
"model_id": self.env.ref("base.model_res_partner").id,
|
|
"subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
|
|
"subject_template": "{{obaject.number_a}} and something",
|
|
"position": "append_after",
|
|
}
|
|
)
|
|
# Send message in partner
|
|
with mute_logger("odoo.addons.mail.models.mail_render_mixin"):
|
|
mail_message_1 = self.partner_1.message_post(
|
|
body="Test",
|
|
subtype_xmlid="mail.mt_comment",
|
|
subject="Test",
|
|
)
|
|
# Get message and check subject
|
|
# No exception should be raised but subject should remain as original.
|
|
self.assertEqual(mail_message_1.subject, "Test")
|
|
|
|
def test_no_template_default_result(self):
|
|
# Send message in partner
|
|
mail_message_1 = self.partner_1.message_post(
|
|
body="Test", subtype_xmlid="mail.mt_comment", subject="Test partner 1"
|
|
)
|
|
# Get message and check subject
|
|
# No exception should be raised but subject should remain as original.
|
|
self.assertEqual(mail_message_1.subject, "Test partner 1")
|