1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-13 21:27:12 +01:00
metamask-extension/app/scripts/migrations/023.test.js
Mark Stacey 3ba3b330f6 Use strict assertion mode everywhere (#11012)
The `assert` module has two modes: "Legacy" and "strict". When using
strict mode, the "strict" version of each assertion method is implied.
Whereas in legacy mode, by default it will use the deprecated, "loose"
version of each assertion.

We now use strict mode everywhere. A few tests required updates where
they were asserting the wrong thing, and it was passing beforehand due
to the loose matching.
2021-06-07 10:02:39 -02:30

119 lines
3.4 KiB
JavaScript

import { strict as assert } from 'assert';
import { TRANSACTION_STATUSES } from '../../../shared/constants/transaction';
import migration23 from './023';
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);
});
});