From bc17d662846b12a106e1431bc38fb9f14553f5fd Mon Sep 17 00:00:00 2001 From: Yande Date: Tue, 15 Oct 2024 15:08:43 +0100 Subject: [PATCH] Multple mock events --- e2e/mockServer/mockServer.js | 32 ++++++++++--------- e2e/specs/mock-data/mock-events.js | 20 ++++++++++++ .../mock-data/mock-responses/suggestGasApi.js | 18 +++++++++++ .../mock-data}/mockUrlCollection.json | 0 .../mock-specs/suggestedGasApi.mock.spec.js | 11 +++---- 5 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 e2e/specs/mock-data/mock-events.js create mode 100644 e2e/specs/mock-data/mock-responses/suggestGasApi.js rename e2e/{mockServer => specs/mock-data}/mockUrlCollection.json (100%) diff --git a/e2e/mockServer/mockServer.js b/e2e/mockServer/mockServer.js index 590f3c29e53..1fc19d6b208 100644 --- a/e2e/mockServer/mockServer.js +++ b/e2e/mockServer/mockServer.js @@ -3,28 +3,30 @@ import portfinder from 'portfinder'; const mockServer = getLocal(); -export const startMockServer = async ({ - mockUrl, - responseCode = 500, - responseBody = {}, - port, -}) => { - if (!mockUrl) throw new Error('The mockUrl parameter is required'); - +export const startMockServer = async (events, port) => { // Find an available port port = port || await portfinder.getPortPromise(); await mockServer.start(port); console.log(`Mockttp server running at http://localhost:${port}`); - await mockServer - .forGet('/health-check') - .thenReply(200, 'Mock server is running'); + // Health check endpoint + await mockServer.forGet('/health-check').thenReply(200, 'Mock server is running'); + + // Set up mock events + for (const event of events) { + const { mockUrl, responseCode, responseBodyFile } = event; + let responseBody; + + // Dynamically import the response body from the file + if (responseBodyFile) { + responseBody = (await import(responseBodyFile)).default; // Adjust based on your exports + } else { + responseBody = {}; + } - await mockServer - .forGet('/proxy') - .withQuery({ url: mockUrl }) - .thenReply(responseCode, JSON.stringify(responseBody)); + await mockServer.forGet(mockUrl).thenReply(responseCode, JSON.stringify(responseBody)); + } await mockServer.forUnmatchedRequest().thenPassThrough({ beforeRequest: async ({ url, method }) => { diff --git a/e2e/specs/mock-data/mock-events.js b/e2e/specs/mock-data/mock-events.js new file mode 100644 index 00000000000..8ed4a05df0c --- /dev/null +++ b/e2e/specs/mock-data/mock-events.js @@ -0,0 +1,20 @@ +export const mockEvents = { + suggestedGasApiSuccessResponse: { + mockUrl: 'https://gas.api.cx.metamask.io/networks/1/suggestedGasFees', + responseCode: 200, + responseBodyFile: '../responseBodies/suggestedGasApi', + responseType: 'success', + }, + suggestedGasApiErrorResponse: { + mockUrl: 'https://gas.api.cx.metamask.io/networks/1/suggestedGasFees', + responseCode: 500, + responseBodyFile: '../responseBodies/suggestedGasApi', + responseType: 'error', + }, + suggestedGasApiSlowResponse: { + mockUrl: 'https://gas.api.cx.metamask.io/networks/1/suggestedGasFees', + responseCode: 200, + responseBodyFile: '../responseBodies/suggestedGasApi', + responseType: 'slowResponse', + }, + }; diff --git a/e2e/specs/mock-data/mock-responses/suggestGasApi.js b/e2e/specs/mock-data/mock-responses/suggestGasApi.js new file mode 100644 index 00000000000..3dcea136f76 --- /dev/null +++ b/e2e/specs/mock-data/mock-responses/suggestGasApi.js @@ -0,0 +1,18 @@ +export const success = { + success: true, + data: { + gasFee: '100 Gwei', + }, +}; +export const error = { + error: 'Internal server error', + message: 'Unable to fetch suggested gas fees.', +}; +export const slowResponse = { + success: true, + data: { + gasFee: '150 Gwei', + }, + delay: 5000, // Simulate delay +}; + \ No newline at end of file diff --git a/e2e/mockServer/mockUrlCollection.json b/e2e/specs/mock-data/mockUrlCollection.json similarity index 100% rename from e2e/mockServer/mockUrlCollection.json rename to e2e/specs/mock-data/mockUrlCollection.json diff --git a/e2e/specs/mock-specs/suggestedGasApi.mock.spec.js b/e2e/specs/mock-specs/suggestedGasApi.mock.spec.js index 47f54cd5b59..0a04a65b82f 100644 --- a/e2e/specs/mock-specs/suggestedGasApi.mock.spec.js +++ b/e2e/specs/mock-specs/suggestedGasApi.mock.spec.js @@ -16,8 +16,9 @@ import Accounts from '../../../wdio/helpers/Accounts.js'; import { withFixtures } from '../../fixtures/fixture-helper.js'; import FixtureBuilder from '../../fixtures/fixture-builder.js'; import TestHelpers from '../../helpers.js'; -import { urls } from '../../mockServer/mockUrlCollection.json'; +import { urls } from '../mock-data/mockUrlCollection.json'; import SuccessImportAccountView from '../../pages/importAccount/SuccessImportAccountView.js'; +import { mockEvents } from '../mock-data/mock-events.js'; describe(SmokeCore('Mock suggestedGasApi fallback to legacy gas endpoint when EIP1559 endpoint is down'), () => { let mockServer; @@ -25,11 +26,9 @@ describe(SmokeCore('Mock suggestedGasApi fallback to legacy gas endpoint when E jest.setTimeout(150000); await TestHelpers.reverseServerPort(); - mockServer = await startMockServer({ // Configure mock server - mockUrl: urls.suggestedGasApiMainnet, - responseCode: 500, - responseBody: { error: 'Internal server error' }, - }); + mockServer = await startMockServer([ + mockEvents.suggestedGasApiSuccessResponse // Multiple events can be passed through this + ]); }); // Because we stop the server within the test, a try catch block here would stop the server if the test fails midway