mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-28 23:06:37 +01:00
96c00df6f0
Three e2e tests have been updated to fix a possible race condition causing intermittent e2e test failures. In each of the updated tests, the test checks the current network. The check is performed as a two-step process: locate the current network element, then check the text to ensure it's correct. This fails when the test driver finds the element before it re-renders. If the test runs too quickly, it compares the text before the switch is shown on screen, and the test fails. Instead the tests use the element locator to describe what they want. This tells the test driver to keep looking until the conditions are met, ensuring the test doesn't fail unless the network switch takes longer than the default timeout (which should not happen). This is a good example of why we should avoid using assertions on elements in e2e tests. Express your assertions as locators instead to make the test more resilient in the case where the test runs before the next render.
114 lines
3.8 KiB
JavaScript
114 lines
3.8 KiB
JavaScript
const { strict: assert } = require('assert');
|
|
const { convertToHexValue, withFixtures, openDapp } = require('../helpers');
|
|
const FixtureBuilder = require('../fixture-builder');
|
|
|
|
describe('Chain Interactions', function () {
|
|
const port = 8546;
|
|
const chainId = 1338;
|
|
const ganacheOptions = {
|
|
accounts: [
|
|
{
|
|
secretKey:
|
|
'0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC',
|
|
balance: convertToHexValue(25000000000000000000),
|
|
},
|
|
],
|
|
concurrent: { port, chainId },
|
|
};
|
|
it('should add the Ganache test chain and not switch the network', async function () {
|
|
await withFixtures(
|
|
{
|
|
dapp: true,
|
|
fixtures: new FixtureBuilder().build(),
|
|
ganacheOptions,
|
|
title: this.test.title,
|
|
},
|
|
async ({ driver }) => {
|
|
await driver.navigate();
|
|
await driver.fill('#password', 'correct horse battery staple');
|
|
await driver.press('#password', driver.Key.ENTER);
|
|
|
|
// trigger add chain confirmation
|
|
await openDapp(driver);
|
|
await driver.clickElement('#addEthereumChain');
|
|
await driver.waitUntilXWindowHandles(3);
|
|
const windowHandles = await driver.getAllWindowHandles();
|
|
const extension = windowHandles[0];
|
|
await driver.switchToWindowWithTitle(
|
|
'MetaMask Notification',
|
|
windowHandles,
|
|
);
|
|
|
|
// verify chain details
|
|
const [networkName, networkUrl, chainIdElement] =
|
|
await driver.findElements('.definition-list dd');
|
|
assert.equal(await networkName.getText(), `Localhost ${port}`);
|
|
assert.equal(await networkUrl.getText(), `http://127.0.0.1:${port}`);
|
|
assert.equal(await chainIdElement.getText(), chainId.toString());
|
|
|
|
// approve add chain, cancel switch chain
|
|
await driver.clickElement({ text: 'Approve', tag: 'button' });
|
|
await driver.clickElement({ text: 'Cancel', tag: 'button' });
|
|
|
|
// switch to extension
|
|
await driver.waitUntilXWindowHandles(2);
|
|
await driver.switchToWindow(extension);
|
|
|
|
// verify networks
|
|
await driver.findElement({
|
|
css: '[data-testid="network-display"]',
|
|
text: 'Localhost 8545',
|
|
});
|
|
|
|
await driver.clickElement('[data-testid="network-display"]');
|
|
const ganacheChain = await driver.findElements({
|
|
text: `Localhost ${port}`,
|
|
tag: 'span',
|
|
});
|
|
assert.ok(ganacheChain.length, 1);
|
|
},
|
|
);
|
|
});
|
|
|
|
it('should add the Ganache chain and switch the network', async function () {
|
|
await withFixtures(
|
|
{
|
|
dapp: true,
|
|
fixtures: new FixtureBuilder().build(),
|
|
ganacheOptions,
|
|
title: this.test.title,
|
|
},
|
|
async ({ driver }) => {
|
|
await driver.navigate();
|
|
await driver.fill('#password', 'correct horse battery staple');
|
|
await driver.press('#password', driver.Key.ENTER);
|
|
|
|
// trigger add chain confirmation
|
|
await openDapp(driver);
|
|
await driver.clickElement('#addEthereumChain');
|
|
await driver.waitUntilXWindowHandles(3);
|
|
const windowHandles = await driver.getAllWindowHandles();
|
|
const extension = windowHandles[0];
|
|
await driver.switchToWindowWithTitle(
|
|
'MetaMask Notification',
|
|
windowHandles,
|
|
);
|
|
|
|
// approve and switch chain
|
|
await driver.clickElement({ text: 'Approve', tag: 'button' });
|
|
await driver.clickElement({ text: 'Switch network', tag: 'button' });
|
|
|
|
// switch to extension
|
|
await driver.waitUntilXWindowHandles(2);
|
|
await driver.switchToWindow(extension);
|
|
|
|
// verify current network
|
|
await driver.findElement({
|
|
css: '[data-testid="network-display"]',
|
|
text: `Localhost ${port}`,
|
|
});
|
|
},
|
|
);
|
|
});
|
|
});
|