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:
Veeck
2023-01-11 21:47:20 +01:00
committed by GitHub
parent 6e80e5a295
commit 877f8ad380
12 changed files with 1475 additions and 1392 deletions

View File

@@ -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();
};

View File

@@ -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);
};

View 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
}

View 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
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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 };