89 lines
3.6 KiB
Python
89 lines
3.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from werkzeug.urls import url_parse
|
|
|
|
from odoo.addons.test_mail_full.tests.common import TestMailFullCommon
|
|
from odoo.addons.test_mail_sms.tests.common import TestSMSRecipients
|
|
from odoo.tests import tagged, users
|
|
|
|
|
|
class TestMailThreadInternalsCommon(TestMailFullCommon, TestSMSRecipients):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestMailThreadInternalsCommon, cls).setUpClass()
|
|
|
|
cls.test_portal_records, cls.test_portal_partners = cls._create_records_for_batch(
|
|
'mail.test.portal',
|
|
2,
|
|
)
|
|
cls.test_portal_nop_records, _ = cls._create_records_for_batch(
|
|
'mail.test.portal.no.partner',
|
|
2,
|
|
)
|
|
cls.test_rating_records, cls.test_rating_partners = cls._create_records_for_batch(
|
|
'mail.test.rating',
|
|
2,
|
|
)
|
|
cls.test_simple_records, _ = cls._create_records_for_batch(
|
|
'mail.test.simple',
|
|
2,
|
|
)
|
|
|
|
|
|
@tagged('mail_thread', 'portal')
|
|
class TestMailThreadInternals(TestMailThreadInternalsCommon):
|
|
|
|
@users('employee')
|
|
def test_notify_get_recipients_groups(self):
|
|
""" Test redirection of portal-enabled records """
|
|
test_records = [
|
|
self.test_portal_records[0].with_env(self.env),
|
|
self.test_portal_nop_records[0].with_env(self.env),
|
|
self.test_rating_records[0].with_env(self.env),
|
|
self.test_simple_records[0].with_env(self.env),
|
|
]
|
|
for test_record in test_records:
|
|
with self.subTest(test_record=test_record):
|
|
is_portal = test_record._name != 'mail.test.simple'
|
|
has_customer = test_record._name != 'mail.test.portal.no.partner'
|
|
partner_fnames = test_record._mail_get_partner_fields(introspect_fields=False)
|
|
|
|
if is_portal:
|
|
self.assertFalse(
|
|
test_record.access_token,
|
|
'By default access tokens are False with portal'
|
|
)
|
|
|
|
groups = test_record._notify_get_recipients_groups(
|
|
self.env['mail.message'], False,
|
|
)
|
|
portal_customer_group = next(
|
|
(group for group in groups if group[0] == 'portal_customer'),
|
|
False
|
|
)
|
|
|
|
if is_portal and has_customer:
|
|
# should have generated the access token, required for portal links
|
|
self.assertTrue(
|
|
test_record.access_token,
|
|
'Portal should generate access token'
|
|
)
|
|
# check portal_customer content and link
|
|
self.assertTrue(
|
|
portal_customer_group,
|
|
'Portal Mixin should add portal customer notification group'
|
|
)
|
|
portal_url = portal_customer_group[2]['button_access']['url']
|
|
parameters = url_parse(portal_url).decode_query()
|
|
self.assertEqual(parameters['access_token'], test_record.access_token)
|
|
self.assertEqual(parameters['model'], test_record._name)
|
|
self.assertEqual(parameters['pid'], str(test_record[partner_fnames[0]].id))
|
|
self.assertEqual(parameters['res_id'], str(test_record.id))
|
|
else:
|
|
self.assertFalse(
|
|
portal_customer_group,
|
|
'Portal Mixin should not add portal customer notification group'
|
|
)
|