ns-suitescript-mocks
Version:
Collection of mocks that can be used to improve unit-tests for SuiteScript 2.0.
73 lines (62 loc) • 2.01 kB
JavaScript
const { join } = require('path');
// External libs
const lodash = require('lodash');
const moment = require('moment');
const fs = require('fs');
// Utils
const rawRecord = require('../Utils/record');
const logModule = require('../N/log');
const Request = require('../Utils/request');
const external = {};
let extendedModules = {};
global.mapModules = {
// external
lodash,
moment,
// Utils
rawRecord,
logModule,
Request,
};
/**
* Check if provided name is matching Netsuite module name
* @param {*} moduleName
*/
const getNetSuiteModule = (moduleName) => {
const path = join(__dirname, `../${moduleName}.js`);
// eslint-disable-next-line global-require, import/no-dynamic-require
return fs.existsSync(path) ? require(path) : '';
};
/**
* Define function
*
* @param {Array} name
* @param {function} defaultValues
*/
const defineFunction = (params, callback) => {
// Convert the dependencies to modules. Add module mapping below for new modules.
Object.keys(extendedModules).forEach((key) => {
const element = extendedModules[key];
external[key] = element;
global.mapModules[key] = external[key];
});
const defineParams = params.map((depName) => {
const excludedLibrary = ['moment', 'formLibrary', 'lodash', 'xml2json', 'freightClass'].includes(depName);
const moduleType = typeof global.mapModules[depName];
let amdModule = getNetSuiteModule(depName);
if (!amdModule) {
if (moduleType === 'string') {
// eslint-disable-next-line global-require, import/no-dynamic-require
amdModule = require(join(__dirname, '../../..', global.mapModules[depName]));
} else {
amdModule = (moduleType === 'function' && !excludedLibrary) ? global.mapModules[depName]() : global.mapModules[depName];
}
}
return amdModule;
});
return callback ? callback(...defineParams) : {};
};
module.exports = (config) => {
extendedModules = config;
return { define: defineFunction, nsMockups: global.mapModules };
};