UNPKG

ns-suitescript-mocks

Version:

Collection of mocks that can be used to improve unit-tests for SuiteScript 2.0.

139 lines (132 loc) 5.36 kB
const sublistObj = require('./sublistObjectMembers.jsx'); /** * Return a Netsuite Record * * @classDescription Record object * @constructor * @param {string} name * @param {object} defaultValues * @returns {nlobjRecord} */ function NsRecord(name, defaultValues = {}) { const id = defaultValues.id || Math.ceil(Math.random() * 100); const activeLine = {}; this.values = defaultValues; this.values.item = this.values.item || []; this.values.links = this.values.links || []; this.type = 'nlobjRecord'; return { // 1.0 methods getId: () => id, getName: () => name, // 2.0 methods // eslint-disable-next-line no-unused-vars id, commit: () => {}, commitLine: obj => activeLine[obj.sublistId], commitLineItem: sublist => activeLine[sublist], createCurrentLineItemSubrecord: (sublistId, type) => nlapiCreateRecord(type, { sublistId }), getAll: () => this.values, // Helper getCurrentLineItemValue: (sublist, field) => this.values[sublist][activeLine[sublist]][field], getCurrentSublistValue: (obj) => { const sublist = obj.sublistId; return this.values[sublist][activeLine[sublist]][obj.fieldId]; }, getField: options => ({ getSelectOptions: () => [{ value: random(1, 100), text: options.fieldId }], }), getFieldText: valueName => this.values[valueName], getFieldValue: valueName => this.values[valueName], getFieldValues: valueSet => this.values[valueSet], getLineCount: options => (this.values[options.sublistId || options] ? this.values[options.sublistId || options].length : 0), getLineItemCount: sublist => this.values[sublist].length, getLineItemText: (sublist, field, index) => this.values[sublist][index - 1][`${field}_display`], getLineItemValue: (sublist, field, index) => this.values[sublist][index - 1][field], getSublistText: options => this.values[options.sublistId][options.line][options.fieldId], getSublistValue: options => this.values[options.sublistId][options.line][options.fieldId], getSublists: sublistObj, getSubrecord: options => nlapiCreateRecord(options), getText: options => this.values[options.fieldId || options], getValue: options => this.values[options.fieldId || options], viewSubrecord: options => nlapiCreateRecord(options), editSubrecord: options => nlapiCreateRecord(options), createSubrecord: options => nlapiCreateRecord(options), findLineItemValue: (sublist, field, value) => { const i = this.values[sublist].findIndex(line => line[field] === value); return i < 0 ? i : i + 1; }, findSublistLineWithValue: (options) => { let index = -1; this.values[options.sublistId].forEach((line, i) => { if (line[options.fieldId] === options.value) { index = i; } }); return index; }, insertLineItem: (sublist, index) => { this.values[sublist].splice(index - 1, 0, {}); }, insertLine: (options) => { this.values[options.sublistId].splice(options.line, 0, {}); }, removeLine: (obj) => { this.values[obj.sublistId].splice(obj.line, 1); }, removeLineItem: (sublist, index) => { this.values[sublist].splice(index - 1, 1); }, save: () => id, // Helper selectLine: (obj) => { activeLine[obj.sublistId] = obj.line; this.values[obj.sublistId][obj.line] = this.values[obj.sublistId][obj.line] || {}; }, selectLineItem: (sublist, index) => { activeLine[sublist] = index - 1; this.values[sublist][index - 1] = this.values[sublist][index - 1] || {}; }, selectNewLine: (obj) => { let sublistValues = this.values[obj.sublistId]; activeLine[obj.sublistId] = sublistValues ? sublistValues.length : 0; sublistValues = this.values[obj.sublistId] || []; sublistValues[activeLine[obj.sublistId]] = sublistValues[activeLine[obj.sublistId]] || {}; }, selectNewLineItem: (sublistId) => { this.values[sublistId] = this.values[sublistId] || {}; let sublistValues = this.values[sublistId]; activeLine[sublistId] = sublistValues ? sublistValues.length : 0; sublistValues = sublistValues || []; sublistValues[activeLine[sublistId]] = sublistValues[activeLine[sublistId]] || {}; }, setCurrentLineItemValue: (sublist, field, value) => { this.values[sublist][activeLine[sublist]][field] = value; }, setCurrentSublistText: (obj) => { this.values[obj.sublistId][activeLine[obj.sublistId]][obj.fieldId] = obj.text; }, setCurrentSublistValue: (obj) => { this.values[obj.sublistId][activeLine[obj.sublistId]][obj.fieldId] = obj.value; }, setFieldValue: (valueName, value) => { this.values[valueName] = value; }, setFieldValues: (fieldName, values) => { this.values[fieldName] = values; }, setLineItemValue: (sublist, field, index, value) => { this.values[sublist][index - 1][field] = value; }, setSublistValue: (options) => { this.values[options.sublistId][options.line][options.fieldId] = options.value; }, setValue: (newValue) => { // Helper this.values[newValue.fieldId] = newValue.value; }, setText: (newValue) => { // Helper this.values[newValue.fieldId] = newValue.text; }, }; } module.exports = NsRecord;