Odoo18-Base/addons/test_mail_full/tests/test_mail_thread_internals.py
2025-01-06 10:57:38 +07:00

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'
)