mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 09:57:02 +01:00
Fix flakey tests in metamask controller tests (#19312)
* Refactor metamask controller tests to isolate mv3 specific setup
This commit is contained in:
parent
875bad125f
commit
46a2604df0
@ -31,7 +31,9 @@ const browserPolyfillMock = {
|
|||||||
getPlatformInfo: async () => 'mac',
|
getPlatformInfo: async () => 'mac',
|
||||||
},
|
},
|
||||||
storage: {
|
storage: {
|
||||||
session: {},
|
session: {
|
||||||
|
set: () => undefined,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -186,19 +188,13 @@ const firstTimeState = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const noop = () => undefined;
|
||||||
|
|
||||||
describe('MetaMaskController', function () {
|
describe('MetaMaskController', function () {
|
||||||
let metamaskController;
|
|
||||||
|
|
||||||
const sandbox = sinon.createSandbox();
|
const sandbox = sinon.createSandbox();
|
||||||
const noop = () => undefined;
|
|
||||||
|
|
||||||
browserPolyfillMock.storage.session.set = sandbox.spy();
|
|
||||||
|
|
||||||
before(async function () {
|
before(async function () {
|
||||||
globalThis.isFirstTimeProfileLoaded = true;
|
|
||||||
await ganacheServer.start();
|
await ganacheServer.start();
|
||||||
sinon.spy(MetaMaskController.prototype, 'resetStates');
|
|
||||||
sinon.spy(MetaMaskControllerMV3.prototype, 'resetStates');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
@ -232,6 +228,24 @@ describe('MetaMaskController', function () {
|
|||||||
sendMessage: sandbox.stub().rejects(),
|
sendMessage: sandbox.stub().rejects(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
browserPolyfillMock.storage.session.set = sandbox.spy();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function () {
|
||||||
|
nock.cleanAll();
|
||||||
|
sandbox.restore();
|
||||||
|
});
|
||||||
|
|
||||||
|
after(async function () {
|
||||||
|
await ganacheServer.quit();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('MetaMaskController Behaviour', function () {
|
||||||
|
let metamaskController;
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
sandbox.spy(MetaMaskController.prototype, 'resetStates');
|
||||||
|
|
||||||
metamaskController = new MetaMaskController({
|
metamaskController = new MetaMaskController({
|
||||||
showUserConfirmation: noop,
|
showUserConfirmation: noop,
|
||||||
encryptor: {
|
encryptor: {
|
||||||
@ -265,81 +279,11 @@ describe('MetaMaskController', function () {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(function () {
|
|
||||||
nock.cleanAll();
|
|
||||||
sandbox.restore();
|
|
||||||
});
|
|
||||||
|
|
||||||
after(async function () {
|
|
||||||
await ganacheServer.quit();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('should reset states on first time profile load', function () {
|
describe('should reset states on first time profile load', function () {
|
||||||
it('in mv2, it should reset state without attempting to call browser storage', function () {
|
it('in mv2, it should reset state without attempting to call browser storage', function () {
|
||||||
assert.equal(metamaskController.resetStates.callCount, 1);
|
assert.equal(metamaskController.resetStates.callCount, 1);
|
||||||
assert.equal(browserPolyfillMock.storage.session.set.callCount, 0);
|
assert.equal(browserPolyfillMock.storage.session.set.callCount, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('in mv3, it should reset state', function () {
|
|
||||||
MetaMaskControllerMV3.prototype.resetStates.resetHistory();
|
|
||||||
const metamaskControllerMV3 = new MetaMaskControllerMV3({
|
|
||||||
showUserConfirmation: noop,
|
|
||||||
encryptor: {
|
|
||||||
encrypt(_, object) {
|
|
||||||
this.object = object;
|
|
||||||
return Promise.resolve('mock-encrypted');
|
|
||||||
},
|
|
||||||
decrypt() {
|
|
||||||
return Promise.resolve(this.object);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
initState: cloneDeep(firstTimeState),
|
|
||||||
initLangCode: 'en_US',
|
|
||||||
platform: {
|
|
||||||
showTransactionNotification: () => undefined,
|
|
||||||
getVersion: () => 'foo',
|
|
||||||
},
|
|
||||||
browser: browserPolyfillMock,
|
|
||||||
infuraProjectId: 'foo',
|
|
||||||
isFirstMetaMaskControllerSetup: true,
|
|
||||||
});
|
|
||||||
assert.equal(metamaskControllerMV3.resetStates.callCount, 1);
|
|
||||||
assert.equal(browserPolyfillMock.storage.session.set.callCount, 1);
|
|
||||||
assert.deepEqual(
|
|
||||||
browserPolyfillMock.storage.session.set.getCall(0).args[0],
|
|
||||||
{
|
|
||||||
isFirstMetaMaskControllerSetup: false,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('in mv3, it should not reset states if isFirstMetaMaskControllerSetup is false', function () {
|
|
||||||
MetaMaskControllerMV3.prototype.resetStates.resetHistory();
|
|
||||||
browserPolyfillMock.storage.session.set.resetHistory();
|
|
||||||
const metamaskControllerMV3 = new MetaMaskControllerMV3({
|
|
||||||
showUserConfirmation: noop,
|
|
||||||
encryptor: {
|
|
||||||
encrypt(_, object) {
|
|
||||||
this.object = object;
|
|
||||||
return Promise.resolve('mock-encrypted');
|
|
||||||
},
|
|
||||||
decrypt() {
|
|
||||||
return Promise.resolve(this.object);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
initState: cloneDeep(firstTimeState),
|
|
||||||
initLangCode: 'en_US',
|
|
||||||
platform: {
|
|
||||||
showTransactionNotification: () => undefined,
|
|
||||||
getVersion: () => 'foo',
|
|
||||||
},
|
|
||||||
browser: browserPolyfillMock,
|
|
||||||
infuraProjectId: 'foo',
|
|
||||||
isFirstMetaMaskControllerSetup: false,
|
|
||||||
});
|
|
||||||
assert.equal(metamaskControllerMV3.resetStates.callCount, 0);
|
|
||||||
assert.equal(browserPolyfillMock.storage.session.set.callCount, 0);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#importAccountWithStrategy', function () {
|
describe('#importAccountWithStrategy', function () {
|
||||||
@ -507,7 +451,10 @@ describe('MetaMaskController', function () {
|
|||||||
);
|
);
|
||||||
delete secondVaultIdentities[TEST_ADDRESS_ALT].lastSelected;
|
delete secondVaultIdentities[TEST_ADDRESS_ALT].lastSelected;
|
||||||
assert.deepEqual(secondVaultIdentities, {
|
assert.deepEqual(secondVaultIdentities, {
|
||||||
[TEST_ADDRESS_ALT]: { address: TEST_ADDRESS_ALT, name: DEFAULT_LABEL },
|
[TEST_ADDRESS_ALT]: {
|
||||||
|
address: TEST_ADDRESS_ALT,
|
||||||
|
name: DEFAULT_LABEL,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -682,7 +629,8 @@ describe('MetaMaskController', function () {
|
|||||||
.stub(metamaskController.keyringController, 'getKeyringsByType')
|
.stub(metamaskController.keyringController, 'getKeyringsByType')
|
||||||
.returns([mockHDKeyring]);
|
.returns([mockHDKeyring]);
|
||||||
|
|
||||||
const recoveredMnemonic = metamaskController.getPrimaryKeyringMnemonic();
|
const recoveredMnemonic =
|
||||||
|
metamaskController.getPrimaryKeyringMnemonic();
|
||||||
|
|
||||||
assert.equal(recoveredMnemonic, uint8ArrayMnemonic);
|
assert.equal(recoveredMnemonic, uint8ArrayMnemonic);
|
||||||
});
|
});
|
||||||
@ -769,7 +717,10 @@ describe('MetaMaskController', function () {
|
|||||||
getAccountsStub.onCall(2).returns(Promise.resolve(['0x3']));
|
getAccountsStub.onCall(2).returns(Promise.resolve(['0x3']));
|
||||||
getAccountsStub.onCall(3).returns(Promise.resolve(['0x4']));
|
getAccountsStub.onCall(3).returns(Promise.resolve(['0x4']));
|
||||||
sinon.spy(metamaskController.preferencesController, 'setAddresses');
|
sinon.spy(metamaskController.preferencesController, 'setAddresses');
|
||||||
sinon.spy(metamaskController.preferencesController, 'setSelectedAddress');
|
sinon.spy(
|
||||||
|
metamaskController.preferencesController,
|
||||||
|
'setSelectedAddress',
|
||||||
|
);
|
||||||
sinon.spy(metamaskController.preferencesController, 'setAccountLabel');
|
sinon.spy(metamaskController.preferencesController, 'setAccountLabel');
|
||||||
await metamaskController
|
await metamaskController
|
||||||
.connectHardware(HardwareDeviceNames.trezor, 0, `m/44'/1'/0'/0`)
|
.connectHardware(HardwareDeviceNames.trezor, 0, `m/44'/1'/0'/0`)
|
||||||
@ -807,12 +758,15 @@ describe('MetaMaskController', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should call preferencesController.setAddresses', async function () {
|
it('should call preferencesController.setAddresses', async function () {
|
||||||
assert(metamaskController.preferencesController.setAddresses.calledOnce);
|
assert(
|
||||||
|
metamaskController.preferencesController.setAddresses.calledOnce,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should call preferencesController.setSelectedAddress', async function () {
|
it('should call preferencesController.setSelectedAddress', async function () {
|
||||||
assert(
|
assert(
|
||||||
metamaskController.preferencesController.setSelectedAddress.calledOnce,
|
metamaskController.preferencesController.setSelectedAddress
|
||||||
|
.calledOnce,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -868,7 +822,9 @@ describe('MetaMaskController', function () {
|
|||||||
'getNetworkId',
|
'getNetworkId',
|
||||||
);
|
);
|
||||||
|
|
||||||
selectedAddressStub.returns('0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc');
|
selectedAddressStub.returns(
|
||||||
|
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
||||||
|
);
|
||||||
getNetworkIdStub.returns(42);
|
getNetworkIdStub.returns(42);
|
||||||
|
|
||||||
metamaskController.txController.txStateManager._addTransactionsToState([
|
metamaskController.txController.txStateManager._addTransactionsToState([
|
||||||
@ -1254,7 +1210,8 @@ describe('MetaMaskController', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
metamaskController.provider = provider;
|
metamaskController.provider = provider;
|
||||||
const tokenDetails = await metamaskController.getTokenStandardAndDetails(
|
const tokenDetails =
|
||||||
|
await metamaskController.getTokenStandardAndDetails(
|
||||||
'0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
'0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
||||||
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
||||||
);
|
);
|
||||||
@ -1304,7 +1261,8 @@ describe('MetaMaskController', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
metamaskController.provider = provider;
|
metamaskController.provider = provider;
|
||||||
const tokenDetails = await metamaskController.getTokenStandardAndDetails(
|
const tokenDetails =
|
||||||
|
await metamaskController.getTokenStandardAndDetails(
|
||||||
'0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
'0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
||||||
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
||||||
);
|
);
|
||||||
@ -1340,7 +1298,8 @@ describe('MetaMaskController', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
metamaskController.provider = provider;
|
metamaskController.provider = provider;
|
||||||
const tokenDetails = await metamaskController.getTokenStandardAndDetails(
|
const tokenDetails =
|
||||||
|
await metamaskController.getTokenStandardAndDetails(
|
||||||
'0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
'0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
||||||
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
||||||
);
|
);
|
||||||
@ -1401,7 +1360,8 @@ describe('MetaMaskController', function () {
|
|||||||
return tokenData;
|
return tokenData;
|
||||||
});
|
});
|
||||||
|
|
||||||
const tokenDetails = await metamaskController.getTokenStandardAndDetails(
|
const tokenDetails =
|
||||||
|
await metamaskController.getTokenStandardAndDetails(
|
||||||
'0xNotInTokenList',
|
'0xNotInTokenList',
|
||||||
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
||||||
);
|
);
|
||||||
@ -1461,7 +1421,8 @@ describe('MetaMaskController', function () {
|
|||||||
return tokenData;
|
return tokenData;
|
||||||
});
|
});
|
||||||
|
|
||||||
const tokenDetails = await metamaskController.getTokenStandardAndDetails(
|
const tokenDetails =
|
||||||
|
await metamaskController.getTokenStandardAndDetails(
|
||||||
'0xAAA75474e89094c44da98b954eedeac495271d0f',
|
'0xAAA75474e89094c44da98b954eedeac495271d0f',
|
||||||
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
||||||
);
|
);
|
||||||
@ -1521,7 +1482,8 @@ describe('MetaMaskController', function () {
|
|||||||
return tokenData;
|
return tokenData;
|
||||||
});
|
});
|
||||||
|
|
||||||
const tokenDetails = await metamaskController.getTokenStandardAndDetails(
|
const tokenDetails =
|
||||||
|
await metamaskController.getTokenStandardAndDetails(
|
||||||
'0xAAA75474e89094c44da98b954eedeac495271d0f',
|
'0xAAA75474e89094c44da98b954eedeac495271d0f',
|
||||||
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
'0xf0d172594caedee459b89ad44c94098e474571b6',
|
||||||
);
|
);
|
||||||
@ -1635,4 +1597,77 @@ describe('MetaMaskController', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('MV3 Specific behaviour', function () {
|
||||||
|
before(async function () {
|
||||||
|
globalThis.isFirstTimeProfileLoaded = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(async function () {
|
||||||
|
sandbox.spy(MetaMaskControllerMV3.prototype, 'resetStates');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('it should reset state', function () {
|
||||||
|
browserPolyfillMock.storage.session.set.resetHistory();
|
||||||
|
|
||||||
|
const metamaskControllerMV3 = new MetaMaskControllerMV3({
|
||||||
|
showUserConfirmation: noop,
|
||||||
|
encryptor: {
|
||||||
|
encrypt(_, object) {
|
||||||
|
this.object = object;
|
||||||
|
return Promise.resolve('mock-encrypted');
|
||||||
|
},
|
||||||
|
decrypt() {
|
||||||
|
return Promise.resolve(this.object);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
initState: cloneDeep(firstTimeState),
|
||||||
|
initLangCode: 'en_US',
|
||||||
|
platform: {
|
||||||
|
showTransactionNotification: () => undefined,
|
||||||
|
getVersion: () => 'foo',
|
||||||
|
},
|
||||||
|
browser: browserPolyfillMock,
|
||||||
|
infuraProjectId: 'foo',
|
||||||
|
isFirstMetaMaskControllerSetup: true,
|
||||||
|
});
|
||||||
|
assert.equal(metamaskControllerMV3.resetStates.callCount, 1);
|
||||||
|
assert.equal(browserPolyfillMock.storage.session.set.callCount, 1);
|
||||||
|
assert.deepEqual(
|
||||||
|
browserPolyfillMock.storage.session.set.getCall(0).args[0],
|
||||||
|
{
|
||||||
|
isFirstMetaMaskControllerSetup: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('in mv3, it should not reset states if isFirstMetaMaskControllerSetup is false', function () {
|
||||||
|
browserPolyfillMock.storage.session.set.resetHistory();
|
||||||
|
|
||||||
|
const metamaskControllerMV3 = new MetaMaskControllerMV3({
|
||||||
|
showUserConfirmation: noop,
|
||||||
|
encryptor: {
|
||||||
|
encrypt(_, object) {
|
||||||
|
this.object = object;
|
||||||
|
return Promise.resolve('mock-encrypted');
|
||||||
|
},
|
||||||
|
decrypt() {
|
||||||
|
return Promise.resolve(this.object);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
initState: cloneDeep(firstTimeState),
|
||||||
|
initLangCode: 'en_US',
|
||||||
|
platform: {
|
||||||
|
showTransactionNotification: () => undefined,
|
||||||
|
getVersion: () => 'foo',
|
||||||
|
},
|
||||||
|
browser: browserPolyfillMock,
|
||||||
|
infuraProjectId: 'foo',
|
||||||
|
isFirstMetaMaskControllerSetup: false,
|
||||||
|
});
|
||||||
|
assert.equal(metamaskControllerMV3.resetStates.callCount, 0);
|
||||||
|
assert.equal(browserPolyfillMock.storage.session.set.callCount, 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user