@absolute/change-tracker-node-sdk
Version:
ChangeTracker SDK for Node.js
130 lines (102 loc) • 4.01 kB
JavaScript
const modelTracker = require('../src/modelTracker');
const changeCalculator = require('../src/core/changeCalculator');
const {Row, RowStatus} = require('../src/models');
function getMockModel() {
return {
id: "PRIMA",
descrizione: "Descrizione Prima",
data: new Date(),
prezzo: 126.72,
flagBit: true,
testo: "testo",
utente: {descrizione: "Utente associato"},
anagrafica: {descrizione: "Anagrafica associata"},
righe: [
{
idProdotto: "P0",
prodotto: "prodotto0",
qta: 1,
importo: 10.00,
},
{
idProdotto: "P1",
prodotto: "prodotto1",
qta: 10,
importo: 100.34,
},
{
idProdotto: "P2",
prodotto: "prodotto2",
qta: 10,
importo: 100.34,
}]
}
}
test('test diff base', () => {
const model = getMockModel();
const prevMap = modelTracker.mapAll(model).toRow('PRIMA');
model.descrizione += " modified";
model.data.setHours(model.data.getHours()-1);
model.prezzo = 200.05;
model.flagBit = false;
const nextMap = modelTracker.mapAll(model).toRow('PRIMA');
const diff = changeCalculator.diff(prevMap, nextMap);
expect(diff).toBeInstanceOf(Row)
expect(diff.state).toBe(RowStatus.Modified);
expect(diff.key).toBe('PRIMA');
expect(diff.fields).toHaveLength(4);
expect(diff.tables).toHaveLength(0);
})
test('test diff associazioni', () => {
const model = getMockModel();
const prevMap = modelTracker.createMap(model).toRow('PRIMA', [
modelTracker.toTable('righe', model.righe.map(el => modelTracker.mapAll(el).toRow(el.idProdotto)))]
);
model.righe[0].importo = 20.0;
model.righe.splice(1, 1);
model.righe.push({
idProdotto: 'P3',
prodotto: 'prodotto3',
qta: 6,
importo: 65.32,
})
const nextMap = modelTracker.createMap(model).toRow('PRIMA', [
modelTracker.toTable('righe', model.righe.map(el => modelTracker.mapAll(el).toRow(el.idProdotto)))]
);
const diff = changeCalculator.diff(prevMap, nextMap);
expect(diff).toBeInstanceOf(Row)
expect(diff.key).toBe('PRIMA');
expect(diff.fields).toHaveLength(0);
expect(diff.tables).toBeInstanceOf(Array)
expect(diff.tables).toHaveLength(1)
const table = diff.tables[0];
expect(table.name).toBe('righe')
expect(table.rows).toBeInstanceOf(Array)
expect(table.rows).toHaveLength(3) //3 rows modified: 1 updated, 1 added, 1 deleted
expect(table.rows.find(el => el.key === 'P0' && el.state === RowStatus.Modified)).toBeTruthy();
expect(table.rows.find(el => el.key === 'P1' && el.state === RowStatus.Deleted)).toBeTruthy();
expect(table.rows.find(el => el.key === 'P3' && el.state === RowStatus.New)).toBeTruthy();
})
test('test diff new', ()=>{
const model = getMockModel();
const nextMap = modelTracker.mapAll(model).toRow('PRIMA');
const diff = changeCalculator.diff(null, nextMap);
expect(diff).toBeInstanceOf(Row)
expect(diff.state).toBe(RowStatus.New)
})
test('test diff delete', ()=>{
const model = getMockModel();
const prevMap = modelTracker.mapAll(model).toRow('PRIMA');
const diff = changeCalculator.diff(prevMap);
expect(diff).toBeInstanceOf(Row)
expect(diff.state).toBe(RowStatus.Deleted)
})
test('test diff unchanged', ()=>{
const model = getMockModel();
const prevMap = modelTracker.mapAll(model).toRow('PRIMA');
//no model change
const nextMap = modelTracker.mapAll(model).toRow('PRIMA');
const diff = changeCalculator.diff(prevMap, nextMap);
expect(diff).toBeInstanceOf(Row)
expect(diff.state).toBe(RowStatus.Unchanged)
})