const assert = require('assert') const migration23 = require('../../../app/scripts/migrations/023') const storage = { 'meta': {}, 'data': { 'TransactionController': { 'transactions': [ ], }, }, } const transactions = [] const transactions40 = [] const transactions20 = [] const txStates = [ 'unapproved', 'approved', 'signed', 'submitted', 'confirmed', 'rejected', 'failed', 'dropped', ] const deletableTxStates = [ 'confirmed', 'rejected', 'failed', 'dropped', ] let nonDeletableCount = 0 let status while (transactions.length <= 100) { status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))] if (!deletableTxStates.find((s) => s === status)) { nonDeletableCount++ } transactions.push({status}) } while (transactions40.length < 40) { status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))] transactions40.push({status}) } while (transactions20.length < 20) { status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))] transactions20.push({status}) } storage.data.TransactionController.transactions = transactions describe('storage is migrated successfully and the proper transactions are remove from state', () => { it('should remove transactions that are unneeded', (done) => { migration23.migrate(storage) .then((migratedData) => { let leftoverNonDeletableTxCount = 0 const migratedTransactions = migratedData.data.TransactionController.transactions migratedTransactions.forEach((tx) => { if (!deletableTxStates.find((s) => s === tx.status)) { leftoverNonDeletableTxCount++ } }) assert.equal(leftoverNonDeletableTxCount, nonDeletableCount, 'migration shouldnt delete transactions we want to keep') assert((migratedTransactions.length >= 40), `should be equal or greater to 40 if they are non deletable states got ${migratedTransactions.length} transactions`) done() }).catch(done) }) it('should not remove any transactions because 40 is the expectable limit', (done) => { storage.meta.version = 22 storage.data.TransactionController.transactions = transactions40 migration23.migrate(storage) .then((migratedData) => { const migratedTransactions = migratedData.data.TransactionController.transactions assert.equal(migratedTransactions.length, 40, 'migration shouldnt delete when at limit') done() }).catch(done) }) it('should not remove any transactions because 20 txs is under the expectable limit', (done) => { storage.meta.version = 22 storage.data.TransactionController.transactions = transactions20 migration23.migrate(storage) .then((migratedData) => { const migratedTransactions = migratedData.data.TransactionController.transactions assert.equal(migratedTransactions.length, 20, 'migration shouldnt delete when under limit') done() }).catch(done) }) })