1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-23 03:36:18 +02:00
metamask-extension/test/unit/migrations/023-test.js
Brad Decker a49a4a066c
expand transaction constants coverage (#9790)
* expand transaction constants coverage

* touchups

* dont import inside of e2e

* Update app/scripts/controllers/transactions/tx-state-manager.js

Co-authored-by: Mark Stacey <markjstacey@gmail.com>

* Update test/unit/app/controllers/transactions/tx-controller-test.js

Co-authored-by: Mark Stacey <markjstacey@gmail.com>

Co-authored-by: Mark Stacey <markjstacey@gmail.com>
2020-11-07 01:38:12 -06:00

116 lines
3.3 KiB
JavaScript

import assert from 'assert'
import migration23 from '../../../app/scripts/migrations/023'
import { TRANSACTION_STATUSES } from '../../../shared/constants/transaction'
const storage = {
meta: {},
data: {
TransactionController: {
transactions: [],
},
},
}
const transactions = []
const transactions40 = []
const transactions20 = []
const txStates = Object.values(TRANSACTION_STATUSES)
const deletableTxStates = [
TRANSACTION_STATUSES.CONFIRMED,
TRANSACTION_STATUSES.REJECTED,
TRANSACTION_STATUSES.FAILED,
TRANSACTION_STATUSES.DROPPED,
]
let nonDeletableCount = 0
let status
while (transactions.length <= 100) {
status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))]
// This is an old migration, let's allow it
// eslint-disable-next-line no-loop-func
if (!deletableTxStates.find((s) => s === status)) {
nonDeletableCount += 1
}
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', function () {
it('should remove transactions that are unneeded', function (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 += 1
}
})
assert.equal(
leftoverNonDeletableTxCount,
nonDeletableCount,
"migration shouldn't 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 expected limit', function (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 shouldn't delete when at limit",
)
done()
})
.catch(done)
})
it('should not remove any transactions because 20 txs is under the expected limit', function (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 shouldn't delete when under limit",
)
done()
})
.catch(done)
})
})