cumulocity-cypress
Version:
Cypress commands for Cumulocity IoT
141 lines (140 loc) • 4.74 kB
JavaScript
const { _ } = Cypress;
Cypress.Commands.add("hideCookieBanner", () => {
Cypress.log({
name: "hideCookieBanner",
});
cy.acceptCookieBanner(true, true, true);
});
Cypress.Commands.add("acceptCookieBanner", (required = true, functional = true, marketing = true) => {
const COOKIE_NAME = "acceptCookieNotice";
const consoleProps = {
required,
functional,
marketing,
};
Cypress.log({
name: "acceptCookieBanner",
message: "",
consoleProps: () => consoleProps,
});
const setLocalCookie = (c) => {
const cookie = JSON.stringify(c);
window.localStorage.removeItem("__ccHideCookieBanner");
Cypress.on("window:before:load", (window) => {
window.localStorage.setItem(COOKIE_NAME, cookie);
});
window.localStorage.setItem(COOKIE_NAME, cookie);
};
setLocalCookie({ required, functional, marketing });
cy.intercept({
pathname: /\/apps\/public\/public-options(@app-[^/]+)?\/options.json/,
}, (request) => {
request.on("before:response", (response) => {
if (response.statusCode !== 200) {
return;
}
if (window.localStorage.getItem("__ccHideCookieBanner") === "false") {
return;
}
const policyVersion = response.body.cookieBanner?.policyVersion;
const denyCookies = {
required: !!required,
functional: !!functional,
marketing: !!marketing,
};
if (policyVersion != null) {
denyCookies.policyVersion = policyVersion;
}
setLocalCookie(denyCookies);
});
});
});
Cypress.Commands.add("showCookieBanner", () => {
Cypress.log({
name: "showCookieBanner",
});
Cypress.on("window:before:load", (window) => {
window.localStorage.removeItem("acceptCookieNotice");
});
window.localStorage.removeItem("acceptCookieNotice");
window.localStorage.setItem("__ccHideCookieBanner", "false");
});
Cypress.Commands.add("disableCookieBanner", () => {
Cypress.log({
name: "disableCookieBanner",
message: "",
});
cy.intercept({
pathname: /\/apps\/public\/public-options(@app-[^/]+)?\/options.json/,
}, (req) => {
req.continue((res) => {
res.body.cookieBanner = undefined;
res.send();
});
});
});
Cypress.Commands.add("visitAndWaitForSelector", (url, language = "en", selector = "c8y-navigator-outlet c8y-app-icon", timeout = Cypress.config().pageLoadTimeout || 60000) => {
const consoleProps = {
url,
language,
selector,
timeout,
};
Cypress.log({
name: "visitAndWaitForSelector",
message: url,
consoleProps: () => consoleProps,
});
cy.setLanguage(language);
cy.visit(url);
cy.get(selector, { timeout }).should("be.visible");
});
Cypress.Commands.add("setLanguage", (lang) => {
globalThis.setLocale(lang);
Cypress.log({
name: "setLanguage",
message: lang,
});
cy.intercept({
method: "GET",
url: "/inventory/managedObjects?fragmentType=language*",
}, (req) => {
req.continue((res) => {
const languageFragment = req.query.fragmentType.toString();
if (res.body[languageFragment]) {
res.body[languageFragment] = lang;
}
else if (res.body.managedObjects &&
_.isArrayLike(res.body.managedObjects)) {
res.body.managedObjects.forEach((mo) => {
if (mo[languageFragment]) {
mo[languageFragment] = lang;
}
});
}
res.send();
});
});
window.localStorage.setItem("c8y_language", lang);
Cypress.on("window:before:load", (window) => {
window.localStorage.setItem("c8y_language", lang);
});
});
Cypress.Commands.add("disableGainsight", () => {
Cypress.log({
name: "disableGainsight",
});
cy.intercept("/tenant/system/options/gainsight/api.key*", (req) => {
req.reply({ statusCode: 404, body: {} });
throw new Error("Intercepted Gainsight API key call, but Gainsight should have been disabled. Failing...");
}).as("GainsightAPIKey");
cy.intercept("/tenant/currentTenant*", (req) => {
req.continue((res) => {
const customProperties = res.body.customProperties || {};
customProperties.gainsightEnabled = false;
res.body.customProperties = customProperties;
res.send();
});
});
});
export {};