mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-09-13 23:55:11 +00:00
Refactor mock-data for weather-tests generation (#3000)
Refactored the mock data generation for the tests so we can use plain JSON files for the data and read it in a more general way. Comments welcome! Co-authored-by: veeck <michael@veeck.de>
This commit is contained in:
26
tests/utils/test_sequencer.js
Normal file
26
tests/utils/test_sequencer.js
Normal file
@@ -0,0 +1,26 @@
|
||||
const TestSequencer = require("@jest/test-sequencer").default;
|
||||
|
||||
class CustomSequencer extends TestSequencer {
|
||||
sort(tests) {
|
||||
const orderPath = ["unit", "e2e", "electron"];
|
||||
return tests.sort((testA, testB) => {
|
||||
let indexA = -1;
|
||||
let indexB = -1;
|
||||
const reg = ".*/tests/([^/]*).*";
|
||||
|
||||
let matchA = new RegExp(reg, "g").exec(testA.path);
|
||||
if (matchA.length > 0) indexA = orderPath.indexOf(matchA[1]);
|
||||
|
||||
let matchB = new RegExp(reg, "g").exec(testB.path);
|
||||
if (matchB.length > 0) indexB = orderPath.indexOf(matchB[1]);
|
||||
|
||||
if (indexA === indexB) return 0;
|
||||
|
||||
if (indexA === -1) return 1;
|
||||
if (indexB === -1) return -1;
|
||||
return indexA < indexB ? -1 : 1;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CustomSequencer;
|
43
tests/utils/weather_mocker.js
Normal file
43
tests/utils/weather_mocker.js
Normal file
@@ -0,0 +1,43 @@
|
||||
const _ = require("lodash");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
/**
|
||||
* @param {string} type what data to read, can be "current" "forecast" or "hourly
|
||||
* @param {object} extendedData extra data to add to the default mock data
|
||||
* @returns {string} mocked current weather data
|
||||
*/
|
||||
const readMockData = (type, extendedData = {}) => {
|
||||
let fileName;
|
||||
|
||||
switch (type) {
|
||||
case "forecast":
|
||||
fileName = "weather_forecast.json";
|
||||
break;
|
||||
case "hourly":
|
||||
fileName = "weather_hourly.json";
|
||||
break;
|
||||
case "current":
|
||||
default:
|
||||
fileName = "weather_current.json";
|
||||
break;
|
||||
}
|
||||
|
||||
return JSON.stringify(_.merge({}, JSON.parse(fs.readFileSync(path.resolve(__dirname + "/../mocks/" + fileName)).toString()), extendedData));
|
||||
};
|
||||
|
||||
const injectMockData = (configFileName, extendedData = {}) => {
|
||||
let mockWeather;
|
||||
if (configFileName.includes("forecast")) {
|
||||
mockWeather = readMockData("forecast", extendedData);
|
||||
} else if (configFileName.includes("hourly")) {
|
||||
mockWeather = readMockData("hourly", extendedData);
|
||||
} else {
|
||||
mockWeather = readMockData("current", extendedData);
|
||||
}
|
||||
let content = fs.readFileSync(path.resolve(__dirname + "../../../" + configFileName)).toString();
|
||||
content = content.replace("#####WEATHERDATA#####", mockWeather);
|
||||
fs.writeFileSync(path.resolve(__dirname + "../../../config/config.js"), content);
|
||||
};
|
||||
|
||||
module.exports = { injectMockData };
|
Reference in New Issue
Block a user