oca-ocb-mail/odoo-bringout-oca-ocb-im_livechat/im_livechat/tests/test_im_livechat_channel.py
Ernad Husremovic daa394e8b0 19.0 vanilla
2026-03-09 09:31:39 +01:00

116 lines
5.6 KiB
Python

from datetime import timedelta
from odoo.tests import new_test_user, tagged
from odoo.exceptions import AccessError, ValidationError
from odoo.addons.im_livechat.tests.common import TestImLivechatCommon
from odoo.addons.im_livechat.tests.test_get_operator import TestGetOperator
from odoo.fields import Command, Datetime
@tagged("-at_install", "post_install")
class TestImLivechatChannel(TestImLivechatCommon, TestGetOperator):
def test_user_cant_join_livechat_channel(self):
bob_user = new_test_user(self.env, "bob_user", groups="base.group_user")
with self.assertRaises(AccessError):
self.livechat_channel.with_user(bob_user).action_join()
def test_operator_join_leave_livechat_channel(self):
bob_operator = new_test_user(
self.env, "bob_user", groups="base.group_user,im_livechat.im_livechat_group_user"
)
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
self.livechat_channel.with_user(bob_operator).action_join()
self.assertIn(bob_operator, self.livechat_channel.user_ids)
self.livechat_channel.with_user(bob_operator).action_quit()
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
def test_leave_livechat_channels_when_operator_access_revoked(self):
bob_operator = new_test_user(
self.env, "bob_user", groups="im_livechat.im_livechat_group_user"
)
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
self.livechat_channel.with_user(bob_operator).action_join()
self.assertIn(bob_operator, self.livechat_channel.user_ids)
livechat_operator_group = self.env.ref("im_livechat.im_livechat_group_user")
bob_operator.write({
"group_ids": [Command.unlink(livechat_operator_group.id)],
})
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
bob_operator.write({
"group_ids": [Command.link(livechat_operator_group.id)],
})
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
def test_leave_livechat_channels_when_manager_access_revoked(self):
bob_operator = new_test_user(
self.env, "bob_user", groups="im_livechat.im_livechat_group_manager"
)
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
self.livechat_channel.with_user(bob_operator).action_join()
self.assertIn(bob_operator, self.livechat_channel.user_ids)
livechat_manager_group = self.env.ref("im_livechat.im_livechat_group_manager")
bob_operator.write({
"group_ids": [Command.unlink(livechat_manager_group.id)],
})
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
bob_operator.write({
"group_ids": [Command.link(livechat_manager_group.id)],
})
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
def test_leave_livechat_channels_when_operator_removed_from_group(self):
bob_operator = new_test_user(
self.env, "bob_user", groups="im_livechat.im_livechat_group_user"
)
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
self.livechat_channel.with_user(bob_operator).action_join()
self.assertIn(bob_operator, self.livechat_channel.user_ids)
livechat_operator_group = self.env.ref("im_livechat.im_livechat_group_user")
livechat_operator_group.write({
"user_ids": [Command.unlink(bob_operator.id)],
})
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
livechat_operator_group.write({
"user_ids": [Command.link(bob_operator.id)],
})
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
def test_leave_livechat_channels_when_manager_removed_from_group(self):
bob_operator = new_test_user(
self.env, "bob_user", groups="im_livechat.im_livechat_group_manager"
)
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
self.livechat_channel.with_user(bob_operator).action_join()
self.assertIn(bob_operator, self.livechat_channel.user_ids)
livechat_manager_group = self.env.ref("im_livechat.im_livechat_group_manager")
livechat_manager_group.write({
"user_ids": [Command.unlink(bob_operator.id)],
})
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
livechat_manager_group.write({
"user_ids": [Command.link(bob_operator.id)],
})
self.assertNotIn(bob_operator, self.livechat_channel.user_ids)
def test_review_link(self):
with self.assertRaises(ValidationError):
self.livechat_channel.review_link = "javascript:alert('hello')"
with self.assertRaises(ValidationError):
self.livechat_channel.review_link = "https://"
self.livechat_channel.review_link = "https://www.odoo.com"
self.assertEqual(self.livechat_channel.review_link, "https://www.odoo.com")
def test_ongoing_session_count(self):
self.authenticate(None, None)
john = self._create_operator("fr_FR")
livechat_channel = self.env["im_livechat.channel"].create(
{"name": "Livechat Channel", "user_ids": [john.id]},
)
data = self.make_jsonrpc_request(
"/im_livechat/get_session",
{"channel_id": livechat_channel.id},
)
channel = self.env["discuss.channel"].browse(data["channel_id"])
self.assertEqual(livechat_channel.ongoing_session_count, 1)
channel.livechat_end_dt = Datetime.now() - timedelta(minutes=2)
self.assertEqual(livechat_channel.ongoing_session_count, 0)