summaryrefslogtreecommitdiff
path: root/addons/website_livechat/tests/common.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website_livechat/tests/common.py')
-rw-r--r--addons/website_livechat/tests/common.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/addons/website_livechat/tests/common.py b/addons/website_livechat/tests/common.py
new file mode 100644
index 00000000..9cc162ff
--- /dev/null
+++ b/addons/website_livechat/tests/common.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, tests
+
+
+class TestLivechatCommon(tests.TransactionCase):
+ def setUp(self):
+ super(TestLivechatCommon, self).setUp()
+ self.base_datetime = fields.Datetime.from_string("2019-11-11 21:30:00")
+
+ self.operator = self.env['res.users'].create({
+ 'name': 'Operator Michel',
+ 'login': 'operator',
+ 'email': 'operator@example.com',
+ 'password': "ideboulonate",
+ 'livechat_username': 'El Deboulonnator',
+ })
+
+ self.livechat_channel = self.env['im_livechat.channel'].create({
+ 'name': 'The basic channel',
+ 'user_ids': [(6, 0, [self.operator.id])]
+ })
+
+ self.max_sessions_per_operator = 5
+ visitor_vals = {
+ 'lang_id': self.env.ref('base.lang_en').id,
+ 'country_id': self.env.ref('base.be').id,
+ 'website_id': self.env.ref('website.default_website').id,
+ }
+ self.visitors = self.env['website.visitor'].create([{
+ 'lang_id': self.env.ref('base.lang_en').id,
+ 'country_id': self.env.ref('base.de').id,
+ 'website_id': self.env.ref('website.default_website').id,
+ 'partner_id': self.env.ref('base.user_demo').partner_id.id,
+ }] + [visitor_vals]*self.max_sessions_per_operator)
+ self.visitor_demo, self.visitor = self.visitors[0], self.visitors[1]
+
+ base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
+
+ self.open_chat_url = base_url + "/im_livechat/get_session"
+ self.open_chat_params = {'params': {
+ 'channel_id': self.livechat_channel.id,
+ 'anonymous_name': "Wrong Name"
+ }}
+
+ self.send_feedback_url = base_url + "/im_livechat/feedback"
+ self.leave_session_url = base_url + "/im_livechat/visitor_leave_session"
+
+ # override the get_available_users to return only Michel as available
+ operators = self.operator
+ def get_available_users(self):
+ return operators
+ self.patch(type(self.env['im_livechat.channel']), '_get_available_users', get_available_users)
+
+ # override the _get_visitor_from_request to return self.visitor
+ self.target_visitor = self.visitor
+ def get_visitor_from_request(self_mock, **kwargs):
+ return self.target_visitor
+ self.patch(type(self.env['website.visitor']), '_get_visitor_from_request', get_visitor_from_request)
+
+ def _send_message(self, channel, email_from, body, author_id=False):
+ # As bus is unavailable in test mode, we cannot call /mail/chat_post route to post a message.
+ # Instead, we post directly the message on the given channel.
+ channel.with_context(mail_create_nosubscribe=True) \
+ .message_post(author_id=author_id, email_from=email_from, body=body,
+ message_type='comment', subtype_id=self.env.ref('mail.mt_comment').id)
+
+ def _send_rating(self, channel, visitor, rating_value, reason=False):
+ channel_messages_count = len(channel.message_ids)
+
+ rating_to_emoji = {1: "😞", 3: "😐", 5: "😊"}
+ self.opener.post(url=self.send_feedback_url, json={'params': {
+ 'uuid': channel.uuid,
+ 'rate': rating_value,
+ 'reason': reason,
+ }})
+ res_model_id = self.env['ir.model'].sudo().search([('model', '=', channel._name)], limit=1).id
+ rating = self.env['rating.rating'].search([('res_id', '=', channel.id), ('res_model_id', '=', res_model_id)])
+ self.assertEqual(rating.rating, rating_value, "The rating is not correct.")
+
+ message = "Rating: %s" % rating_to_emoji[rating_value]
+ if reason:
+ message += " \n%s" % reason
+
+ self._send_message(channel, visitor.display_name, message, author_id=False)
+ self.assertEqual(len(channel.message_ids), channel_messages_count + 1)