mirror of
https://github.com/matt-fidd/stratos.git
synced 2026-01-01 22:59:28 +00:00
95 lines
2.0 KiB
JavaScript
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;
|