In this commit we introduce a new module ``test_mail_sms`` that holds the tests for sms application, like ``test_mail`` does for mail. Currently all sms tests are inside ``test_mail_full``. After this commit code is moved from ``test_mail_full`` into that module. Full testing module should be used mainly to test integrations with a lot of submodules and for performance tests, not testing details of SMS implementation. We also add ``mass_mailing_sms`` as dependency of ``test_mass_mailing`` so that both mailing types are tested in the same module. It eases maintenance and writing of tests. Mass mailing SMS tests from `test_mail_full`` are therefore moved in ``test_mass_mailing``. This commit also allows some cleaning in classes used in tests, to have classes in ``test_mail_sms`` and ``test_mail_full`` that contain everything necessary to test mail features. Task-2890111 (Test Mail/Mass Mailing: SMS tests reorganization and move) Part-of: odoo/odoo#96223
109 lines
3.7 KiB
Python
109 lines
3.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import json
|
|
|
|
from odoo import http
|
|
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
|
|
from odoo.tests.common import HttpCase
|
|
|
|
|
|
@tagged('portal')
|
|
class TestPortal(HttpCase, TestMailFullCommon, TestSMSRecipients):
|
|
|
|
def setUp(self):
|
|
super(TestPortal, self).setUp()
|
|
|
|
self.record_portal = self.env['mail.test.portal'].create({
|
|
'partner_id': self.partner_1.id,
|
|
'name': 'Test Portal Record',
|
|
})
|
|
|
|
self.record_portal._portal_ensure_token()
|
|
|
|
def test_portal_message_fetch(self):
|
|
"""Test retrieving chatter messages through the portal controller"""
|
|
self.authenticate(None, None)
|
|
message_fetch_url = '/mail/chatter_fetch'
|
|
payload = json.dumps({
|
|
'jsonrpc': '2.0',
|
|
'method': 'call',
|
|
'id': 0,
|
|
'params': {
|
|
'res_model': 'mail.test.portal',
|
|
'res_id': self.record_portal.id,
|
|
'token': self.record_portal.access_token,
|
|
},
|
|
})
|
|
|
|
def get_chatter_message_count():
|
|
res = self.url_open(
|
|
url=message_fetch_url,
|
|
data=payload,
|
|
headers={'Content-Type': 'application/json'}
|
|
)
|
|
return res.json().get('result', {}).get('message_count', 0)
|
|
|
|
self.assertEqual(get_chatter_message_count(), 0)
|
|
|
|
for _ in range(8):
|
|
self.record_portal.message_post(
|
|
body='Test',
|
|
author_id=self.partner_1.id,
|
|
message_type='comment',
|
|
subtype_id=self.env.ref('mail.mt_comment').id,
|
|
)
|
|
|
|
self.assertEqual(get_chatter_message_count(), 8)
|
|
|
|
# Empty the body of a few messages
|
|
for i in (2, 5, 6):
|
|
self.record_portal.message_ids[i].body = ""
|
|
|
|
# Empty messages should be ignored
|
|
self.assertEqual(get_chatter_message_count(), 5)
|
|
|
|
@users('employee')
|
|
def test_portal_mixin(self):
|
|
""" Test internals of portal mixin """
|
|
customer = self.partner_1.with_env(self.env)
|
|
record_portal = self.env['mail.test.portal'].create({
|
|
'partner_id': customer.id,
|
|
'name': 'Test Portal Record',
|
|
})
|
|
|
|
self.assertFalse(record_portal.access_token)
|
|
self.assertEqual(record_portal.access_url, '/my/test_portal/%s' % record_portal.id)
|
|
|
|
record_portal._portal_ensure_token()
|
|
self.assertTrue(record_portal.access_token)
|
|
|
|
def test_portal_share_comment(self):
|
|
""" Test posting through portal controller allowing to use a hash to
|
|
post wihtout access rights. """
|
|
self.authenticate(None, None)
|
|
post_url = f"{self.record_portal.get_base_url()}/mail/chatter_post"
|
|
|
|
# test as not logged
|
|
self.opener.post(
|
|
url=post_url,
|
|
json={
|
|
'params': {
|
|
'csrf_token': http.Request.csrf_token(self),
|
|
'hash': self.record_portal._sign_token(self.partner_2.id),
|
|
'message': 'Test',
|
|
'pid': self.partner_2.id,
|
|
'redirect': '/',
|
|
'res_model': self.record_portal._name,
|
|
'res_id': self.record_portal.id,
|
|
'token': self.record_portal.access_token,
|
|
},
|
|
},
|
|
)
|
|
message = self.record_portal.message_ids[0]
|
|
|
|
self.assertIn('Test', message.body)
|
|
self.assertEqual(message.author_id, self.partner_2)
|