1
0
mirror of https://github.com/matt-fidd/stratos.git synced 2026-01-01 18:19:25 +00:00
Files
stratos/utility/db/insertTestData.js

95 lines
2.0 KiB
JavaScript

/* eslint-disable no-await-in-loop */
'use strict';
// Import required modules
const crypto = require('crypto');
const bcrypt = require('bcrypt');
const path = require('path');
// Import user defined modules
const DatabaseConnectionPool =
require(path.join(__dirname, '../../lib/DatabaseConnectionPool'));
// Import test data object
const { data, details } = require('./testData');
/**
* insertData() Inserts test data into a database
*
* @return {void}
*/
async function insertTestData(customEmailDomain = false) {
const conn = await new DatabaseConnectionPool();
// Run the creation statment for each table
for (const table of Object.keys(data)) {
let counter = 0;
for (const record of data[table]) {
const dataToInsert = { ...record };
if (details?.[table]?.id === 'uuid') {
dataToInsert[`${table}Id`] =
crypto.randomUUID();
} else {
dataToInsert[`${table}Id`] = counter + 1;
}
if (details?.[table]?.hashPassword) {
dataToInsert.password =
await bcrypt.hash(
dataToInsert.password,
10);
}
if (details?.[table]?.link)
delete dataToInsert[`${table}Id`];
if (record?.lookups) {
delete dataToInsert.lookups;
const lookupsEntries =
Object.entries(record.lookups);
for (const [ key, index ] of lookupsEntries) {
const resolveTable = key.split('Id')[0];
const r = data[resolveTable][index - 1];
dataToInsert[key] = r[key];
}
}
data[table][counter] = dataToInsert;
const qs = '?, '.repeat(Object.keys(
dataToInsert).length).slice(0, -2);
const sql = `
insert into ${table} ` +
`(${Object.keys(dataToInsert)})` +
' values ' +
`(${qs});`;
console.log(sql.trim());
if (customEmailDomain && dataToInsert.email) {
const split = dataToInsert.email.split('@');
split[1] = customEmailDomain;
dataToInsert.email = split.join('@');
}
try {
await conn.runQuery(sql,
Object.values(dataToInsert));
} catch (e) {
console.error(e);
}
counter++;
}
}
conn.close();
}
module.exports = insertTestData;