UNPKG

@absolute/change-tracker-node-sdk

Version:

ChangeTracker SDK for Node.js

130 lines (102 loc) 4.01 kB
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) })