mirror of https://github.com/OCA/social.git
293 lines
11 KiB
Python
293 lines
11 KiB
Python
# Copyright 2020 Creu Blanca
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
import base64
|
|
from odoo.tools import formataddr
|
|
from odoo.addons.test_mail.tests.common import Moderation
|
|
from odoo.tests.common import post_install, at_install
|
|
from lxml import etree
|
|
|
|
|
|
@at_install(False)
|
|
@post_install(True)
|
|
class TestMailPrivate(Moderation):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestMailPrivate, cls).setUpClass()
|
|
self = cls
|
|
|
|
param = self.env['ir.config_parameter'].search([
|
|
('key', '=', 'mail_restrict_follower_selection.domain')
|
|
])
|
|
if param:
|
|
self.env['ir.config_parameter'].set_param(
|
|
'mail_restrict_follower_selection.domain.res.partner',
|
|
'[]'
|
|
)
|
|
self.user_01 = self.env['res.users'].create({
|
|
'name': 'user_01',
|
|
'login': 'demo_user_01',
|
|
'email': 'demo@demo.de',
|
|
'notification_type': 'inbox',
|
|
})
|
|
self.user_02 = self.env['res.users'].create({
|
|
'name': 'user_02',
|
|
'login': 'demo_user_02',
|
|
'email': 'demo2@demo.de',
|
|
'notification_type': 'inbox',
|
|
})
|
|
self.user_03 = self.env['res.users'].create({
|
|
'name': 'user_03',
|
|
'login': 'demo_user_03',
|
|
'email': 'demo3@demo.de',
|
|
'notification_type': 'inbox',
|
|
})
|
|
self.partner = self.env['res.partner'].create({
|
|
'name': 'Partner',
|
|
'customer': True,
|
|
'email': 'test@test.com',
|
|
})
|
|
self.group_1 = self.env['res.groups'].create({
|
|
'name': 'DEMO GROUP 1',
|
|
'users': [(4, self.user_01.id)],
|
|
})
|
|
self.group_2 = self.env['res.groups'].create({
|
|
'name': 'DEMO GROUP 2',
|
|
'users': [(4, self.user_02.id)],
|
|
})
|
|
self.message_group_1 = self.env['mail.security.group'].create({
|
|
'name': 'GROUP 1',
|
|
'model_ids': [(4, self.env.ref('base.model_res_partner').id)],
|
|
'group_ids': [(4, self.group_1.id)],
|
|
})
|
|
self.message_group_2 = self.env['mail.security.group'].create({
|
|
'name': 'GROUP 2',
|
|
'model_ids': [(4, self.env.ref('base.model_res_partner').id)],
|
|
'group_ids': [(4, self.group_2.id)],
|
|
})
|
|
self.subtypes, _, _, _, _ = self.env[
|
|
'mail.message.subtype'
|
|
]._get_auto_subscription_subtypes(self.partner._name)
|
|
self.partner.message_subscribe(
|
|
partner_ids=self.user_01.partner_id.ids,
|
|
subtype_ids=self.subtypes,
|
|
)
|
|
self.partner.message_subscribe(
|
|
partner_ids=self.user_02.partner_id.ids,
|
|
subtype_ids=self.subtypes,
|
|
)
|
|
self.partner.message_subscribe(
|
|
partner_ids=self.user_03.partner_id.ids,
|
|
subtype_ids=self.subtypes,
|
|
)
|
|
|
|
def _get_notifications(self, message, user):
|
|
return self.env['mail.notification'].search([
|
|
('mail_message_id', '=', message.id),
|
|
('res_partner_id', '=', user.partner_id.id),
|
|
('is_read', '=', False),
|
|
])
|
|
|
|
def test_normal_usage(self):
|
|
# pylint: disable = C8107
|
|
message = self.partner.message_post(body="DEMO_01")
|
|
self.assertTrue(
|
|
self._get_notifications(message, self.user_01)
|
|
)
|
|
self.assertTrue(
|
|
self._get_notifications(message, self.user_02)
|
|
)
|
|
self.assertTrue(
|
|
self._get_notifications(message, self.user_03)
|
|
)
|
|
|
|
def test_private_usage(self):
|
|
# pylint: disable = C8107
|
|
message = self.partner.sudo(self.user_01.id).with_context(
|
|
default_mail_group_id=self.message_group_1.id
|
|
).message_post(body="DEMO_01")
|
|
self.assertFalse(
|
|
self._get_notifications(message, self.user_02)
|
|
)
|
|
self.assertFalse(
|
|
self.env['mail.message'].sudo(self.user_02.id).search([
|
|
('id', '=', message.id)
|
|
])
|
|
)
|
|
self.assertFalse(
|
|
self._get_notifications(message, self.user_03)
|
|
)
|
|
|
|
def test_private_message_data(self):
|
|
# pylint: disable = C8107
|
|
message = self.partner.with_context(
|
|
default_mail_group_id=self.message_group_1.id
|
|
).message_post(body="DEMO_01")
|
|
self.assertTrue(message.message_format()[0]['private'])
|
|
|
|
def test_message_data(self):
|
|
# pylint: disable = C8107
|
|
message = self.partner.message_post(body="DEMO_01")
|
|
self.assertFalse(message.message_format()[0]['private'])
|
|
|
|
def test_private_notification(self):
|
|
# pylint: disable = C8107
|
|
message = self.partner.with_context(
|
|
default_mail_group_id=self.message_group_1.id
|
|
).message_post(body="DEMO_01")
|
|
self.assertTrue(
|
|
self._get_notifications(message, self.user_01)
|
|
)
|
|
self.assertEqual(
|
|
self.env['mail.message'].sudo(self.user_01.id).search([
|
|
('id', '=', message.id)
|
|
]), message
|
|
)
|
|
self.assertFalse(
|
|
self._get_notifications(message, self.user_02)
|
|
)
|
|
self.assertFalse(
|
|
self.env['mail.message'].sudo(self.user_02.id).search([
|
|
('id', '=', message.id)
|
|
])
|
|
)
|
|
self.assertFalse(
|
|
self._get_notifications(message, self.user_03)
|
|
)
|
|
|
|
def test_attachment(self):
|
|
attachment = self.env['ir.attachment'].sudo(self.user_01.id).create({
|
|
'datas': base64.b64encode("TXT DATA".encode("utf-8")),
|
|
'name': 'demo_file.txt',
|
|
'res_model': 'mail.compose.message',
|
|
})
|
|
# pylint: disable = C8107
|
|
message = self.partner.sudo(self.user_01.id).message_post(
|
|
body="DEMO_01", attachment_ids=attachment.ids)
|
|
self.assertFalse(attachment.mail_group_id)
|
|
self.assertFalse(message.mail_group_id)
|
|
self.assertIn(attachment, message.attachment_ids)
|
|
|
|
def test_attachment_private(self):
|
|
attachment = self.env['ir.attachment'].sudo(self.user_01.id).create({
|
|
'datas': base64.b64encode("TXT DATA".encode("utf-8")),
|
|
'name': 'demo_file.txt',
|
|
'res_model': 'mail.compose.message',
|
|
})
|
|
# pylint: disable = C8107
|
|
message = self.partner.sudo(self.user_01.id).with_context(
|
|
default_mail_group_id=self.message_group_1.id
|
|
).message_post(body="DEMO_01", attachment_ids=attachment.ids)
|
|
self.assertEqual(self.message_group_1, attachment.mail_group_id)
|
|
self.assertEqual(self.message_group_1, message.mail_group_id)
|
|
self.assertIn(attachment, message.attachment_ids)
|
|
|
|
def test_allow_private(self):
|
|
self.assertTrue(
|
|
self.partner.sudo(self.user_01.id).allow_private
|
|
)
|
|
self.assertTrue(
|
|
self.partner.sudo(self.user_02.id).allow_private
|
|
)
|
|
view = self.partner.fields_view_get(view_type="form")
|
|
view_element = etree.XML(view['arch'])
|
|
self.assertTrue(view_element.xpath("//field[@name='allow_private']"))
|
|
|
|
def test_compose_message_private(self):
|
|
current_messages = self.partner.message_ids
|
|
compose = self.env['mail.compose.message'].with_context({
|
|
'default_composition_mode': 'comment',
|
|
'default_model': self.partner._name,
|
|
'default_res_id': self.partner.id
|
|
}).sudo(self.user_01).create({
|
|
'subject': 'Subject',
|
|
'body': 'Body text',
|
|
'partner_ids': []})
|
|
self.assertTrue(compose.allow_private)
|
|
compose.mail_group_id = self.message_group_1
|
|
compose.send_mail()
|
|
message = self.partner.message_ids - current_messages
|
|
self.assertTrue(message)
|
|
self.assertEqual(message.mail_group_id, self.message_group_1)
|
|
|
|
def test_compose_message_public(self):
|
|
current_messages = self.partner.message_ids
|
|
compose = self.env['mail.compose.message'].with_context({
|
|
'default_composition_mode': 'comment',
|
|
'default_model': self.partner._name,
|
|
'default_res_id': self.partner.id
|
|
}).sudo(self.user_01).create({
|
|
'subject': 'Subject',
|
|
'body': 'Body text',
|
|
'partner_ids': []})
|
|
self.assertTrue(compose.allow_private)
|
|
compose.send_mail()
|
|
message = self.partner.message_ids - current_messages
|
|
self.assertTrue(message)
|
|
self.assertFalse(message.mail_group_id)
|
|
|
|
def test_compose_message_compute(self):
|
|
compose = self.env['mail.compose.message'].with_context({
|
|
'default_composition_mode': 'comment',
|
|
'default_model': self.partner._name,
|
|
'default_res_id': self.partner.id
|
|
}).sudo(self.user_01.id).create({
|
|
'subject': 'Subject',
|
|
'body': 'Body text',
|
|
'partner_ids': []})
|
|
self.assertTrue(compose.allow_private)
|
|
compose = self.env['mail.compose.message'].with_context({
|
|
'default_composition_mode': 'comment',
|
|
'default_model': self.partner._name,
|
|
'default_res_id': self.partner.id
|
|
}).sudo(self.user_03.id).create({
|
|
'subject': 'Subject',
|
|
'body': 'Body text',
|
|
'partner_ids': []})
|
|
self.assertFalse(compose.allow_private)
|
|
|
|
def test_security_groups(self):
|
|
groups = self.partner.sudo(
|
|
self.user_01.id).get_message_security_groups()
|
|
self.assertTrue(groups)
|
|
self.assertEqual(1, len(groups))
|
|
self.assertEqual(groups[0]['id'], self.message_group_1.id)
|
|
groups = self.partner.sudo(
|
|
self.user_02.id).get_message_security_groups()
|
|
self.assertTrue(groups)
|
|
self.assertEqual(1, len(groups))
|
|
self.assertEqual(groups[0]['id'], self.message_group_2.id)
|
|
groups = self.partner.sudo(
|
|
self.user_03.id).get_message_security_groups()
|
|
self.assertFalse(groups)
|
|
|
|
def test_email_sending(self):
|
|
self.assertFalse(self._mails)
|
|
self.user_01.write({'notification_type': 'email'})
|
|
self.user_02.write({'notification_type': 'email'})
|
|
# pylint: disable = C8107
|
|
message = self.partner.with_context(
|
|
default_mail_group_id=self.message_group_1.id
|
|
).message_post(body="DEMO_01")
|
|
self.assertTrue(message.mail_group_id)
|
|
self.assertFalse(self._get_notifications(message, self.user_01))
|
|
self.assertFalse(self.env['mail.mail'].search([
|
|
('mail_message_id', '=', message.id)
|
|
]))
|
|
self.assertTrue(self._mails)
|
|
self.assertEqual(2, len(self._mails))
|
|
partner = self.user_01.partner_id
|
|
email_to = [
|
|
formataddr((partner.name or 'False', partner.email or 'False'))
|
|
]
|
|
self.assertEqual(
|
|
self._mails[0]['email_to'],
|
|
email_to)
|
|
self.assertFalse(
|
|
self._get_notifications(message, self.user_02)
|
|
)
|
|
self.assertFalse(
|
|
self._get_notifications(message, self.user_03)
|
|
)
|