108 lines
3.3 KiB
JavaScript
108 lines
3.3 KiB
JavaScript
const { faker } = require("@faker-js/faker");
|
|
const { readYamlFile } = require("./../plugins/readYamlFile.js");
|
|
const fs = require("fs");
|
|
|
|
const generateMockData = (type, properties) => {
|
|
switch (type) {
|
|
case "string":
|
|
if (properties?.maxLength) {
|
|
return faker.string.alpha({
|
|
length: {
|
|
min: properties.minLength || 1,
|
|
max: properties.maxLength,
|
|
},
|
|
});
|
|
}
|
|
return faker.lorem.words(3);
|
|
case "integer":
|
|
return faker.number.int();
|
|
case "boolean":
|
|
return faker.datatype.boolean();
|
|
case "array":
|
|
return [faker.lorem.word(), faker.lorem.word()];
|
|
case "number":
|
|
return faker.number.float();
|
|
case "date":
|
|
return new Date().toISOString().split("T")[0];
|
|
case "date-time":
|
|
return new Date().toISOString();
|
|
default:
|
|
return faker.lorem.word();
|
|
}
|
|
};
|
|
|
|
const generateDataFromSchema = (properties, values = {}) => {
|
|
const mockData = {};
|
|
const ids = {};
|
|
Object.entries(properties).forEach(([key, value]) => {
|
|
if (values.hasOwnProperty(key)) {
|
|
mockData[key] = values[key];
|
|
} else {
|
|
let data;
|
|
let type = value.type;
|
|
if (Array.isArray(type)) {
|
|
type = type.filter(t => t != '"null"')[0];
|
|
}
|
|
|
|
type =
|
|
value?.format == "date" || value?.format == "date-time"
|
|
? value.format
|
|
: type;
|
|
let fk_name;
|
|
if (type == "object") {
|
|
switch (key) {
|
|
case "home_library":
|
|
case "holding_library":
|
|
data = buildSampleObject({ object: "library" });
|
|
fk_name = "library_id";
|
|
break;
|
|
case "item_type":
|
|
data = buildSampleObject({ object: "item_type" });
|
|
fk_name = "item_type_id";
|
|
break;
|
|
default:
|
|
data = generateMockData(type, value);
|
|
}
|
|
if (typeof data === "object") {
|
|
ids[key] = data[fk_name];
|
|
}
|
|
} else {
|
|
data = generateMockData(type, value);
|
|
}
|
|
mockData[key] = data;
|
|
}
|
|
});
|
|
|
|
Object.keys(ids).forEach(k => {
|
|
if (mockData.hasOwnProperty(k + "_id")) {
|
|
mockData[k + "_id"] = ids[k];
|
|
}
|
|
});
|
|
|
|
return mockData;
|
|
};
|
|
|
|
const buildSampleObjects = ({ object, values, count = 1 }) => {
|
|
const yamlPath = `api/v1/swagger/definitions/${object}.yaml`;
|
|
if (!fs.existsSync(yamlPath)) {
|
|
throw new Error(
|
|
`Object type not supported: '${object}'. No spec file.`
|
|
);
|
|
}
|
|
const schema = readYamlFile(yamlPath);
|
|
return Array.from({ length: count }, () =>
|
|
generateDataFromSchema(schema.properties, values)
|
|
);
|
|
};
|
|
|
|
const buildSampleObject = ({ object, values = {} }) => {
|
|
return buildSampleObjects({ object, values })[0];
|
|
};
|
|
|
|
module.exports = {
|
|
generateMockData,
|
|
generateDataFromSchema,
|
|
buildSampleObject,
|
|
buildSampleObjects,
|
|
};
|