x2node-dbos
Version:
SQL database operations.
192 lines (177 loc) • 5.07 kB
JavaScript
;
const expect = require('chai').expect;
const records = require('x2node-records');
const rsparser = require('x2node-rsparser');
const dbos = require('../index.js');
const VALID_RTL_DEFS = {
'Record1': {
properties: {
'id': {
valueType: 'number',
role: 'id'
},
'version': {
valueType: 'number',
role: 'version'
},
'createdOn': {
valueType: 'datetime',
role: 'creationTimestamp'
},
'createdBy': {
valueType: 'string',
role: 'creationActor'
},
'modifiedOn': {
valueType: 'datetime',
role: 'modificationTimestamp'
},
'modifiedBy': {
valueType: 'string',
role: 'modificationActor'
},
'prop_ssspn': {
valueType: 'string'
},
'prop_ssspc': {
valueType: 'string',
column: 'prop_value'
},
'prop_ssstn': {
valueType: 'string',
table: 'prop_values',
parentIdColumn: 'parent_id'
},
'prop_ssstc': {
valueType: 'string',
table: 'prop_values',
parentIdColumn: 'parent_id',
column: 'prop_value'
},
'prop_srspn': {
valueType: 'ref(Record2)'
},
'prop_srspc': {
valueType: 'ref(Record2)',
column: 'prop_value'
},
'prop_srstn': {
valueType: 'ref(Record2)',
table: 'prop_values',
parentIdColumn: 'parent_id'
},
'prop_srstc': {
valueType: 'ref(Record2)',
table: 'prop_values',
parentIdColumn: 'parent_id',
column: 'prop_value'
},
'prop_sop': {
valueType: 'object',
properties: {}
},
'prop_sot': {
valueType: 'object',
table: 'prop_objects',
parentIdColumn: 'parent_id',
properties: {}
},
}
},
'Record2': {
table: 'record2s',
properties: {
'id': {
valueType: 'number',
role: 'id',
generator: null
},
}
}
};
function testPropDesc(recordTypeDesc, propName, params) {
const propDesc = recordTypeDesc.getPropertyDesc(propName);
Object.keys(params).forEach(p => {
let v;
if ((typeof propDesc[p]) === 'function') {
v = propDesc[p]();
} else {
v = propDesc[p];
}
expect(v, recordTypeDesc.name + '#' + propName + ': desc prop ' + p)
.to.be.equal(params[p]);
});
}
describe('x2node-dbos', function() {
describe('Record Types Library Extension', function() {
it('should process valid record types library', function() {
const recordTypes = records.with(rsparser, dbos).buildLibrary(
VALID_RTL_DEFS);
expect(recordTypes).to.be.ok;
const recordTypeDesc = recordTypes.getRecordTypeDesc('Record1');
expect(recordTypeDesc.table).to.be.equal('Record1');
expect(recordTypeDesc.getRecordMetaInfoPropName('version')).to.be.equal('version');
expect(recordTypeDesc.getRecordMetaInfoPropName('creationTimestamp')).to.be.equal('createdOn');
expect(recordTypeDesc.getRecordMetaInfoPropName('creationActor')).to.be.equal('createdBy');
expect(recordTypeDesc.getRecordMetaInfoPropName('modificationTimestamp')).to.be.equal('modifiedOn');
expect(recordTypeDesc.getRecordMetaInfoPropName('modificationActor')).to.be.equal('modifiedBy');
const params = {
implicitDependentRef: false,
fetchByDefault: true,
column: 'id',
table: undefined,
parentIdColumn: undefined,
isRecordMetaInfo: false,
recordMetaInfoRole: undefined,
modifiable: false,
isGenerated: true,
generator: 'auto',
keyColumn: undefined,
reverseRefPropertyName: undefined,
isWeakDependency: undefined,
valueExpr: undefined,
isCalculated: false,
aggregateFunc: undefined,
isAggregate: false,
aggregatedPropPath: undefined,
isFiltered: false,
filter: undefined,
presenceTest: undefined,
isOrdered: false,
order: undefined
};
testPropDesc(recordTypeDesc, 'id', params);
params.column = 'version';
params.isRecordMetaInfo = true;
params.recordMetaInfoRole = 'version';
params.isGenerated = false;
params.generator = undefined;
testPropDesc(recordTypeDesc, 'version', params);
params.column = 'createdOn';
params.recordMetaInfoRole = 'creationTimestamp';
testPropDesc(recordTypeDesc, 'createdOn', params);
params.column = 'createdBy';
params.recordMetaInfoRole = 'creationActor';
testPropDesc(recordTypeDesc, 'createdBy', params);
params.column = 'modifiedOn';
params.recordMetaInfoRole = 'modificationTimestamp';
testPropDesc(recordTypeDesc, 'modifiedOn', params);
params.column = 'modifiedBy';
params.recordMetaInfoRole = 'modificationActor';
testPropDesc(recordTypeDesc, 'modifiedBy', params);
params.column = 'prop_ssspn';
params.isRecordMetaInfo = false;
params.recordMetaInfoRole = undefined;
params.modifiable = true;
testPropDesc(recordTypeDesc, 'prop_ssspn', params);
params.column = 'prop_value';
testPropDesc(recordTypeDesc, 'prop_ssspc', params);
params.table = 'prop_values';
params.parentIdColumn = 'parent_id';
params.column = 'prop_ssstn';
testPropDesc(recordTypeDesc, 'prop_ssstn', params);
params.column = 'prop_value';
testPropDesc(recordTypeDesc, 'prop_ssstc', params);
});
});
});