Files
enterprise-addons/web_enterprise/static/tests/webclient/expiration_panel.test.js
T

622 lines
21 KiB
JavaScript

import { expect, test } from "@odoo/hoot";
import { click, queryFirst, edit } from "@odoo/hoot-dom";
import { animationFrame, mockDate, runAllTimers } from "@odoo/hoot-mock";
import {
getService,
mockService,
mountWithCleanup,
onRpc,
patchWithCleanup,
serverState,
} from "@web/../tests/web_test_helpers";
import { session } from "@web/session";
import { browser } from "@web/core/browser/browser";
import { WebClientEnterprise } from "@web_enterprise/webclient/webclient";
test("Expiration Panel one app installed", async () => {
mockDate("2019-10-10T12:00:00");
patchWithCleanup(session, {
expiration_date: "2019-11-09 12:00:00",
expiration_reason: "",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
await getService("action").doAction("menu");
expect(".oe_instance_register").toHaveText("This database will expire in 1 month.");
// Color should be grey
expect(".database_expiration_panel").toHaveClass("alert-info");
// Close the expiration panel
await click(".oe_instance_hide_panel");
await animationFrame();
expect(".database_expiration_panel").toHaveCount(0);
});
test("Expiration Panel one app installed, buy subscription", async () => {
expect.assertions(6);
mockDate("2019-10-10T12:00:00");
patchWithCleanup(session, {
expiration_date: "2019-10-24 12:00:00",
expiration_reason: "demo",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
onRpc("res.users", "search_count", () => 7);
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
await runAllTimers();
expect(".oe_instance_register").toHaveText(
"This demo database will expire in 14 days. Register your subscription or buy a subscription."
);
expect(".database_expiration_panel").toHaveClass("alert-warning", {
message: "Color should be orange",
});
expect(".oe_instance_register_show").toHaveCount(1, {
message: "Part 'Register your subscription'",
});
expect(".oe_instance_buy").toHaveCount(1, { message: "Part 'buy a subscription'" });
expect(".oe_instance_register_form").toHaveCount(0, {
message: "There should be no registration form",
});
// Click on 'buy subscription'
await click(".oe_instance_buy");
await animationFrame();
expect(browser.location.href).toBe("https://www.odoo.com/odoo-enterprise/upgrade?num_users=7");
});
test("Expiration Panel one app installed, try several times to register subscription", async () => {
expect.assertions(33);
mockDate("2019-10-10T12:00:00");
let callToGetParamCount = 0;
patchWithCleanup(session, {
expiration_date: "2019-10-15 12:00:00",
expiration_reason: "trial",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
mockService("notification", {
add: (message, options) => {
expect.step({ message, options });
},
});
onRpc("get_param", ({ args }) => {
expect.step("get_param");
if (args[0] === "database.already_linked_subscription_url") {
return false;
}
if (args[0] === "database.already_linked_email") {
return "super_company_admin@gmail.com";
}
expect(args[0]).toBe("database.expiration_date");
callToGetParamCount++;
if (callToGetParamCount <= 3) {
return "2019-10-15 12:00:00";
} else {
return "2019-11-15 12:00:00";
}
});
onRpc("set_param", ({ args }) => {
expect.step("set_param");
expect(args[0]).toBe("database.enterprise_code");
if (callToGetParamCount === 1) {
expect(args[1]).toBe("ABCDEF");
} else {
expect(args[1]).toBe("ABC");
}
return true;
});
onRpc("update_notification", ({ args }) => {
expect.step("update_notification");
expect(args[0]).toBeInstanceOf(Array);
expect(args[0]).toHaveLength(0);
return true;
});
onRpc("res.users", "search_count", () => 7);
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
expect(".oe_instance_register").toHaveText(
"This database will expire in 5 days. Register your subscription or buy a subscription."
);
expect(".database_expiration_panel").toHaveClass("alert-danger", {
message: "Color should be red",
});
expect(".oe_instance_register_show").toHaveCount(1, {
message: "Part 'Register your subscription'",
});
expect(".oe_instance_buy").toHaveCount(1, { message: "Part 'buy a subscription'" });
expect(".oe_instance_register_form").toHaveCount(0, {
message: "There should be no registration form",
});
// Click on 'buy subscription'
await click(".oe_instance_register_show");
await animationFrame();
expect(".oe_instance_register_form").toHaveCount(1, {
message: "there should be a registration form",
});
expect('.oe_instance_register_form input[placeholder="Paste code here"]').toHaveCount(1, {
message: "with an input with place holder 'Paste code here'",
});
expect(".oe_instance_register_form button").toHaveCount(1, {
message: "and a button 'Register'",
});
expect(".oe_instance_register_form button").toHaveText("Register");
await click(".oe_instance_register_form button");
await animationFrame();
expect(".oe_instance_register_form").toHaveCount(1, {
message: "there should be a registration form",
});
expect('.oe_instance_register_form input[placeholder="Paste code here"]').toHaveCount(1, {
message: "with an input with place holder 'Paste code here'",
});
expect(".oe_instance_register_form button").toHaveCount(1, {
message: "and a button 'Register'",
});
await click(".oe_instance_register_form input");
await edit("ABCDEF");
await animationFrame();
await click(".oe_instance_register_form button");
await animationFrame();
expect(queryFirst(".oe_instance_register")).toHaveText(
"Something went wrong while registering your database. You can try again or contact Odoo Support."
);
expect(".database_expiration_panel").toHaveClass("alert-danger", {
message: "Color should be red",
});
expect("span.oe_instance_error").toHaveCount(1);
expect(".oe_instance_register_form").toHaveCount(1, {
message: "there should be a registration form",
});
expect('.oe_instance_register_form input[placeholder="Paste code here"]').toHaveCount(1, {
message: "with an input with place holder 'Paste code here'",
});
expect(".oe_instance_register_form button").toHaveCount(1, {
message: "and a button 'Register'",
});
expect(".oe_instance_register_form button").toHaveText("Retry");
await click(".oe_instance_register_form input");
await edit("ABC");
await animationFrame();
await click(".oe_instance_register_form button");
await animationFrame();
expect(".database_expiration_panel").toHaveCount(0, {
message: "expiration panel should be gone",
});
expect.verifySteps([
// second try to submit
"get_param",
"set_param",
"update_notification",
"get_param",
"get_param",
"get_param",
// third try
"get_param",
"set_param",
"update_notification",
"get_param",
"get_param",
"get_param",
{
message:
"Thank you, your registration was successful! Your database is valid until November 15, 2019.",
options: { type: "success" },
},
]);
});
test("Expiration Panel one app installed, subscription already linked", async () => {
expect.assertions(5);
mockDate("2019-10-10T12:00:00");
let getExpirationDateCount = 0;
patchWithCleanup(session, {
expiration_date: "2019-10-15 12:00:00",
expiration_reason: "trial",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
onRpc("/already/linked/send/mail/url", () => ({
result: false,
reason: "By design",
}));
onRpc("get_param", ({ args }) => {
expect.step("get_param");
if (args[0] === "database.expiration_date") {
getExpirationDateCount++;
if (getExpirationDateCount === 1) {
return "2019-10-15 12:00:00";
} else {
return "2019-11-17 12:00:00";
}
}
if (args[0] === "database.already_linked_subscription_url") {
return "www.super_company.com";
}
if (args[0] === "database.already_linked_send_mail_url") {
return "/already/linked/send/mail/url";
}
if (args[0] === "database.already_linked_email") {
return "super_company_admin@gmail.com";
}
});
onRpc("set_param", () => {
expect.step("set_param");
return true;
});
onRpc("update_notification", () => {
expect.step("update_notification");
return true;
});
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
expect(".oe_instance_register").toHaveText(
"This database will expire in 5 days. Register your subscription or buy a subscription."
);
// Click on 'register your subscription'
await click(".oe_instance_register_show");
await animationFrame();
await click(".oe_instance_register_form input");
await edit("ABC");
await click(".oe_instance_register_form button");
await animationFrame();
expect(".oe_instance_register.oe_database_already_linked").toHaveText(
`Your subscription is already linked to a database.\nSend an email to the subscription owner to confirm the change, enter a new code or buy a subscription.`
);
await click("a.oe_contract_send_mail");
await animationFrame();
expect(".database_expiration_panel").toHaveClass("alert-danger", {
message: "Color should be red",
});
expect(".oe_instance_register.oe_database_already_linked").toHaveText(
`Your subscription is already linked to a database.\nSend an email to the subscription owner to confirm the change, enter a new code or buy a subscription.\n\nUnable to send the instructions by email, please contact the Odoo Support\nError reason: By design`
);
expect.verifySteps([
"get_param",
"set_param",
"update_notification",
"get_param",
"get_param",
"get_param",
"get_param",
]);
});
test("One app installed, database expired", async () => {
expect.assertions(8);
mockDate("2019-10-10T12:00:00");
let callToGetParamCount = 0;
patchWithCleanup(session, {
expiration_date: "2019-10-08 12:00:00",
expiration_reason: "trial",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
onRpc("/already/linked/send/mail/url", () => ({
result: false,
reason: "By design",
}));
onRpc("get_param", ({ args }) => {
if (args[0] === "database.already_linked_subscription_url") {
return false;
}
callToGetParamCount++;
if (callToGetParamCount === 1) {
return "2019-10-09 12:00:00";
} else {
return "2019-11-09 12:00:00";
}
});
onRpc("set_param", () => true);
onRpc("update_notification", () => true);
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
expect(".oe_instance_register").toHaveText(
"This database has expired. Register your subscription or buy a subscription."
);
expect(".o_blockUI").toHaveCount(1, { message: "UI should be blocked" });
expect(".database_expiration_panel").toHaveClass("alert-danger", {
message: "Color should be red",
});
expect(".oe_instance_register_show").toHaveCount(1, {
message: "Part 'Register your subscription'",
});
expect(".oe_instance_buy").toHaveCount(1, { message: "Part 'buy a subscription'" });
expect(".oe_instance_register_form").toHaveCount(0);
// Click on 'Register your subscription'
await click(".oe_instance_register_show");
await animationFrame();
await click(".oe_instance_register_form input");
await edit("ABC");
await click(".oe_instance_register_form button");
await animationFrame();
expect(".oe_instance_register").toHaveText(
"Thank you, your registration was successful! Your database is valid until November 9, 2019."
);
expect(".o_blockUI").toHaveCount(0, { message: "UI should no longer be blocked" });
});
test("One app installed, renew", async () => {
expect.assertions(7);
mockDate("2019-10-10T12:00:00");
patchWithCleanup(session, {
expiration_date: "2019-10-20 12:00:00",
expiration_reason: "renewal",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
onRpc("get_param", ({ args }) => {
expect.step("get_param");
expect(args[0]).toBe("database.enterprise_code");
return "ABC";
});
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
expect(".oe_instance_register").toHaveText(
"Your subscription expired 9 days ago. This database will be blocked soon.\n" +
"Renew now\n" +
"I paid, please recheck!"
);
expect(".database_expiration_panel").toHaveClass("alert-warning", {
message: "Color should be orange",
});
expect(".oe_instance_renew").toHaveCount(1, { message: "Part 'Register your subscription'" });
expect("a.check_enterprise_status").toHaveCount(1, {
message: "there should be a button for status checking",
});
expect(".oe_instance_register_form").toHaveCount(0);
// Click on 'Renew your subscription'
await click(".oe_instance_renew");
await animationFrame();
expect.verifySteps(["get_param"]);
});
test("One app installed, check status and get success", async () => {
expect.assertions(4);
mockDate("2019-10-10T12:00:00");
patchWithCleanup(session, {
expiration_date: "2019-10-20 12:00:00",
expiration_reason: "renewal",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
onRpc("get_param", ({ args }) => {
expect.step("get_param");
expect(args[0]).toBe("database.expiration_date");
return "2019-10-24 12:00:00";
});
onRpc("update_notification", () => {
expect.step("update_notification");
return true;
});
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
// click on "I paid, please recheck!"
expect("a.check_enterprise_status").toHaveText("I paid, please recheck!");
await click("a.check_enterprise_status");
await animationFrame();
expect(".oe_instance_register.oe_subscription_updated").toHaveText(
"Your subscription was updated and is valid until October 24, 2019."
);
expect.verifySteps(["update_notification", "get_param"]);
});
// Why would we want to reload the page when we check the status and it hasn't changed?
test.skip("One app installed, check status and get page reload", async () => {
expect.assertions(4);
mockDate("2019-10-10T12:00:00");
patchWithCleanup(session, {
expiration_date: "2019-10-20 12:00:00",
expiration_reason: "renewal",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
onRpc("get_param", () => {
expect.step("get_param");
return "2019-10-20 12:00:00";
});
onRpc("update_notification", () => {
expect.step("update_notification");
return true;
});
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
// click on "I paid, please recheck!"
await click("a.check_enterprise_status");
await animationFrame();
expect.verifySteps(["update_notification", "get_param", "reloadPage"]);
});
test("One app installed, upgrade database", async () => {
expect.assertions(4);
mockDate("2019-10-10T12:00:00");
patchWithCleanup(session, {
expiration_date: "2019-10-20 12:00:00",
expiration_reason: "upsell",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
onRpc("get_param", ({ args }) => {
expect.step("get_param");
expect(args[0]).toBe("database.enterprise_code");
return "ABC";
});
onRpc("search_count", () => {
expect.step("search_count");
return 13;
});
onRpc("update_notification", () => true);
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
await runAllTimers();
expect(".oe_instance_register").toHaveText(
"This database will expire in 10 days. You have more users or more apps installed than your subscription allows.\n\n" +
"Upgrade your subscription\n" +
"I paid, please recheck!"
);
// click on "Upgrade your subscription"
await click("a.oe_instance_upsell");
await animationFrame();
expect.verifySteps(["get_param", "search_count"]);
expect(browser.location.href).toBe(
"https://www.odoo.com/odoo-enterprise/upsell?num_users=13&contract=ABC"
);
});
test("One app installed, message for non admin user", async () => {
expect.assertions(2);
mockDate("2019-10-10T12:00:00");
patchWithCleanup(session, {
expiration_date: "2019-11-08 12:00:00",
expiration_reason: "",
storeData: true, // used by subscription service to know whether mail is installed
warning: "user",
});
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
expect(".oe_instance_register").toHaveText(
"This database will expire in 29 days. Log in as an administrator to correct the issue."
);
expect(".database_expiration_panel").toHaveClass("alert-info", {
message: "Color should be grey",
});
});
test("One app installed, navigation to renewal page", async () => {
expect.assertions(8);
mockDate("2019-11-10T00:00:00");
patchWithCleanup(session, {
expiration_date: "2019-10-20 12:00:00",
expiration_reason: "renewal",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
onRpc("get_param", ({ args }) => {
expect.step("get_param");
expect(args[0]).toBe("database.enterprise_code");
return "ABC";
});
onRpc("update_notification", () => {
expect.step("update_notification");
return true;
});
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
await runAllTimers();
expect(".oe_instance_register").toHaveText(
"This database has expired.\nRenew now\nI paid, please recheck!"
);
expect(".database_expiration_panel").toHaveClass("alert-danger");
expect(".oe_instance_renew").toHaveCount(1, { message: "Part 'Register your subscription'" });
expect("a.check_enterprise_status").toHaveCount(1, {
message: "there should be a button for status checking",
});
expect(".oe_instance_register_form").toHaveCount(0);
// Click on 'Renew your subscription'
await click(".oe_instance_renew");
await animationFrame();
expect(browser.location.href).toBe("https://www.odoo.com/odoo-enterprise/renew?contract=ABC");
expect.verifySteps(["get_param"]);
});
test("One app installed, different locale (arabic)", async () => {
expect.assertions(1);
mockDate("2019-25-09T12:00:00");
patchWithCleanup(session, {
expiration_date: "2019-10-20 12:00:00",
expiration_reason: "renewal",
storeData: true, // used by subscription service to know whether mail is installed
warning: "admin",
});
serverState.lang = "ar-001";
onRpc("get_param", () => "2019-11-09 12:00:00");
onRpc("update_notification", () => true);
await mountWithCleanup(WebClientEnterprise);
await animationFrame();
await click("a.check_enterprise_status");
await animationFrame();
expect(".oe_instance_register").toHaveText(
"Your subscription was updated and is valid until ٩ نوفمبر ٢٠١٩."
);
});