From 80168ab5bc1bd75423c981bd21103028074e7d36 Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Wed, 9 Oct 2024 18:31:29 -0600 Subject: [PATCH 01/16] Mock suggestedGasApi to display the EIP1559 edit priority modal --- .../EditGasFeeLegacyUpdate/index.tsx | 3 +- .../suggestedGasApiGanacheResponseBody.json | 37 +++++++++++++++++++ e2e/mockServer/mockUrlCollection.json | 3 +- e2e/pages/Send/AmountView.js | 13 +++---- e2e/pages/Send/TransactionConfirmView.js | 6 +-- e2e/selectors/EditGasView.selectors.js | 1 + .../TransactionConfirmView.selectors.js | 1 - .../confirmations/advanced-gas-fees.spec.js | 29 ++++++++++++--- e2e/specs/wallet/suggestedGasApi.mock.spec.js | 15 +++----- 9 files changed, 81 insertions(+), 27 deletions(-) create mode 100644 e2e/mockServer/data/suggestedGasApiGanacheResponseBody.json diff --git a/app/components/Views/confirmations/components/EditGasFeeLegacyUpdate/index.tsx b/app/components/Views/confirmations/components/EditGasFeeLegacyUpdate/index.tsx index 291dff163fe..d451793644a 100644 --- a/app/components/Views/confirmations/components/EditGasFeeLegacyUpdate/index.tsx +++ b/app/components/Views/confirmations/components/EditGasFeeLegacyUpdate/index.tsx @@ -45,6 +45,7 @@ import { useMetrics } from '../../../../../components/hooks/useMetrics'; import { selectGasFeeEstimates } from '../../../../../selectors/confirmTransaction'; import { selectPrimaryCurrency } from '../../../../../selectors/settings'; import { selectGasFeeControllerEstimateType } from '../../../../../selectors/gasFeeController'; +import { EditGasViewSelectorsIDs } from '../../../../../../e2e/selectors/EditGasView.selectors'; const EditGasFeeLegacy = ({ onCancel, @@ -254,7 +255,7 @@ const EditGasFeeLegacy = ({ }; return ( - + diff --git a/e2e/mockServer/data/suggestedGasApiGanacheResponseBody.json b/e2e/mockServer/data/suggestedGasApiGanacheResponseBody.json new file mode 100644 index 00000000000..19b76fe6200 --- /dev/null +++ b/e2e/mockServer/data/suggestedGasApiGanacheResponseBody.json @@ -0,0 +1,37 @@ +{ + "low": { + "suggestedMaxPriorityFeePerGas": "1", + "suggestedMaxFeePerGas": "1.000503137", + "minWaitTimeEstimate": 15000, + "maxWaitTimeEstimate": 60000 + }, + "medium": { + "suggestedMaxPriorityFeePerGas": "1.5", + "suggestedMaxFeePerGas": "1.500679235", + "minWaitTimeEstimate": 15000, + "maxWaitTimeEstimate": 45000 + }, + "high": { + "suggestedMaxPriorityFeePerGas": "2", + "suggestedMaxFeePerGas": "2.000855333", + "minWaitTimeEstimate": 15000, + "maxWaitTimeEstimate": 30000 + }, + "estimatedBaseFee": "0.000503137", + "networkCongestion": 0.34, + "latestPriorityFeeRange": [ + "1.5", + "2" + ], + "historicalPriorityFeeRange": [ + "0.000001", + "236.428872442" + ], + "historicalBaseFeeRange": [ + "0.000392779", + "0.00100495" + ], + "priorityFeeTrend": "up", + "baseFeeTrend": "up", + "version": "0.0.1" +} diff --git a/e2e/mockServer/mockUrlCollection.json b/e2e/mockServer/mockUrlCollection.json index ad00322c76a..44726689158 100644 --- a/e2e/mockServer/mockUrlCollection.json +++ b/e2e/mockServer/mockUrlCollection.json @@ -2,6 +2,7 @@ "localhost": "localhost", "defaultMockPort": 8000, "urls": { - "suggestedGasApiMainnet": "'https://gas.api.cx.metamask.io/networks/1/suggestedGasFees'" + "suggestedGasApiMainnet": "https://gas.api.cx.metamask.io/networks/1/suggestedGasFees", + "suggestedGasApiGanache": "https://gas.api.cx.metamask.io/networks/1337/suggestedGasFees" } } diff --git a/e2e/pages/Send/AmountView.js b/e2e/pages/Send/AmountView.js index c198365602c..bcac9f257e4 100644 --- a/e2e/pages/Send/AmountView.js +++ b/e2e/pages/Send/AmountView.js @@ -1,10 +1,13 @@ import Matchers from '../../utils/Matchers'; import Gestures from '../../utils/Gestures'; -import { AmountViewSelectorsIDs } from '../../selectors/SendFlow/AmountView.selectors'; +import { + AmountViewSelectorsIDs, + AmountViewSelectorsText +} from '../../selectors/SendFlow/AmountView.selectors'; class AmountView { - get currencySwitch() { - return Matchers.getElementByID(AmountViewSelectorsIDs.CURRENCY_SWITCH); + get title() { + return Matchers.getElementByText(AmountViewSelectorsText.SCREEN_TITLE); } get nextButton() { @@ -26,9 +29,5 @@ class AmountView { ? await Gestures.typeTextAndHideKeyboard(this.amountInputField, amount) : await Gestures.replaceTextInField(this.amountInputField, amount); } - - async tapCurrencySwitch() { - await Gestures.waitAndTap(this.currencySwitch); - } } export default new AmountView(); diff --git a/e2e/pages/Send/TransactionConfirmView.js b/e2e/pages/Send/TransactionConfirmView.js index e231da209c2..f9b80f1439c 100644 --- a/e2e/pages/Send/TransactionConfirmView.js +++ b/e2e/pages/Send/TransactionConfirmView.js @@ -71,9 +71,9 @@ class TransactionConfirmationView { return Matchers.getElementByText(EditGasViewSelectorsText.ADVANCE_OPTIONS); } - get editPriorityModal() { - return Matchers.getElementByText( - TransactionConfirmViewSelectorsText.EDIT_PRIORITY_MODAL, + get editPriorityLegacyModal() { + return Matchers.getElementByID( + EditGasViewSelectorsIDs.LEGACY_CONTAINER, ); } diff --git a/e2e/selectors/EditGasView.selectors.js b/e2e/selectors/EditGasView.selectors.js index b4a7bf5e4d5..ccc83419235 100644 --- a/e2e/selectors/EditGasView.selectors.js +++ b/e2e/selectors/EditGasView.selectors.js @@ -4,6 +4,7 @@ export const EditGasViewSelectorsIDs = { ESTIMATED_FEE_TEST_ID: 'estimated-fee', EDIT_PRIORITY_SCREEN_TEST_ID: 'edit-priority-screen', MAX_PRIORITY_FEE_INPUT_TEST_ID: 'max-priority-fee-range-input', + LEGACY_CONTAINER: 'edit-priority-legacy-screen', }; export const EditGasViewSelectorsText = { AGGRESSIVE: enContent.edit_gas_fee_eip1559.aggressive, diff --git a/e2e/selectors/TransactionConfirmView.selectors.js b/e2e/selectors/TransactionConfirmView.selectors.js index cde41998bd5..2ca017253e5 100644 --- a/e2e/selectors/TransactionConfirmView.selectors.js +++ b/e2e/selectors/TransactionConfirmView.selectors.js @@ -10,5 +10,4 @@ export const TransactionConfirmViewSelectorsIDs = { export const TransactionConfirmViewSelectorsText = { CANCEL_BUTTON: enContent.transaction.cancel, - EDIT_PRIORITY_MODAL: enContent.edit_gas_fee_eip1559.edit_priority, }; diff --git a/e2e/specs/confirmations/advanced-gas-fees.spec.js b/e2e/specs/confirmations/advanced-gas-fees.spec.js index 415179891b8..28dfcf0b9dc 100644 --- a/e2e/specs/confirmations/advanced-gas-fees.spec.js +++ b/e2e/specs/confirmations/advanced-gas-fees.spec.js @@ -14,20 +14,41 @@ import TabBarComponent from '../../pages/TabBarComponent'; import WalletActionsModal from '../../pages/modals/WalletActionsModal'; import TestHelpers from '../../helpers'; import Assertions from '../../utils/Assertions'; -import { AmountViewSelectorsText } from '../../selectors/SendFlow/AmountView.selectors'; +import { + startMockServer, + stopMockServer +} from '../../mockServer/mockServer'; +import { urls } from '../../mockServer/mockUrlCollection.json'; +import responseBody from '../../mockServer/data/suggestedGasApiGanacheResponseBody.json'; const VALID_ADDRESS = '0xebe6CcB6B55e1d094d9c58980Bc10Fed69932cAb'; describe(SmokeConfirmations('Advanced Gas Fees and Priority Tests'), () => { + let mockServer; beforeAll(async () => { jest.setTimeout(170000); await TestHelpers.reverseServerPort(); + + mockServer = await startMockServer({ // Configure mock server + mockUrl: urls.suggestedGasApiGanache, + responseCode: 200, + responseBody + }); + }); + + afterAll(async () => { + try { + await stopMockServer(); + } catch (error) { + // eslint-disable-next-line no-console + console.log('Mock server already stopped or encountered an error:', error); + } }); it('should edit priority gas settings and send ETH', async () => { await withFixtures( { - fixture: new FixtureBuilder().withSepoliaNetwork().build(), + fixture: new FixtureBuilder().withGanacheNetwork().build(), restartDevice: true, ganacheOptions: defaultGanacheOptions, }, @@ -46,9 +67,7 @@ describe(SmokeConfirmations('Advanced Gas Fees and Priority Tests'), () => { await SendView.inputAddress(VALID_ADDRESS); await SendView.tapNextButton(); // Check that we are on the amount view - await Assertions.checkIfTextIsDisplayed( - AmountViewSelectorsText.SCREEN_TITLE, - ); + await Assertions.checkIfVisible(AmountView.title); // Input acceptable value await AmountView.typeInTransactionAmount('0.00004'); diff --git a/e2e/specs/wallet/suggestedGasApi.mock.spec.js b/e2e/specs/wallet/suggestedGasApi.mock.spec.js index e0433a69203..42419e6141c 100644 --- a/e2e/specs/wallet/suggestedGasApi.mock.spec.js +++ b/e2e/specs/wallet/suggestedGasApi.mock.spec.js @@ -31,15 +31,12 @@ describe(SmokeCore('Mock suggestedGasApi fallback to legacy gas endpoint when E }); }); - // Because we stop the server within the test, a try catch block here would stop the server if the test fails midway afterAll(async () => { - if (mockServer) { - try { - await stopMockServer(); // Stop the mock server if it's running - } catch (error) { - // eslint-disable-next-line no-console - console.log('Mock server already stopped or encountered an error:', error); - } + try { + await stopMockServer(); + } catch (error) { + // eslint-disable-next-line no-console + console.log('Mock server already stopped or encountered an error:', error); } }); @@ -77,7 +74,7 @@ describe(SmokeCore('Mock suggestedGasApi fallback to legacy gas endpoint when E await AmountView.tapNextButton(); await TransactionConfirmView.tapEstimatedGasLink(1); await Assertions.checkIfVisible( - TransactionConfirmView.editPriorityModal, + TransactionConfirmView.editPriorityLegacyModal, ); await stopMockServer(); //stop mock server to reinstate suggested gas api service await Assertions.checkIfVisible( From 71497aedcb9cc490e3cd9a74a5c5bd314f4a4028 Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Wed, 9 Oct 2024 18:52:19 -0600 Subject: [PATCH 02/16] Update snapshot --- .../CustomGasModal/__snapshots__/CustomGasModal.test.tsx.snap | 1 + .../__snapshots__/EditGasFeeLegacyUpdate.test.tsx.snap | 1 + 2 files changed, 2 insertions(+) diff --git a/app/components/Views/confirmations/SendFlow/Confirm/components/CustomGasModal/__snapshots__/CustomGasModal.test.tsx.snap b/app/components/Views/confirmations/SendFlow/Confirm/components/CustomGasModal/__snapshots__/CustomGasModal.test.tsx.snap index 76fbac8cf5b..2ee6ced8885 100644 --- a/app/components/Views/confirmations/SendFlow/Confirm/components/CustomGasModal/__snapshots__/CustomGasModal.test.tsx.snap +++ b/app/components/Views/confirmations/SendFlow/Confirm/components/CustomGasModal/__snapshots__/CustomGasModal.test.tsx.snap @@ -137,6 +137,7 @@ exports[`CustomGasModal should render correctly 1`] = ` "paddingTop": 24, } } + testID="edit-priority-legacy-screen" > Date: Thu, 10 Oct 2024 13:07:32 -0600 Subject: [PATCH 03/16] Change beforeall --- e2e/specs/confirmations/advanced-gas-fees.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e/specs/confirmations/advanced-gas-fees.spec.js b/e2e/specs/confirmations/advanced-gas-fees.spec.js index 28dfcf0b9dc..fc7de34d9c6 100644 --- a/e2e/specs/confirmations/advanced-gas-fees.spec.js +++ b/e2e/specs/confirmations/advanced-gas-fees.spec.js @@ -27,13 +27,13 @@ describe(SmokeConfirmations('Advanced Gas Fees and Priority Tests'), () => { let mockServer; beforeAll(async () => { jest.setTimeout(170000); - await TestHelpers.reverseServerPort(); - mockServer = await startMockServer({ // Configure mock server mockUrl: urls.suggestedGasApiGanache, responseCode: 200, responseBody }); + + await TestHelpers.reverseServerPort(); }); afterAll(async () => { From 36d298e2600c5e40154687f41eeda159328a3582 Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Mon, 14 Oct 2024 12:34:28 -0600 Subject: [PATCH 04/16] Update mockttp default port --- e2e/mockServer/mockUrlCollection.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/mockServer/mockUrlCollection.json b/e2e/mockServer/mockUrlCollection.json index 44726689158..69cc4feca4f 100644 --- a/e2e/mockServer/mockUrlCollection.json +++ b/e2e/mockServer/mockUrlCollection.json @@ -1,6 +1,6 @@ { "localhost": "localhost", - "defaultMockPort": 8000, + "defaultMockPort": 7500, "urls": { "suggestedGasApiMainnet": "https://gas.api.cx.metamask.io/networks/1/suggestedGasFees", "suggestedGasApiGanache": "https://gas.api.cx.metamask.io/networks/1337/suggestedGasFees" From 35f765a28d627a8010d187e973994d49e5facf9e Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Mon, 14 Oct 2024 13:56:46 -0600 Subject: [PATCH 05/16] Unify mockttp url --- e2e/mockServer/mockUrlCollection.json | 2 +- shim.js | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/e2e/mockServer/mockUrlCollection.json b/e2e/mockServer/mockUrlCollection.json index 69cc4feca4f..44726689158 100644 --- a/e2e/mockServer/mockUrlCollection.json +++ b/e2e/mockServer/mockUrlCollection.json @@ -1,6 +1,6 @@ { "localhost": "localhost", - "defaultMockPort": 7500, + "defaultMockPort": 8000, "urls": { "suggestedGasApiMainnet": "https://gas.api.cx.metamask.io/networks/1/suggestedGasFees", "suggestedGasApiGanache": "https://gas.api.cx.metamask.io/networks/1337/suggestedGasFees" diff --git a/shim.js b/shim.js index ec6b99e4e6e..e2b25ae230f 100644 --- a/shim.js +++ b/shim.js @@ -62,9 +62,7 @@ if (typeof localStorage !== 'undefined') { if (isTest) { (async () => { const { fetch: originalFetch } = global; - const MOCKTTP_URL = `http://${ - Platform.OS === 'ios' ? 'localhost' : '10.0.2.2' - }:${defaultMockPort}`; + const MOCKTTP_URL = `http://10.0.2.2:${defaultMockPort}`; const isMockServerAvailable = await originalFetch( `${MOCKTTP_URL}/health-check`, From e5d1e6270c8516c3809f186eca1bf725c83c581b Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Mon, 14 Oct 2024 15:16:16 -0600 Subject: [PATCH 06/16] Expose mock server port --- e2e/fixtures/utils.js | 5 +++++ e2e/helpers.js | 2 ++ shim.js | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/e2e/fixtures/utils.js b/e2e/fixtures/utils.js index 16493de98e0..d617b8f783d 100644 --- a/e2e/fixtures/utils.js +++ b/e2e/fixtures/utils.js @@ -1,6 +1,7 @@ import { DEFAULT_GANACHE_PORT } from '../../app/util/test/ganache'; import { DEFAULT_FIXTURE_SERVER_PORT } from './fixture-server'; import { DEFAULT_DAPP_SERVER_PORT } from './fixture-helper'; +import { defaultMockPort } from './../mockServer/mockUrlCollection'; function transformToValidPort(defaultPort, pid) { // Improve uniqueness by using a simple transformation @@ -28,3 +29,7 @@ export function getFixturesServerPort() { export function getLocalTestDappPort() { return getServerPort(DEFAULT_DAPP_SERVER_PORT); } + +export function getMockttpPort() { + return getServerPort(defaultMockPort); +} diff --git a/e2e/helpers.js b/e2e/helpers.js index 89c665fdec9..c3ae3dc864e 100644 --- a/e2e/helpers.js +++ b/e2e/helpers.js @@ -3,6 +3,7 @@ import { getFixturesServerPort, getGanachePort, getLocalTestDappPort, + getMockttpPort, } from './fixtures/utils'; import Utilities from './utils/Utilities'; @@ -276,6 +277,7 @@ export default class TestHelpers { await device.reverseTcpPort(getGanachePort()); await device.reverseTcpPort(getFixturesServerPort()); await device.reverseTcpPort(getLocalTestDappPort()); + await device.reverseTcpPort(getMockttpPort()); } } } diff --git a/shim.js b/shim.js index e2b25ae230f..ec6b99e4e6e 100644 --- a/shim.js +++ b/shim.js @@ -62,7 +62,9 @@ if (typeof localStorage !== 'undefined') { if (isTest) { (async () => { const { fetch: originalFetch } = global; - const MOCKTTP_URL = `http://10.0.2.2:${defaultMockPort}`; + const MOCKTTP_URL = `http://${ + Platform.OS === 'ios' ? 'localhost' : '10.0.2.2' + }:${defaultMockPort}`; const isMockServerAvailable = await originalFetch( `${MOCKTTP_URL}/health-check`, From ad3d5b161fe56fef29eaa6b439d79dfc0b669a55 Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Tue, 15 Oct 2024 10:34:39 -0600 Subject: [PATCH 07/16] Add portfinder to check that mockport is available --- e2e/mockServer/mockServer.js | 4 +++- package.json | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/e2e/mockServer/mockServer.js b/e2e/mockServer/mockServer.js index 6d188fb6007..e9e4ec50abc 100644 --- a/e2e/mockServer/mockServer.js +++ b/e2e/mockServer/mockServer.js @@ -1,6 +1,7 @@ /* eslint-disable no-console */ import { getLocal } from 'mockttp'; import { defaultMockPort } from './mockUrlCollection'; +import portfinder from 'portfinder'; const mockServer = getLocal(); @@ -11,7 +12,8 @@ export const startMockServer = async ({ port = defaultMockPort, }) => { if (!mockUrl) throw new Error('The mockUrl parameter is required'); - + await portfinder.setBasePort(port); + port = await portfinder.getPortPromise(); await mockServer.start(port); console.log(`Mockttp server running at http://localhost:${port}`); diff --git a/package.json b/package.json index 1b811292afe..56ea3c731b5 100644 --- a/package.json +++ b/package.json @@ -468,6 +468,7 @@ "nyc": "^15.1.0", "octonode": "0.10.2", "patch-package": "^6.2.2", + "portfinder": "^1.0.32", "prettier": "^2.2.1", "prettier-plugin-gherkin": "^1.1.1", "react-dom": "18.2.0", From fbc5d3207af59264a810088bc9642850d035ea63 Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Tue, 15 Oct 2024 12:04:51 -0600 Subject: [PATCH 08/16] Add mockPort const --- e2e/mockServer/mockServer.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e/mockServer/mockServer.js b/e2e/mockServer/mockServer.js index e9e4ec50abc..8e44abbd3c2 100644 --- a/e2e/mockServer/mockServer.js +++ b/e2e/mockServer/mockServer.js @@ -13,9 +13,9 @@ export const startMockServer = async ({ }) => { if (!mockUrl) throw new Error('The mockUrl parameter is required'); await portfinder.setBasePort(port); - port = await portfinder.getPortPromise(); - await mockServer.start(port); - console.log(`Mockttp server running at http://localhost:${port}`); + const mockPort = await portfinder.getPortPromise(); + await mockServer.start(mockPort); + console.log(`Mockttp server running at http://localhost:${mockPort}`); await mockServer .forGet('/health-check') From 2d118bd863f6c2e1b869e9c43fff1a30aac9fa0f Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Tue, 15 Oct 2024 14:32:03 -0600 Subject: [PATCH 09/16] Only run confirmations on android --- bitrise.yml | 14 +++++++------- e2e/jest.e2e.config.js | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bitrise.yml b/bitrise.yml index 40c4e621f3b..11307098173 100644 --- a/bitrise.yml +++ b/bitrise.yml @@ -132,17 +132,17 @@ stages: - android_e2e_build: {} run_smoke_e2e_ios_android_stage: workflows: - - run_ios_api_specs: {} - - run_tag_smoke_accounts_ios: {} - - run_tag_smoke_accounts_android: {} + # - run_ios_api_specs: {} + # - run_tag_smoke_accounts_ios: {} + # - run_tag_smoke_accounts_android: {} # - run_tag_smoke_assets_ios: {} - - run_tag_smoke_assets_android: {} - - run_tag_smoke_confirmations_ios: {} + # - run_tag_smoke_assets_android: {} + # - run_tag_smoke_confirmations_ios: {} - run_tag_smoke_confirmations_android: {} # - run_tag_smoke_swaps_ios: {} # - run_tag_smoke_swaps_android: {} - - run_tag_smoke_core_ios: {} - - run_tag_smoke_core_android: {} + # - run_tag_smoke_core_ios: {} + # - run_tag_smoke_core_android: {} build_regression_e2e_ios_android_stage: workflows: - ios_e2e_build: {} diff --git a/e2e/jest.e2e.config.js b/e2e/jest.e2e.config.js index af02599f215..b65787e1014 100644 --- a/e2e/jest.e2e.config.js +++ b/e2e/jest.e2e.config.js @@ -8,7 +8,7 @@ module.exports = { '/e2e/specs/*/*/*.spec.js', ], testTimeout: 250000, - maxWorkers: process.env.CI ? 3 : 1, + maxWorkers: 1, setupFilesAfterEnv: ['/e2e/init.js'], globalSetup: 'detox/runners/jest/globalSetup', globalTeardown: 'detox/runners/jest/globalTeardown', From c92bc115556c8d7b70a70857a647a9c86ad067ed Mon Sep 17 00:00:00 2001 From: Yande Date: Fri, 18 Oct 2024 12:10:32 +0100 Subject: [PATCH 10/16] added loggin and small modifications --- app/util/test/ganache.js | 3 +++ e2e/mockServer/mockServer.js | 2 +- e2e/specs/confirmations/advanced-gas-fees.spec.js | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/util/test/ganache.js b/app/util/test/ganache.js index 7a45fa35aef..e2fa0a5a0de 100644 --- a/app/util/test/ganache.js +++ b/app/util/test/ganache.js @@ -22,6 +22,7 @@ export default class Ganache { try { this._server = ganache.server(options); await this._server.listen(port); + console.log(`Ganache started on port ${port}`); } catch (error) { console.error(error); throw error; @@ -59,5 +60,7 @@ export default class Ganache { } await this._server.close(); this._server = undefined; + console.log(`Ganache server shutting down`); + } } diff --git a/e2e/mockServer/mockServer.js b/e2e/mockServer/mockServer.js index 8e44abbd3c2..6312fa18d2e 100644 --- a/e2e/mockServer/mockServer.js +++ b/e2e/mockServer/mockServer.js @@ -38,5 +38,5 @@ export const startMockServer = async ({ export const stopMockServer = async () => { await mockServer.stop(); - console.log('Mockttp server stopped'); + console.log('Mockttp server shutting down'); }; diff --git a/e2e/specs/confirmations/advanced-gas-fees.spec.js b/e2e/specs/confirmations/advanced-gas-fees.spec.js index fc7de34d9c6..0771e671e65 100644 --- a/e2e/specs/confirmations/advanced-gas-fees.spec.js +++ b/e2e/specs/confirmations/advanced-gas-fees.spec.js @@ -27,13 +27,14 @@ describe(SmokeConfirmations('Advanced Gas Fees and Priority Tests'), () => { let mockServer; beforeAll(async () => { jest.setTimeout(170000); + await TestHelpers.reverseServerPort(); + mockServer = await startMockServer({ // Configure mock server mockUrl: urls.suggestedGasApiGanache, responseCode: 200, responseBody }); - await TestHelpers.reverseServerPort(); }); afterAll(async () => { From 390347fc1cfe312b00c23d6d6377107350acb484 Mon Sep 17 00:00:00 2001 From: Yande Date: Sun, 20 Oct 2024 21:24:56 +0100 Subject: [PATCH 11/16] Update mockServer.js --- e2e/mockServer/mockServer.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/e2e/mockServer/mockServer.js b/e2e/mockServer/mockServer.js index 6312fa18d2e..42cd7a6cc2f 100644 --- a/e2e/mockServer/mockServer.js +++ b/e2e/mockServer/mockServer.js @@ -2,6 +2,7 @@ import { getLocal } from 'mockttp'; import { defaultMockPort } from './mockUrlCollection'; import portfinder from 'portfinder'; +import { Platform } from 'react-native'; const mockServer = getLocal(); @@ -28,8 +29,13 @@ export const startMockServer = async ({ await mockServer.forUnmatchedRequest().thenPassThrough({ beforeRequest: async ({ url, method }) => { - console.log(`Forwarding request to: ${method} ${url}`); - return { url: new URL(url).searchParams.get('url') || url }; + let newUrl = url; + // Check if Platform is Android and URL contains localhost + if (device.getPlatform() === 'android' && newUrl.includes('localhost')) { + newUrl = newUrl.replace('localhost', '10.0.2.2'); + } + console.log(`Forwarding request to: ${method} ${newUrl}`); + return { url: new URL(newUrl).searchParams.get('url') || newUrl }; }, }); From fcb151c7b4c13445e10036f08e16a23db38b2313 Mon Sep 17 00:00:00 2001 From: Yande Date: Sun, 20 Oct 2024 23:15:26 +0100 Subject: [PATCH 12/16] small change --- e2e/fixtures/fixture-helper.js | 1 + e2e/mockServer/mockServer.js | 30 +++++++++++++++++------------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/e2e/fixtures/fixture-helper.js b/e2e/fixtures/fixture-helper.js index 0bf98ec755c..44ee03c6bbc 100644 --- a/e2e/fixtures/fixture-helper.js +++ b/e2e/fixtures/fixture-helper.js @@ -12,6 +12,7 @@ import { device } from 'detox'; export const DEFAULT_DAPP_SERVER_PORT = 8085; + // While Appium is still in use it's necessary to check if getFixturesServerPort if defined and provide a fallback in case it's not. const getFixturesPort = typeof getFixturesServerPort === 'function' diff --git a/e2e/mockServer/mockServer.js b/e2e/mockServer/mockServer.js index 42cd7a6cc2f..f983aa4fad3 100644 --- a/e2e/mockServer/mockServer.js +++ b/e2e/mockServer/mockServer.js @@ -2,7 +2,6 @@ import { getLocal } from 'mockttp'; import { defaultMockPort } from './mockUrlCollection'; import portfinder from 'portfinder'; -import { Platform } from 'react-native'; const mockServer = getLocal(); @@ -27,17 +26,22 @@ export const startMockServer = async ({ .withQuery({ url: mockUrl }) .thenReply(responseCode, JSON.stringify(responseBody)); - await mockServer.forUnmatchedRequest().thenPassThrough({ - beforeRequest: async ({ url, method }) => { - let newUrl = url; - // Check if Platform is Android and URL contains localhost - if (device.getPlatform() === 'android' && newUrl.includes('localhost')) { - newUrl = newUrl.replace('localhost', '10.0.2.2'); - } - console.log(`Forwarding request to: ${method} ${newUrl}`); - return { url: new URL(newUrl).searchParams.get('url') || newUrl }; - }, - }); + await mockServer.forUnmatchedRequest().thenPassThrough({ + beforeRequest: async ({ url, method }) => { + const parsedUrl = new URL(url); + const returnUrl = parsedUrl.searchParams.get('url') || url; + + // Replace 'localhost' with the Android local IP + const updatedUrl = returnUrl.replace('localhost', '127.0.0.1'); + + // Log just the updated URL + console.log(`Updated URL: ${updatedUrl}`); + + return { url: updatedUrl }; + }, + }); + + return mockServer; }; @@ -45,4 +49,4 @@ export const startMockServer = async ({ export const stopMockServer = async () => { await mockServer.stop(); console.log('Mockttp server shutting down'); -}; +}; \ No newline at end of file From 55bb507183505b63ac892efe50c43bc1b3f20c34 Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Mon, 21 Oct 2024 12:57:31 -0600 Subject: [PATCH 13/16] Make the othr workflows available for bitrise --- bitrise.yml | 14 +++++++------- e2e/jest.e2e.config.js | 2 +- e2e/mockServer/mockServer.js | 17 +++++------------ 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/bitrise.yml b/bitrise.yml index 307ff1193d6..1fc61f98351 100644 --- a/bitrise.yml +++ b/bitrise.yml @@ -132,17 +132,17 @@ stages: - android_e2e_build: {} run_smoke_e2e_ios_android_stage: workflows: - # - run_ios_api_specs: {} - # - run_tag_smoke_accounts_ios: {} - # - run_tag_smoke_accounts_android: {} + - run_ios_api_specs: {} + - run_tag_smoke_accounts_ios: {} + - run_tag_smoke_accounts_android: {} # - run_tag_smoke_assets_ios: {} - # - run_tag_smoke_assets_android: {} - # - run_tag_smoke_confirmations_ios: {} + - run_tag_smoke_assets_android: {} + - run_tag_smoke_confirmations_ios: {} - run_tag_smoke_confirmations_android: {} # - run_tag_smoke_swaps_ios: {} # - run_tag_smoke_swaps_android: {} - # - run_tag_smoke_core_ios: {} - # - run_tag_smoke_core_android: {} + - run_tag_smoke_core_ios: {} + - run_tag_smoke_core_android: {} build_regression_e2e_ios_android_stage: workflows: - ios_e2e_build: {} diff --git a/e2e/jest.e2e.config.js b/e2e/jest.e2e.config.js index b65787e1014..af02599f215 100644 --- a/e2e/jest.e2e.config.js +++ b/e2e/jest.e2e.config.js @@ -8,7 +8,7 @@ module.exports = { '/e2e/specs/*/*/*.spec.js', ], testTimeout: 250000, - maxWorkers: 1, + maxWorkers: process.env.CI ? 3 : 1, setupFilesAfterEnv: ['/e2e/init.js'], globalSetup: 'detox/runners/jest/globalSetup', globalTeardown: 'detox/runners/jest/globalTeardown', diff --git a/e2e/mockServer/mockServer.js b/e2e/mockServer/mockServer.js index f983aa4fad3..73c89d97ac8 100644 --- a/e2e/mockServer/mockServer.js +++ b/e2e/mockServer/mockServer.js @@ -28,20 +28,13 @@ export const startMockServer = async ({ await mockServer.forUnmatchedRequest().thenPassThrough({ beforeRequest: async ({ url, method }) => { - const parsedUrl = new URL(url); - const returnUrl = parsedUrl.searchParams.get('url') || url; - - // Replace 'localhost' with the Android local IP - const updatedUrl = returnUrl.replace('localhost', '127.0.0.1'); - - // Log just the updated URL - console.log(`Updated URL: ${updatedUrl}`); - + const returnUrl = new URL(url).searchParams.get('url') || url; + const updatedUrl = device.getPlatform() === 'android' ? returnUrl.replace('localhost', '127.0.0.1') : returnUrl; + + console.log(`Mock proxy forwarding request to: ${updatedUrl}`); return { url: updatedUrl }; }, }); - - return mockServer; }; @@ -49,4 +42,4 @@ export const startMockServer = async ({ export const stopMockServer = async () => { await mockServer.stop(); console.log('Mockttp server shutting down'); -}; \ No newline at end of file +}; From f1119f98662f706a350fc09147fed431a8e32ee7 Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Mon, 21 Oct 2024 16:23:32 -0600 Subject: [PATCH 14/16] Reset AmountView tapCurrencySwitch method --- bitrise.yml | 12 ++++++------ e2e/pages/Send/AmountView.js | 8 ++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/bitrise.yml b/bitrise.yml index 1fc61f98351..a63c29f2ac2 100644 --- a/bitrise.yml +++ b/bitrise.yml @@ -132,17 +132,17 @@ stages: - android_e2e_build: {} run_smoke_e2e_ios_android_stage: workflows: - - run_ios_api_specs: {} - - run_tag_smoke_accounts_ios: {} - - run_tag_smoke_accounts_android: {} + #- run_ios_api_specs: {} + #- run_tag_smoke_accounts_ios: {} + #- run_tag_smoke_accounts_android: {} # - run_tag_smoke_assets_ios: {} - - run_tag_smoke_assets_android: {} + #- run_tag_smoke_assets_android: {} - run_tag_smoke_confirmations_ios: {} - run_tag_smoke_confirmations_android: {} # - run_tag_smoke_swaps_ios: {} # - run_tag_smoke_swaps_android: {} - - run_tag_smoke_core_ios: {} - - run_tag_smoke_core_android: {} + #- run_tag_smoke_core_ios: {} + #- run_tag_smoke_core_android: {} build_regression_e2e_ios_android_stage: workflows: - ios_e2e_build: {} diff --git a/e2e/pages/Send/AmountView.js b/e2e/pages/Send/AmountView.js index bcac9f257e4..4346289df28 100644 --- a/e2e/pages/Send/AmountView.js +++ b/e2e/pages/Send/AmountView.js @@ -6,6 +6,10 @@ import { } from '../../selectors/SendFlow/AmountView.selectors'; class AmountView { + get currencySwitch() { + return Matchers.getElementByID(AmountViewSelectorsIDs.CURRENCY_SWITCH); + } + get title() { return Matchers.getElementByText(AmountViewSelectorsText.SCREEN_TITLE); } @@ -29,5 +33,9 @@ class AmountView { ? await Gestures.typeTextAndHideKeyboard(this.amountInputField, amount) : await Gestures.replaceTextInField(this.amountInputField, amount); } + + async tapCurrencySwitch() { + await Gestures.waitAndTap(this.currencySwitch); + } } export default new AmountView(); From 62eddd835179846139ef0fb61b236d0133e204a8 Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Mon, 21 Oct 2024 16:29:50 -0600 Subject: [PATCH 15/16] Restore bitrise file --- bitrise.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bitrise.yml b/bitrise.yml index a63c29f2ac2..1fc61f98351 100644 --- a/bitrise.yml +++ b/bitrise.yml @@ -132,17 +132,17 @@ stages: - android_e2e_build: {} run_smoke_e2e_ios_android_stage: workflows: - #- run_ios_api_specs: {} - #- run_tag_smoke_accounts_ios: {} - #- run_tag_smoke_accounts_android: {} + - run_ios_api_specs: {} + - run_tag_smoke_accounts_ios: {} + - run_tag_smoke_accounts_android: {} # - run_tag_smoke_assets_ios: {} - #- run_tag_smoke_assets_android: {} + - run_tag_smoke_assets_android: {} - run_tag_smoke_confirmations_ios: {} - run_tag_smoke_confirmations_android: {} # - run_tag_smoke_swaps_ios: {} # - run_tag_smoke_swaps_android: {} - #- run_tag_smoke_core_ios: {} - #- run_tag_smoke_core_android: {} + - run_tag_smoke_core_ios: {} + - run_tag_smoke_core_android: {} build_regression_e2e_ios_android_stage: workflows: - ios_e2e_build: {} From cbde0222ad4369bf8ef6d03896e4d96355372ff3 Mon Sep 17 00:00:00 2001 From: SamuelSalas Date: Mon, 21 Oct 2024 16:30:55 -0600 Subject: [PATCH 16/16] Remove space --- e2e/fixtures/fixture-helper.js | 1 - 1 file changed, 1 deletion(-) diff --git a/e2e/fixtures/fixture-helper.js b/e2e/fixtures/fixture-helper.js index 44ee03c6bbc..0bf98ec755c 100644 --- a/e2e/fixtures/fixture-helper.js +++ b/e2e/fixtures/fixture-helper.js @@ -12,7 +12,6 @@ import { device } from 'detox'; export const DEFAULT_DAPP_SERVER_PORT = 8085; - // While Appium is still in use it's necessary to check if getFixturesServerPort if defined and provide a fallback in case it's not. const getFixturesPort = typeof getFixturesServerPort === 'function'