mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-08-28 17:08:09 +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:
@@ -1,7 +1,5 @@
|
||||
const helpers = require("./global-setup");
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const { generateWeather, generateWeatherForecast, generateWeatherHourly } = require("../../mocks/weather_test");
|
||||
const { injectMockData } = require("../../utils/weather_mocker");
|
||||
|
||||
exports.getText = async (element, result) => {
|
||||
const elem = await helpers.waitForElement(element);
|
||||
@@ -14,18 +12,8 @@ exports.getText = async (element, result) => {
|
||||
).toBe(result);
|
||||
};
|
||||
|
||||
exports.startApp = async (configFile, additionalMockData) => {
|
||||
let mockWeather;
|
||||
if (configFile.includes("forecast")) {
|
||||
mockWeather = generateWeatherForecast(additionalMockData);
|
||||
} else if (configFile.includes("hourly")) {
|
||||
mockWeather = generateWeatherHourly(additionalMockData);
|
||||
} else {
|
||||
mockWeather = generateWeather(additionalMockData);
|
||||
}
|
||||
let content = fs.readFileSync(path.resolve(__dirname + "../../../../" + configFile)).toString();
|
||||
content = content.replace("#####WEATHERDATA#####", mockWeather);
|
||||
fs.writeFileSync(path.resolve(__dirname + "../../../../config/config.js"), content);
|
||||
exports.startApp = async (configFileName, additionalMockData) => {
|
||||
injectMockData(configFileName, additionalMockData);
|
||||
await helpers.startApplication("");
|
||||
await helpers.getDocument();
|
||||
};
|
||||
|
@@ -1,7 +1,5 @@
|
||||
const helpers = require("./global-setup");
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const { generateWeather, generateWeatherForecast, generateWeatherHourly } = require("../../mocks/weather_test");
|
||||
const { injectMockData } = require("../../utils/weather_mocker");
|
||||
|
||||
exports.getText = async (element, result) => {
|
||||
const elem = await helpers.getElement(element);
|
||||
@@ -15,17 +13,7 @@ exports.getText = async (element, result) => {
|
||||
).toBe(result);
|
||||
};
|
||||
|
||||
exports.startApp = async (configFile, systemDate) => {
|
||||
let mockWeather;
|
||||
if (configFile.includes("forecast")) {
|
||||
mockWeather = generateWeatherForecast();
|
||||
} else if (configFile.includes("hourly")) {
|
||||
mockWeather = generateWeatherHourly();
|
||||
} else {
|
||||
mockWeather = generateWeather();
|
||||
}
|
||||
let content = fs.readFileSync(path.resolve(__dirname + "../../../../" + configFile)).toString();
|
||||
content = content.replace("#####WEATHERDATA#####", mockWeather);
|
||||
fs.writeFileSync(path.resolve(__dirname + "../../../../config/config.js"), content);
|
||||
exports.startApp = async (configFileNameName, systemDate) => {
|
||||
injectMockData(configFileNameName);
|
||||
await helpers.startApplication("", systemDate);
|
||||
};
|
||||
|
48
tests/mocks/weather_current.json
Normal file
48
tests/mocks/weather_current.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"coord": {
|
||||
"lon": 11.58,
|
||||
"lat": 48.14
|
||||
},
|
||||
"weather": [
|
||||
{
|
||||
"id": 615,
|
||||
"main": "Snow",
|
||||
"description": "light rain and snow",
|
||||
"icon": "13d"
|
||||
},
|
||||
{
|
||||
"id": 500,
|
||||
"main": "Rain",
|
||||
"description": "light rain",
|
||||
"icon": "10d"
|
||||
}
|
||||
],
|
||||
"base": "stations",
|
||||
"main": {
|
||||
"temp": 1.49,
|
||||
"pressure": 1005,
|
||||
"humidity": 93.7,
|
||||
"temp_min": 1,
|
||||
"temp_max": 2
|
||||
},
|
||||
"visibility": 7000,
|
||||
"wind": {
|
||||
"speed": 11.8,
|
||||
"deg": 250
|
||||
},
|
||||
"clouds": {
|
||||
"all": 75
|
||||
},
|
||||
"dt": 1547387400,
|
||||
"sys": {
|
||||
"type": 1,
|
||||
"id": 1267,
|
||||
"message": 0.0031,
|
||||
"country": "DE",
|
||||
"sunrise": 1547362817,
|
||||
"sunset": 1547394301
|
||||
},
|
||||
"id": 2867714,
|
||||
"name": "Munich",
|
||||
"cod": 200
|
||||
}
|
200
tests/mocks/weather_forecast.json
Normal file
200
tests/mocks/weather_forecast.json
Normal file
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"city": {
|
||||
"id": 2867714,
|
||||
"name": "Munich",
|
||||
"coord": {
|
||||
"lon": 11.5754,
|
||||
"lat": 48.1371
|
||||
},
|
||||
"country": "DE",
|
||||
"population": 1260391,
|
||||
"timezone": 7200
|
||||
},
|
||||
"cod": "200",
|
||||
"message": 0.9653487,
|
||||
"cnt": 7,
|
||||
"list": [
|
||||
{
|
||||
"dt": 1568372400,
|
||||
"sunrise": 1568350044,
|
||||
"sunset": 1568395948,
|
||||
"temp": {
|
||||
"day": 24.44,
|
||||
"min": 15.35,
|
||||
"max": 24.44,
|
||||
"night": 15.35,
|
||||
"eve": 18,
|
||||
"morn": 23.03
|
||||
},
|
||||
"pressure": 1031.65,
|
||||
"humidity": 70,
|
||||
"weather": [
|
||||
{
|
||||
"id": 801,
|
||||
"main": "Clouds",
|
||||
"description": "few clouds",
|
||||
"icon": "02d"
|
||||
}
|
||||
],
|
||||
"speed": 3.35,
|
||||
"deg": 314,
|
||||
"clouds": 21
|
||||
},
|
||||
{
|
||||
"dt": 1568458800,
|
||||
"sunrise": 1568436525,
|
||||
"sunset": 1568482223,
|
||||
"temp": {
|
||||
"day": 20.81,
|
||||
"min": 13.56,
|
||||
"max": 21.02,
|
||||
"night": 13.56,
|
||||
"eve": 16.6,
|
||||
"morn": 15.88
|
||||
},
|
||||
"pressure": 1028.81,
|
||||
"humidity": 72,
|
||||
"weather": [
|
||||
{
|
||||
"id": 500,
|
||||
"main": "Rain",
|
||||
"description": "light rain",
|
||||
"icon": "10d"
|
||||
}
|
||||
],
|
||||
"speed": 2.21,
|
||||
"deg": 81,
|
||||
"clouds": 100
|
||||
},
|
||||
{
|
||||
"dt": 1568545200,
|
||||
"sunrise": 1568523007,
|
||||
"sunset": 1568568497,
|
||||
"temp": {
|
||||
"day": 22.65,
|
||||
"min": 13.76,
|
||||
"max": 22.88,
|
||||
"night": 15.27,
|
||||
"eve": 17.45,
|
||||
"morn": 13.76
|
||||
},
|
||||
"pressure": 1023.75,
|
||||
"humidity": 64,
|
||||
"weather": [
|
||||
{
|
||||
"id": 800,
|
||||
"main": "Clear",
|
||||
"description": "sky is clear",
|
||||
"icon": "01d"
|
||||
}
|
||||
],
|
||||
"speed": 1.15,
|
||||
"deg": 7,
|
||||
"clouds": 0
|
||||
},
|
||||
{
|
||||
"dt": 1568631600,
|
||||
"sunrise": 1568609489,
|
||||
"sunset": 1568654771,
|
||||
"temp": {
|
||||
"day": 23.45,
|
||||
"min": 13.95,
|
||||
"max": 23.45,
|
||||
"night": 13.95,
|
||||
"eve": 17.75,
|
||||
"morn": 15.21
|
||||
},
|
||||
"pressure": 1020.41,
|
||||
"humidity": 64,
|
||||
"weather": [
|
||||
{
|
||||
"id": 800,
|
||||
"main": "Clear",
|
||||
"description": "sky is clear",
|
||||
"icon": "01d"
|
||||
}
|
||||
],
|
||||
"speed": 3.07,
|
||||
"deg": 298,
|
||||
"clouds": 7
|
||||
},
|
||||
{
|
||||
"dt": 1568718000,
|
||||
"sunrise": 1568695970,
|
||||
"sunset": 1568741045,
|
||||
"temp": {
|
||||
"day": 20.55,
|
||||
"min": 10.95,
|
||||
"max": 20.55,
|
||||
"night": 10.95,
|
||||
"eve": 14.82,
|
||||
"morn": 13.24
|
||||
},
|
||||
"pressure": 1019.4,
|
||||
"humidity": 66,
|
||||
"weather": [
|
||||
{
|
||||
"id": 800,
|
||||
"main": "Clear",
|
||||
"description": "sky is clear",
|
||||
"icon": "01d"
|
||||
}
|
||||
],
|
||||
"speed": 2.8,
|
||||
"deg": 333,
|
||||
"clouds": 2
|
||||
},
|
||||
{
|
||||
"dt": 1568804400,
|
||||
"sunrise": 1568782452,
|
||||
"sunset": 1568827319,
|
||||
"temp": {
|
||||
"day": 18.15,
|
||||
"min": 7.75,
|
||||
"max": 18.15,
|
||||
"night": 7.75,
|
||||
"eve": 12.45,
|
||||
"morn": 9.41
|
||||
},
|
||||
"pressure": 1017.56,
|
||||
"humidity": 52,
|
||||
"weather": [
|
||||
{
|
||||
"id": 800,
|
||||
"main": "Clear",
|
||||
"description": "sky is clear",
|
||||
"icon": "01d"
|
||||
}
|
||||
],
|
||||
"speed": 2.92,
|
||||
"deg": 34,
|
||||
"clouds": 0
|
||||
},
|
||||
{
|
||||
"dt": 1568890800,
|
||||
"sunrise": 1568868934,
|
||||
"sunset": 1568913593,
|
||||
"temp": {
|
||||
"day": 14.85,
|
||||
"min": 5.56,
|
||||
"max": 15.05,
|
||||
"night": 5.56,
|
||||
"eve": 9.56,
|
||||
"morn": 6.25
|
||||
},
|
||||
"pressure": 1022.7,
|
||||
"humidity": 59,
|
||||
"weather": [
|
||||
{
|
||||
"id": 800,
|
||||
"main": "Clear",
|
||||
"description": "sky is clear",
|
||||
"icon": "01d"
|
||||
}
|
||||
],
|
||||
"speed": 2.89,
|
||||
"deg": 51,
|
||||
"clouds": 1
|
||||
}
|
||||
]
|
||||
}
|
1114
tests/mocks/weather_hourly.json
Normal file
1114
tests/mocks/weather_hourly.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
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