1# -*- coding: utf-8 -*- 2# Part of Odoo. See LICENSE file for full copyright and licensing details. 3 4import datetime 5 6from odoo import tests, _ 7from odoo.addons.website_livechat.tests.common import TestLivechatCommon 8 9 10@tests.tagged('post_install', '-at_install') 11class TestLivechatBasicFlowHttpCase(tests.HttpCase, TestLivechatCommon): 12 def test_visitor_banner_history(self): 13 # create visitor history 14 self.env['website.track'].create([{ 15 'page_id': self.env.ref('website.homepage_page').id, 16 'visitor_id': self.visitor.id, 17 'visit_datetime': self.base_datetime, 18 }, { 19 'page_id': self.env.ref('website.contactus_page').id, 20 'visitor_id': self.visitor.id, 21 'visit_datetime': self.base_datetime - datetime.timedelta(minutes=10), 22 }, { 23 'page_id': self.env.ref('website.homepage_page').id, 24 'visitor_id': self.visitor.id, 25 'visit_datetime': self.base_datetime - datetime.timedelta(minutes=20), 26 }]) 27 28 handmade_history = "%s (21:10) → %s (21:20) → %s (21:30)" % ( 29 self.env.ref('website.homepage_page').name, 30 self.env.ref('website.contactus_page').name, 31 self.env.ref('website.homepage_page').name, 32 ) 33 history = self.env['mail.channel']._get_visitor_history(self.visitor) 34 35 self.assertEqual(history, handmade_history) 36 37 def test_livechat_username(self): 38 # Open a new live chat 39 res = self.opener.post(url=self.open_chat_url, json=self.open_chat_params) 40 self.assertEqual(res.status_code, 200) 41 channel_1 = self.env['mail.channel'].search([('livechat_visitor_id', '=', self.visitor.id), ('livechat_active', '=', True)], limit=1) 42 43 # Check Channel naming 44 self.assertEqual(channel_1.name, "%s %s" % (self.visitor.display_name, self.operator.livechat_username)) 45 channel_1.unlink() 46 47 # Remove livechat_username 48 self.operator.livechat_username = False 49 50 # Open a new live chat 51 res = self.opener.post(url=self.open_chat_url, json=self.open_chat_params) 52 self.assertEqual(res.status_code, 200) 53 channel_2 = self.env['mail.channel'].search([('livechat_visitor_id', '=', self.visitor.id), ('livechat_active', '=', True)], limit=1) 54 55 # Check Channel naming 56 self.assertEqual(channel_2.name, "%s %s" % (self.visitor.display_name, self.operator.name)) 57 58 def test_basic_flow_with_rating(self): 59 channel = self._common_basic_flow() 60 61 self._send_rating(channel, self.visitor, 5, "This deboulonnage was fine but not topitop.") 62 63 channel._close_livechat_session() 64 65 self.assertEqual(len(channel.message_ids), 4) 66 self.assertEqual(channel.message_ids[0].author_id, self.env.ref('base.partner_root'), "Odoobot must be the sender of the 'has left the conversation' message.") 67 self.assertEqual(channel.message_ids[0].body, "<p>%s has left the conversation.</p>" % self.visitor.display_name) 68 self.assertEqual(channel.livechat_active, False, "The livechat session must be inactive as the visitor sent his feedback.") 69 70 def test_basic_flow_without_rating(self): 71 channel = self._common_basic_flow() 72 73 # has left the conversation 74 channel._close_livechat_session() 75 self.assertEqual(len(channel.message_ids), 3) 76 self.assertEqual(channel.message_ids[0].author_id, self.env.ref('base.partner_root'), "Odoobot must be the author the message.") 77 self.assertEqual(channel.message_ids[0].body, "<p>%s has left the conversation.</p>" % self.visitor.display_name) 78 self.assertEqual(channel.livechat_active, False, "The livechat session must be inactive since visitor has left the conversation.") 79 80 def _common_basic_flow(self): 81 # Open a new live chat 82 res = self.opener.post(url=self.open_chat_url, json=self.open_chat_params) 83 self.assertEqual(res.status_code, 200) 84 85 channel = self.env['mail.channel'].search([('livechat_visitor_id', '=', self.visitor.id), ('livechat_active', '=', True)], limit=1) 86 87 # Check Channel and Visitor naming 88 self.assertEqual(self.visitor.display_name, "%s #%s" % (_("Website Visitor"), self.visitor.id)) 89 self.assertEqual(channel.name, "%s %s" % (self.visitor.display_name, self.operator.livechat_username)) 90 91 # Post Message from visitor 92 self._send_message(channel, self.visitor.display_name, "Message from Visitor") 93 94 self.assertEqual(len(channel.message_ids), 1) 95 self.assertEqual(channel.message_ids[0].author_id.id, False, "The author of the message is not a partner.") 96 self.assertEqual(channel.message_ids[0].email_from, self.visitor.display_name, "The sender's email should be the visitor's email.") 97 self.assertEqual(channel.message_ids[0].body, "<p>Message from Visitor</p>") 98 self.assertEqual(channel.livechat_active, True, "The livechat session must be active as the visitor did not left the conversation yet.") 99 100 # Post message from operator 101 self._send_message(channel, self.operator.email, "Message from Operator", author_id=self.operator.partner_id.id) 102 103 self.assertEqual(len(channel.message_ids), 2) 104 self.assertEqual(channel.message_ids[0].author_id, self.operator.partner_id, "The author of the message should be the operator.") 105 self.assertEqual(channel.message_ids[0].email_from, self.operator.email, "The sender's email should be the operator's email.") 106 self.assertEqual(channel.message_ids[0].body, "<p>Message from Operator</p>") 107 self.assertEqual(channel.livechat_active, True, "The livechat session must be active as the visitor did not left the conversation yet.") 108 109 return channel 110