mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-27 19:53:36 +00:00
related to #2649 I was able to move to internal fetch and all tests seems fine so far. But we have one problem with the calendar module. In the docs we have several authentication methods and one of them is `digest`. For this we used `digest-fetch` which needs `node-fetch` (this is not so clear from code but I was not able to get it working). So we have 3 options: - remove `digest` as authentication method for calendar module (this is what this PR does at the moment) - find an alternative npm package or implement the digest stuff ourselves - use `digest-fetch` and `node-fetch` for calendar module (so they would remain as dependencies in `package.json`) Opinions? @KristjanESPERANTO @rejas @sdetweil @MichMich
87 lines
2.1 KiB
JavaScript
87 lines
2.1 KiB
JavaScript
const jsdom = require("jsdom");
|
|
|
|
exports.startApplication = async (configFilename, exec) => {
|
|
jest.resetModules();
|
|
if (global.app) {
|
|
await this.stopApplication();
|
|
}
|
|
// Set config sample for use in test
|
|
if (configFilename === "") {
|
|
process.env.MM_CONFIG_FILE = "config/config.js";
|
|
} else {
|
|
process.env.MM_CONFIG_FILE = configFilename;
|
|
}
|
|
if (exec) exec;
|
|
global.app = require("../../../js/app");
|
|
|
|
return global.app.start();
|
|
};
|
|
|
|
exports.stopApplication = async () => {
|
|
if (!global.app) {
|
|
return Promise.resolve();
|
|
}
|
|
await global.app.stop();
|
|
delete global.app;
|
|
};
|
|
|
|
exports.getDocument = () => {
|
|
return new Promise((resolve) => {
|
|
const url = `http://${config.address || "localhost"}:${config.port || "8080"}`;
|
|
jsdom.JSDOM.fromURL(url, { resources: "usable", runScripts: "dangerously" }).then((dom) => {
|
|
dom.window.name = "jsdom";
|
|
dom.window.fetch = fetch;
|
|
dom.window.onload = () => {
|
|
global.document = dom.window.document;
|
|
resolve();
|
|
};
|
|
});
|
|
});
|
|
};
|
|
|
|
exports.waitForElement = (selector, ignoreValue = "") => {
|
|
return new Promise((resolve) => {
|
|
let oldVal = "dummy12345";
|
|
const interval = setInterval(() => {
|
|
const element = document.querySelector(selector);
|
|
if (element) {
|
|
let newVal = element.textContent;
|
|
if (newVal === oldVal) {
|
|
clearInterval(interval);
|
|
resolve(element);
|
|
} else {
|
|
if (ignoreValue === "") {
|
|
oldVal = newVal;
|
|
} else {
|
|
if (!newVal.includes(ignoreValue)) oldVal = newVal;
|
|
}
|
|
}
|
|
}
|
|
}, 100);
|
|
});
|
|
};
|
|
|
|
exports.waitForAllElements = (selector) => {
|
|
return new Promise((resolve) => {
|
|
let oldVal = 999999;
|
|
const interval = setInterval(() => {
|
|
const element = document.querySelectorAll(selector);
|
|
if (element) {
|
|
let newVal = element.length;
|
|
if (newVal === oldVal) {
|
|
clearInterval(interval);
|
|
resolve(element);
|
|
} else {
|
|
if (newVal !== 0) oldVal = newVal;
|
|
}
|
|
}
|
|
}, 100);
|
|
});
|
|
};
|
|
|
|
exports.testMatch = async (element, regex) => {
|
|
const elem = await this.waitForElement(element);
|
|
expect(elem).not.toBe(null);
|
|
expect(elem.textContent).toMatch(regex);
|
|
};
|