101 lines
4.8 KiB
Python
101 lines
4.8 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import Command
|
|
from odoo.addons.website_helpdesk_livechat.tests.helpdesk_livechat_chatbot_common import HelpdeskChatbotCase
|
|
from odoo.tests import new_test_user, tagged
|
|
|
|
|
|
@tagged("post_install", "-at_install")
|
|
class TestChatbotCreateTicket(HelpdeskChatbotCase):
|
|
|
|
def test_chatbot_helpdesk_ticket_public_user(self):
|
|
""" Create a ticket from a public user and check that information are correctly propagated. """
|
|
created_ticket = self._chatbot_create_helpdesk_ticket()
|
|
self.assertEqual(created_ticket.partner_email, 'helpme@example.com')
|
|
self.assertEqual(created_ticket.partner_phone, '+32499112233')
|
|
|
|
self.assertIn('There is a problem with my printer.', created_ticket.description)
|
|
self.assertIn('helpme@example.com', created_ticket.description)
|
|
self.assertIn('+32499112233', created_ticket.description)
|
|
|
|
self.assertFalse(bool(created_ticket.team_id))
|
|
|
|
def test_chatbot_helpdesk_ticket_portal_user(self):
|
|
""" Create a ticket from a portal user and check that information are correctly propagated. """
|
|
self.authenticate(self.user_portal.login, self.user_portal.login)
|
|
self.step_helpdesk_create_ticket.write({'helpdesk_team_id': self.helpdesk_team.id})
|
|
created_ticket = self._chatbot_create_helpdesk_ticket()
|
|
# should use email defined on base partner since it's not empty
|
|
self.assertNotEqual(created_ticket.partner_email, "helpme@example.com")
|
|
# phone however WAS empty -> check that it has been updated
|
|
self.assertEqual(created_ticket.partner_phone, '+32499112233')
|
|
|
|
self.assertEqual(created_ticket.team_id, self.helpdesk_team)
|
|
|
|
def _chatbot_create_helpdesk_ticket(self):
|
|
data = self.make_jsonrpc_request("/im_livechat/get_session", {
|
|
'channel_id': self.livechat_channel.id,
|
|
'chatbot_script_id': self.chatbot_script.id,
|
|
})
|
|
discuss_channel = self.env['discuss.channel'].sudo().browse(data["channel_id"])
|
|
|
|
self._post_answer_and_trigger_next_step(
|
|
discuss_channel, chatbot_script_answer=self.step_selection_ticket
|
|
)
|
|
|
|
self.assertEqual(discuss_channel.chatbot_current_step_id, self.step_helpdesk_issue)
|
|
self._post_answer_and_trigger_next_step(discuss_channel, 'There is a problem with my printer.')
|
|
|
|
self.assertEqual(discuss_channel.chatbot_current_step_id, self.step_helpdesk_email)
|
|
self._post_answer_and_trigger_next_step(discuss_channel, email="helpme@example.com")
|
|
|
|
self.assertEqual(discuss_channel.chatbot_current_step_id, self.step_helpdesk_phone)
|
|
self._post_answer_and_trigger_next_step(discuss_channel, '+32499112233')
|
|
|
|
self.assertEqual(discuss_channel.chatbot_current_step_id, self.step_helpdesk_create_ticket)
|
|
return self.env["helpdesk.ticket"].search(
|
|
[("origin_channel_id", "=", discuss_channel.id)], order="id desc", limit=1
|
|
)
|
|
|
|
def test_create_ticket_from_chatbot(self):
|
|
helpdesk_team = self.env["helpdesk.team"].create({"name": "Helpdesk Team"})
|
|
chatbot_script = self.env["chatbot.script"].create({"title": "Create ticket bot"})
|
|
self.env["chatbot.script.step"].create(
|
|
[
|
|
{
|
|
"chatbot_script_id": chatbot_script.id,
|
|
"message": "Hello, how can I help you?",
|
|
"step_type": "free_input_single",
|
|
},
|
|
{
|
|
"step_type": "question_email",
|
|
"chatbot_script_id": chatbot_script.id,
|
|
"message": "Would you mind leaving your email address so that we can reach you back?",
|
|
},
|
|
{
|
|
"step_type": "create_ticket",
|
|
"helpdesk_team_id": helpdesk_team.id,
|
|
"chatbot_script_id": chatbot_script.id,
|
|
"message": "Thank you, you should hear back from us very soon!",
|
|
},
|
|
]
|
|
)
|
|
livechat_channel = self.env["im_livechat.channel"].create(
|
|
{
|
|
"name": "Create ticket channel",
|
|
"rule_ids": [
|
|
Command.create(
|
|
{
|
|
"regex_url": "/",
|
|
"chatbot_script_id": chatbot_script.id,
|
|
}
|
|
)
|
|
],
|
|
}
|
|
)
|
|
self.start_tour(
|
|
f"/im_livechat/support/{livechat_channel.id}", "website_helpdesk_livechat.create_ticket_from_chatbot"
|
|
)
|
|
ticket = self.env["helpdesk.ticket"].search([("origin_channel_id", "=", livechat_channel.channel_ids.id)])
|
|
self.assertEqual(ticket.name, "I'd like to know more about the Helpdesk application.")
|