website_livechat/static/tests/tours/website_livechat_chatbot_flow.js

231 lines
8.1 KiB
JavaScript
Raw Normal View History

/** @odoo-module */
import { registry } from "@web/core/registry";
import { debounce } from "@web/core/utils/timing";
import { contains } from "@web/../tests/utils";
const messagesContain = (text) => `.o-mail-Message:contains("${text}")`;
registry.category("web_tour.tours").add("website_livechat_chatbot_flow_tour", {
test: true,
shadow_dom: ".o-livechat-root",
steps: () => [
{
trigger: messagesContain("Hello! I'm a bot!"),
run: () => {
// make chat bot faster for this tour
const chatbotService = odoo.__WOWL_DEBUG__.root.env.services["im_livechat.chatbot"];
chatbotService.debouncedProcessUserAnswer = debounce(
chatbotService._processUserAnswer.bind(chatbotService),
500
);
},
},
{
trigger: messagesContain("I help lost visitors find their way."),
run: () => {}, // check second welcome message is posted
},
{
trigger: messagesContain("How can I help you?"),
// check question_selection message is posted and reactions are not
// available since the thread is not yet persisted
run() {
if (
this.$anchor[0].querySelector(
".o-mail-Message-actions [title='Add a Reaction']"
)
) {
console.error("Reactions should not be available before thread is persisted.");
}
},
},
{
trigger: 'li:contains("I want to buy the software")',
run: "click",
},
{
trigger: ".o-mail-ChatWindow",
// check selected option is posted and reactions are available since
// the thread has been persisted in the process
async run() {
await contains(".o-mail-Message-actions [title='Add a Reaction']", {
target: this.$anchor[0].getRootNode(),
parent: [".o-mail-Message", { text: "I want to buy the software" }],
});
},
},
{
trigger: messagesContain("Can you give us your email please?"),
run: () => {}, // check ask email step following selecting option A
},
{
trigger: ".o-mail-Composer-input ",
run: "text No, you won't get my email!",
},
{
trigger: ".o-mail-Composer-input",
run() {
this.$anchor[0].dispatchEvent(
new KeyboardEvent("keydown", { key: "Enter", which: 13, bubbles: true })
);
},
},
{
trigger: messagesContain(
"'No, you won't get my email!' does not look like a valid email. Can you please try again?"
),
run: () => {}, // check invalid email detected and the bot asks for a retry
},
{
trigger: ".o-mail-Composer-input",
run: "text okfine@fakeemail.com",
},
{
trigger: ".o-mail-Composer-input",
run() {
this.$anchor[0].dispatchEvent(
new KeyboardEvent("keydown", { key: "Enter", which: 13, bubbles: true })
);
},
},
{
trigger: messagesContain("Your email is validated, thank you!"),
run: () => {}, // check that this time the email goes through and we proceed to next step
},
{
trigger: messagesContain("Would you mind providing your website address?"),
run: () => {}, // should ask for website now
},
{
trigger: ".o-mail-Composer-input",
run: "text https://www.fakeaddress.com",
},
{
trigger: ".o-mail-Composer-input",
run() {
this.$anchor[0].dispatchEvent(
new KeyboardEvent("keydown", { key: "Enter", which: 13, bubbles: true })
);
},
},
{
trigger: messagesContain("Great, do you want to leave any feedback for us to improve?"),
run: () => {}, // should ask for feedback now
},
{
trigger: ".o-mail-Composer-input",
run: "text Yes, actually, I'm glad you asked!",
},
{
trigger: ".o-mail-Composer-input",
run() {
this.$anchor[0].dispatchEvent(
new KeyboardEvent("keydown", { key: "Enter", which: 13, bubbles: true })
);
},
},
{
trigger: ".o-mail-Composer-input",
run: "text I think it's outrageous that you ask for all my personal information!",
},
{
trigger: ".o-mail-Composer-input",
run() {
this.$anchor[0].dispatchEvent(
new KeyboardEvent("keydown", { key: "Enter", which: 13, bubbles: true })
);
},
},
{
trigger: ".o-mail-Composer-input",
run: "text I will be sure to take this to your manager!",
},
{
trigger: ".o-mail-Composer-input",
run() {
this.$anchor[0].dispatchEvent(
new KeyboardEvent("keydown", { key: "Enter", which: 13, bubbles: true })
);
},
},
{
trigger: messagesContain("Ok bye!"),
run: () => {}, // last step is displayed
},
{
trigger: ".o-mail-ChatWindow-command[title='Restart Conversation']",
run: "click",
},
{
trigger: messagesContain("Restarting conversation..."),
run: () => {}, // check that conversation is properly restarting
},
{
trigger: messagesContain("Hello! I'm a bot!"),
run: () => {}, // check first welcome message is posted
},
{
trigger: messagesContain("I help lost visitors find their way."),
run: () => {}, // check second welcome message is posted
},
{
trigger: messagesContain("How can I help you?"),
run: () => {}, // check question_selection message is posted
},
{
trigger: 'li:contains("Pricing Question")',
run: "click",
},
{
trigger: messagesContain(
"For any pricing question, feel free ton contact us at pricing@mycompany.com"
),
run: () => {}, // the path should now go towards 'Pricing Question (first part)'
},
{
trigger: messagesContain("We will reach back to you as soon as we can!"),
run: () => {}, // the path should now go towards 'Pricing Question (second part)'
},
{
trigger: messagesContain("Would you mind providing your website address?"),
run: () => {}, // should ask for website now
},
{
trigger: ".o-mail-Composer-input",
run: "text no",
},
{
trigger: ".o-mail-Composer-input",
run() {
this.$anchor[0].dispatchEvent(
new KeyboardEvent("keydown", { key: "Enter", which: 13, bubbles: true })
);
},
},
{
trigger: messagesContain("Great, do you want to leave any feedback for us to improve?"),
run: () => {}, // should ask for feedback now
},
{
trigger: ".o-mail-Composer-input",
run: "text no, nothing so say",
},
{
trigger: ".o-mail-Composer-input",
run() {
this.$anchor[0].dispatchEvent(
new KeyboardEvent("keydown", { key: "Enter", which: 13, bubbles: true })
);
},
},
{
trigger: messagesContain("Ok bye!"),
},
{
// wait for chatbot script to finish.
trigger: ".o-mail-ChatWindow-command[title='Restart Conversation']",
run() {},
},
],
});