92 lines
3.6 KiB
Python
92 lines
3.6 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import odoo
|
|
from odoo.addons.mail.tests.test_controller_common import TestControllerCommon
|
|
|
|
|
|
@odoo.tests.tagged("-at_install", "post_install")
|
|
class TestBinaryControllerCommon(TestControllerCommon):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.user_test = cls.env["res.users"].create(
|
|
{
|
|
"email": "testuser@testuser.com",
|
|
"name": "Test User",
|
|
"login": "test_user",
|
|
"password": "test_user",
|
|
}
|
|
)
|
|
cls.guest_2 = cls.env["mail.guest"].create({"name": "Guest 2"})
|
|
|
|
def _execute_subtests(self, record, subtests):
|
|
for data_user, allowed in subtests:
|
|
user = data_user if data_user._name == "res.users" else self.user_public
|
|
guest = data_user if data_user._name == "mail.guest" else self.env["mail.guest"]
|
|
self._authenticate_user(user=user, guest=guest)
|
|
with self.subTest(user=user.name, guest=guest.name, record=record):
|
|
guest_or_partner = record if record._name == "mail.guest" else record.partner_id
|
|
if allowed:
|
|
self.assertEqual(
|
|
self._get_avatar_url(guest_or_partner).headers["Content-Disposition"],
|
|
f'inline; filename="{guest_or_partner.name}.svg"',
|
|
)
|
|
else:
|
|
self.assertEqual(
|
|
self._get_avatar_url(guest_or_partner).headers["Content-Disposition"],
|
|
"inline; filename=placeholder.png",
|
|
)
|
|
|
|
def _get_avatar_url(self, record):
|
|
url = f"/web/image?field=avatar_128&id={record.id}&model={record._name}&unique={odoo.fields.Datetime.to_string(record.write_date)}"
|
|
return self.url_open(url)
|
|
|
|
def _send_message(self, author, thread_model, thread_id):
|
|
user = author if author._name == "res.users" else self.user_public
|
|
guest = author if author._name == "mail.guest" else self.env["mail.guest"]
|
|
self._authenticate_user(user=user, guest=guest)
|
|
self.make_jsonrpc_request(
|
|
route="/mail/message/post",
|
|
params={
|
|
"thread_model": thread_model,
|
|
"thread_id": thread_id,
|
|
"post_data": {
|
|
"body": "Test",
|
|
"message_type": "comment",
|
|
"subtype_xmlid": "mail.mt_comment",
|
|
},
|
|
},
|
|
)
|
|
|
|
|
|
@odoo.tests.tagged("-at_install", "post_install")
|
|
class TestBinaryController(TestBinaryControllerCommon):
|
|
def test_open_partner_avatar(self):
|
|
"""Test access to open the partner avatar."""
|
|
self._execute_subtests(
|
|
self.user_test,
|
|
(
|
|
(self.user_public, False),
|
|
(self.guest, False),
|
|
(self.user_portal, False),
|
|
(self.user_employee, True),
|
|
(self.user_demo, True),
|
|
(self.user_admin, True),
|
|
),
|
|
)
|
|
|
|
def test_open_partner_avatar_has_message(self):
|
|
"""Test access to open a partner avatar who has sent a message on a private record."""
|
|
self._send_message(self.user_test, "res.partner", self.user_test.partner_id.id)
|
|
self._execute_subtests(
|
|
self.user_test,
|
|
(
|
|
(self.user_public, False),
|
|
(self.guest, False),
|
|
(self.user_portal, False),
|
|
(self.user_employee, True),
|
|
(self.user_demo, True),
|
|
(self.user_admin, True),
|
|
),
|
|
)
|