cumulocity-cypress
Version:
Cypress commands for Cumulocity IoT
79 lines (78 loc) • 2.65 kB
JavaScript
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) => {
// in case of e.g. a 404 on the public options, do not try to modify the body
if (res.statusCode == 200 && typeof res.body === "object") {
res.body.cookieBanner = undefined;
}
res.send();
});
});
});
export {};