mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
tx state history - fix bug where initial snapshot was mutated on updateTx
This commit is contained in:
parent
1769f880db
commit
d29b5f10ef
@ -24,7 +24,8 @@ function generateHistoryEntry(previousState, newState) {
|
|||||||
return jsonDiffer.compare(previousState, newState)
|
return jsonDiffer.compare(previousState, newState)
|
||||||
}
|
}
|
||||||
|
|
||||||
function replayHistory(shortHistory) {
|
function replayHistory(_shortHistory) {
|
||||||
|
const shortHistory = clone(_shortHistory)
|
||||||
return shortHistory.reduce((val, entry) => jsonDiffer.applyPatch(val, entry).newDocument)
|
return shortHistory.reduce((val, entry) => jsonDiffer.applyPatch(val, entry).newDocument)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ module.exports = class TransactionStateManger extends EventEmitter {
|
|||||||
const previousState = txStateHistoryHelper.replayHistory(txMeta.history)
|
const previousState = txStateHistoryHelper.replayHistory(txMeta.history)
|
||||||
// generate history entry and add to history
|
// generate history entry and add to history
|
||||||
const entry = txStateHistoryHelper.generateHistoryEntry(previousState, currentState)
|
const entry = txStateHistoryHelper.generateHistoryEntry(previousState, currentState)
|
||||||
txMeta.history.push(entry)
|
txMeta.history.push(entry)
|
||||||
|
|
||||||
// commit txMeta to state
|
// commit txMeta to state
|
||||||
const txId = txMeta.id
|
const txId = txMeta.id
|
||||||
|
@ -20,4 +20,26 @@ describe('tx-state-history-helper', function () {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
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')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user