const assert = require('assert') const txStateHistoryHelper = require('../../app/scripts/controllers/transactions/lib/tx-state-history-helper') const testVault = require('../data/v17-long-history.json') describe('tx-state-history-helper', function () { it('migrates history to diffs and can recover original values', function () { testVault.data.TransactionController.transactions.forEach((tx, index) => { const newHistory = txStateHistoryHelper.migrateFromSnapshotsToDiffs(tx.history) newHistory.forEach((newEntry, index) => { if (index === 0) { assert.equal(Array.isArray(newEntry), false, 'initial history item IS NOT a json patch obj') } else { assert.equal(Array.isArray(newEntry), true, 'non-initial history entry IS a json patch obj') } const oldEntry = tx.history[index] const historySubset = newHistory.slice(0, index + 1) const reconstructedValue = txStateHistoryHelper.replayHistory(historySubset) assert.deepEqual(oldEntry, reconstructedValue, 'was able to reconstruct old entry from diffs') }) }) }) it('replaying history does not mutate the original obj', function () { const initialState = { test: true, message: 'hello', value: 1 } const diff1 = [{ "op": "replace", "path": "/message", "value": "haay", }] const diff2 = [{ "op": "replace", "path": "/value", "value": 2, }] const history = [initialState, diff1, diff2] const beforeStateSnapshot = JSON.stringify(initialState) const latestState = txStateHistoryHelper.replayHistory(history) const afterStateSnapshot = JSON.stringify(initialState) assert.notEqual(initialState, latestState, 'initial state is not the same obj as the latest state') assert.equal(beforeStateSnapshot, afterStateSnapshot, 'initial state is not modified during run') }) })