From 72e49f4bd49260a154a38205c17af4ef1fa1144b Mon Sep 17 00:00:00 2001 From: Daniel <80175477+dan437@users.noreply.github.com> Date: Wed, 16 Nov 2022 16:57:47 +0100 Subject: [PATCH] Add mocks for E2E tests (#16527) * Mock token import * Add mocks, improve stability * Update LavaMoat policies The policies became outdated recently due to undetected conflicts between PRs. * Use veryLargeDelayMs, refactoring Co-authored-by: Mark Stacey --- lavamoat/browserify/beta/policy.json | 133 +++++++++++++++++++++++++- lavamoat/browserify/flask/policy.json | 133 +++++++++++++++++++++++++- lavamoat/browserify/main/policy.json | 133 +++++++++++++++++++++++++- test/e2e/mock-e2e.js | 127 ++++++++++++++++++++++++ test/e2e/swaps/shared.js | 5 +- 5 files changed, 525 insertions(+), 6 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index d134a6a9f..ac2f28d58 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -1238,14 +1238,145 @@ "packages": { "@ethersproject/bignumber": true, "@ethersproject/bignumber>@ethersproject/bytes": true, - "@metamask/controllers": true, "@metamask/controllers>@ethersproject/providers": true, "@metamask/controllers>isomorphic-fetch": true, + "@metamask/smart-transactions-controller>@metamask/controllers": true, "@metamask/smart-transactions-controller>bignumber.js": true, "@metamask/smart-transactions-controller>fast-json-patch": true, "lodash": true } }, + "@metamask/smart-transactions-controller>@metamask/controllers": { + "globals": { + "Headers": true, + "URL": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.log": true, + "fetch": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@ethereumjs/common": true, + "@ethereumjs/tx": true, + "@metamask/contract-metadata": true, + "@metamask/controllers>@ethersproject/abi": true, + "@metamask/controllers>@ethersproject/contracts": true, + "@metamask/controllers>@ethersproject/providers": true, + "@metamask/controllers>abort-controller": true, + "@metamask/controllers>async-mutex": true, + "@metamask/controllers>eth-json-rpc-infura": true, + "@metamask/controllers>eth-phishing-detect": true, + "@metamask/controllers>isomorphic-fetch": true, + "@metamask/controllers>multiformats": true, + "@metamask/controllers>web3": true, + "@metamask/controllers>web3-provider-engine": true, + "@metamask/metamask-eth-abis": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry": true, + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet": true, + "@metamask/smart-transactions-controller>@metamask/controllers>nanoid": true, + "browserify>buffer": true, + "browserify>events": true, + "deep-freeze-strict": true, + "eslint>fast-deep-equal": true, + "eth-ens-namehash": true, + "eth-keyring-controller": true, + "eth-query": true, + "eth-rpc-errors": true, + "eth-sig-util": true, + "ethereumjs-util": true, + "ethjs>ethjs-unit": true, + "immer": true, + "json-rpc-engine": true, + "jsonschema": true, + "punycode": true, + "single-call-balance-checker-abi": true, + "uuid": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs": { + "globals": { + "clearInterval": true, + "setInterval": true + }, + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>bn.js": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-abi": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-query": true, + "browserify>buffer": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-provider-http": true, + "ethjs>ethjs-unit": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-abi": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>bn.js": true, + "browserify>buffer": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract>ethjs-abi": true, + "ethjs-query>babel-runtime": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "promise-to-callback": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract>ethjs-abi": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>bn.js": true, + "browserify>buffer": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-query": { + "globals": { + "console": true + }, + "packages": { + "ethjs-query>babel-runtime": true, + "ethjs-query>ethjs-format": true, + "ethjs-query>ethjs-rpc": true, + "promise-to-callback": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet>uuid": true, + "@truffle/codec>utf8": true, + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "ethereumjs-util": true, + "ethereumjs-util>ethereum-cryptography": true, + "ethereumjs-wallet>aes-js": true, + "ethereumjs-wallet>bs58check": true, + "ethereumjs-wallet>randombytes": true, + "ethers>@ethersproject/json-wallets>scrypt-js": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet>uuid": { + "globals": { + "crypto": true, + "msCrypto": true + } + }, "@metamask/smart-transactions-controller>@metamask/controllers>nanoid": { "globals": { "crypto.getRandomValues": true diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index b8ff3e7a6..cd49785f5 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -1584,14 +1584,145 @@ "packages": { "@ethersproject/bignumber": true, "@ethersproject/bignumber>@ethersproject/bytes": true, - "@metamask/controllers": true, "@metamask/controllers>@ethersproject/providers": true, "@metamask/controllers>isomorphic-fetch": true, + "@metamask/smart-transactions-controller>@metamask/controllers": true, "@metamask/smart-transactions-controller>bignumber.js": true, "@metamask/smart-transactions-controller>fast-json-patch": true, "lodash": true } }, + "@metamask/smart-transactions-controller>@metamask/controllers": { + "globals": { + "Headers": true, + "URL": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.log": true, + "fetch": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@ethereumjs/common": true, + "@ethereumjs/tx": true, + "@metamask/contract-metadata": true, + "@metamask/controllers>@ethersproject/abi": true, + "@metamask/controllers>@ethersproject/contracts": true, + "@metamask/controllers>@ethersproject/providers": true, + "@metamask/controllers>abort-controller": true, + "@metamask/controllers>async-mutex": true, + "@metamask/controllers>eth-json-rpc-infura": true, + "@metamask/controllers>eth-phishing-detect": true, + "@metamask/controllers>isomorphic-fetch": true, + "@metamask/controllers>multiformats": true, + "@metamask/controllers>web3": true, + "@metamask/controllers>web3-provider-engine": true, + "@metamask/metamask-eth-abis": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry": true, + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet": true, + "@metamask/smart-transactions-controller>@metamask/controllers>nanoid": true, + "browserify>buffer": true, + "browserify>events": true, + "deep-freeze-strict": true, + "eslint>fast-deep-equal": true, + "eth-ens-namehash": true, + "eth-keyring-controller": true, + "eth-query": true, + "eth-rpc-errors": true, + "eth-sig-util": true, + "ethereumjs-util": true, + "ethjs>ethjs-unit": true, + "immer": true, + "json-rpc-engine": true, + "jsonschema": true, + "punycode": true, + "single-call-balance-checker-abi": true, + "uuid": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs": { + "globals": { + "clearInterval": true, + "setInterval": true + }, + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>bn.js": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-abi": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-query": true, + "browserify>buffer": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-provider-http": true, + "ethjs>ethjs-unit": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-abi": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>bn.js": true, + "browserify>buffer": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract>ethjs-abi": true, + "ethjs-query>babel-runtime": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "promise-to-callback": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract>ethjs-abi": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>bn.js": true, + "browserify>buffer": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-query": { + "globals": { + "console": true + }, + "packages": { + "ethjs-query>babel-runtime": true, + "ethjs-query>ethjs-format": true, + "ethjs-query>ethjs-rpc": true, + "promise-to-callback": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet>uuid": true, + "@truffle/codec>utf8": true, + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "ethereumjs-util": true, + "ethereumjs-util>ethereum-cryptography": true, + "ethereumjs-wallet>aes-js": true, + "ethereumjs-wallet>bs58check": true, + "ethereumjs-wallet>randombytes": true, + "ethers>@ethersproject/json-wallets>scrypt-js": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet>uuid": { + "globals": { + "crypto": true, + "msCrypto": true + } + }, "@metamask/smart-transactions-controller>@metamask/controllers>nanoid": { "globals": { "crypto.getRandomValues": true diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index d134a6a9f..ac2f28d58 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -1238,14 +1238,145 @@ "packages": { "@ethersproject/bignumber": true, "@ethersproject/bignumber>@ethersproject/bytes": true, - "@metamask/controllers": true, "@metamask/controllers>@ethersproject/providers": true, "@metamask/controllers>isomorphic-fetch": true, + "@metamask/smart-transactions-controller>@metamask/controllers": true, "@metamask/smart-transactions-controller>bignumber.js": true, "@metamask/smart-transactions-controller>fast-json-patch": true, "lodash": true } }, + "@metamask/smart-transactions-controller>@metamask/controllers": { + "globals": { + "Headers": true, + "URL": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.log": true, + "fetch": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@ethereumjs/common": true, + "@ethereumjs/tx": true, + "@metamask/contract-metadata": true, + "@metamask/controllers>@ethersproject/abi": true, + "@metamask/controllers>@ethersproject/contracts": true, + "@metamask/controllers>@ethersproject/providers": true, + "@metamask/controllers>abort-controller": true, + "@metamask/controllers>async-mutex": true, + "@metamask/controllers>eth-json-rpc-infura": true, + "@metamask/controllers>eth-phishing-detect": true, + "@metamask/controllers>isomorphic-fetch": true, + "@metamask/controllers>multiformats": true, + "@metamask/controllers>web3": true, + "@metamask/controllers>web3-provider-engine": true, + "@metamask/metamask-eth-abis": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry": true, + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet": true, + "@metamask/smart-transactions-controller>@metamask/controllers>nanoid": true, + "browserify>buffer": true, + "browserify>events": true, + "deep-freeze-strict": true, + "eslint>fast-deep-equal": true, + "eth-ens-namehash": true, + "eth-keyring-controller": true, + "eth-query": true, + "eth-rpc-errors": true, + "eth-sig-util": true, + "ethereumjs-util": true, + "ethjs>ethjs-unit": true, + "immer": true, + "json-rpc-engine": true, + "jsonschema": true, + "punycode": true, + "single-call-balance-checker-abi": true, + "uuid": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs": { + "globals": { + "clearInterval": true, + "setInterval": true + }, + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>bn.js": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-abi": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract": true, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-query": true, + "browserify>buffer": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-provider-http": true, + "ethjs>ethjs-unit": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-abi": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>bn.js": true, + "browserify>buffer": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract>ethjs-abi": true, + "ethjs-query>babel-runtime": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "promise-to-callback": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-contract>ethjs-abi": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>bn.js": true, + "browserify>buffer": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>eth-method-registry>ethjs>ethjs-query": { + "globals": { + "console": true + }, + "packages": { + "ethjs-query>babel-runtime": true, + "ethjs-query>ethjs-format": true, + "ethjs-query>ethjs-rpc": true, + "promise-to-callback": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet": { + "packages": { + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet>uuid": true, + "@truffle/codec>utf8": true, + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "ethereumjs-util": true, + "ethereumjs-util>ethereum-cryptography": true, + "ethereumjs-wallet>aes-js": true, + "ethereumjs-wallet>bs58check": true, + "ethereumjs-wallet>randombytes": true, + "ethers>@ethersproject/json-wallets>scrypt-js": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>ethereumjs-wallet>uuid": { + "globals": { + "crypto": true, + "msCrypto": true + } + }, "@metamask/smart-transactions-controller>@metamask/controllers>nanoid": { "globals": { "crypto.getRandomValues": true diff --git a/test/e2e/mock-e2e.js b/test/e2e/mock-e2e.js index a6cd0a70d..b72498126 100644 --- a/test/e2e/mock-e2e.js +++ b/test/e2e/mock-e2e.js @@ -76,6 +76,23 @@ async function setupMocking(server, testSpecificMock) { }; }); + await server + .forGet('https://swap.metaswap.codefi.network/networks/1/token') + .withQuery({ address: '0x72c9Fb7ED19D3ce51cea5C56B3e023cd918baaDf' }) + .thenCallback(() => { + return { + statusCode: 200, + json: { + symbol: 'AGLT', + type: 'erc20', + decimals: '18', + address: '0x72c9fb7ed19d3ce51cea5c56b3e023cd918baadf', + occurences: 1, + aggregators: ['dynamic'], + }, + }; + }); + await server .forGet( 'https://gas-api.metaswap.codefi.network/networks/1/suggestedGasFees', @@ -180,6 +197,116 @@ async function setupMocking(server, testSpecificMock) { }; }); + await server + .forGet('https://swap.metaswap.codefi.network/networks/1/tokens') + .thenCallback(() => { + return { + statusCode: 200, + json: [ + { + name: 'Ethereum', + symbol: 'ETH', + decimals: 18, + type: 'native', + iconUrl: + 'https://token.metaswap.codefi.network/assets/nativeCurrencyLogos/ethereum.svg', + coingeckoId: 'ethereum', + address: '0x0000000000000000000000000000000000000000', + occurrences: 100, + aggregators: [], + }, + { + address: '0x6b175474e89094c44da98b954eedeac495271d0f', + symbol: 'DAI', + decimals: 18, + name: 'Dai Stablecoin', + iconUrl: + 'https://crypto.com/price/coin-data/icon/DAI/color_icon.png', + type: 'erc20', + aggregators: [ + 'aave', + 'bancor', + 'cmc', + 'cryptocom', + 'coinGecko', + 'oneInch', + 'pmm', + 'zerion', + 'lifi', + ], + occurrences: 9, + fees: { + '0xb0da5965d43369968574d399dbe6374683773a65': 0, + }, + storage: { + balance: 2, + }, + }, + { + address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + symbol: 'USDC', + decimals: 6, + name: 'USD Coin', + iconUrl: + 'https://crypto.com/price/coin-data/icon/USDC/color_icon.png', + type: 'erc20', + aggregators: [ + 'aave', + 'bancor', + 'cryptocom', + 'coinGecko', + 'oneInch', + 'pmm', + 'zerion', + 'lifi', + ], + occurrences: 8, + fees: {}, + storage: { + balance: 9, + }, + }, + { + address: '0xc6bdb96e29c38dc43f014eed44de4106a6a8eb5f', + symbol: 'INUINU', + decimals: 18, + name: 'Inu Inu', + iconUrl: + 'https://assets.coingecko.com/coins/images/26391/thumb/logo_square_200.png?1657752596', + type: 'erc20', + aggregators: ['coinGecko'], + occurrences: 1, + }, + ], + }; + }); + + await server + .forGet('https://swap.metaswap.codefi.network/networks/1/topAssets') + .thenCallback(() => { + return { + statusCode: 200, + json: [ + { + address: '0x0000000000000000000000000000000000000000', + symbol: 'ETH', + }, + { + address: '0x6b175474e89094c44da98b954eedeac495271d0f', + symbol: 'DAI', + }, + { + address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + symbol: 'USDC', + }, + { + address: '0xdac17f958d2ee523a2206206994597c13d831ec7', + symbol: 'USDT', + }, + ], + }; + }); + await server .forGet('https://token-api.metaswap.codefi.network/token/0x539') .thenCallback(() => { diff --git a/test/e2e/swaps/shared.js b/test/e2e/swaps/shared.js index 1a2dc40a3..4a2d4d124 100644 --- a/test/e2e/swaps/shared.js +++ b/test/e2e/swaps/shared.js @@ -1,4 +1,5 @@ const FixtureBuilder = require('../fixture-builder'); +const { veryLargeDelayMs } = require('../helpers'); const ganacheOptions = { accounts: [ @@ -25,10 +26,8 @@ const loadSwaps = async (driver) => { }; const buildQuote = async (driver, options) => { - await driver.clickElement( - '[class*="dropdown-search-list"] + div[class*="MuiFormControl-root MuiTextField-root"]', - ); await driver.fill('input[placeholder*="0"]', options.amount); + await driver.delay(veryLargeDelayMs); // Need an extra delay after typing an amount. await driver.clickElement( '[class="dropdown-search-list__closed-primary-label dropdown-search-list__select-default"]', );