UNPKG

@coinbase/onchaintestkit

Version:

End-to-end testing toolkit for blockchain applications, powered by Playwright

114 lines (113 loc) 4.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MetaMaskFixturesBuilder = void 0; const test_1 = require("@playwright/test"); const _1 = require("."); const SmartContractManager_1 = require("../../contracts/SmartContractManager"); const LocalNodeManager_1 = require("../../node/LocalNodeManager"); const createTempDir_1 = require("../../utils/createTempDir"); const extensionManager_1 = require("../../utils/extensionManager"); const removeTempDir_1 = require("../../utils/removeTempDir"); let sharedMetamaskPage; const MetaMaskFixturesBuilder = (walletConfig, nodeConfig) => { return test_1.test.extend({ // Add node fixture that will start before any wallet setup node: nodeConfig ? [ async ({}, use) => { try { const node = new LocalNodeManager_1.LocalNodeManager(nodeConfig); await node.start(); console.log(`Node is ready on port ${node.port}`); await use(node); console.log("Node stopping..."); await node.stop(); } catch (error) { console.error("Error in node fixture:", error); throw error; } }, { scope: "test", auto: true }, ] : undefined, smartContractManager: async ({ node }, use) => { const smartContractManager = new SmartContractManager_1.SmartContractManager(process.env.E2E_CONTRACT_PROJECT_ROOT || ""); await smartContractManager.initialize(node); await use(smartContractManager); }, _contextPath: async ({}, use, testInfo) => { const contextPath = await (0, createTempDir_1.createTempDir)(testInfo.testId); await use(contextPath); const error = await (0, removeTempDir_1.removeTempDir)(contextPath); if (error) { console.error(error); } }, context: async ({ context: currentContext, _contextPath }, use) => { try { const { metamaskContext, metamaskPage } = await _1.MetaMask.initialize(currentContext, _contextPath, walletConfig); sharedMetamaskPage = metamaskPage; await use(metamaskContext); await metamaskContext.close(); } catch (error) { console.error("Error in context fixture:", error); throw error; } }, metamaskPage: async ({ context: _ }, use) => { await use(sharedMetamaskPage); }, extensionId: async ({ context }, use) => { try { const extensionId = await (0, extensionManager_1.getExtensionId)(context, "MetaMask"); await use(extensionId); } catch (error) { console.error("Error in extensionId fixture:", error); throw error; } }, metamask: [ async ({ context, extensionId }, use) => { try { const metamask = new _1.MetaMask(walletConfig, context, sharedMetamaskPage, extensionId); await use(metamask); } catch (error) { console.error("Error in metamask fixture:", error); throw error; } }, { scope: "test", auto: true }, ], setupWallet: [ async ({ metamask, node }, use) => { try { console.log("Running wallet setup..."); await walletConfig.walletSetup(metamask, { localNodePort: node.port, }); await use(null); } catch (error) { console.error("Error in setupWallet fixture:", error); throw error; } }, { scope: "test", auto: true }, ], page: async ({ page }, use) => { try { await page.goto("/"); await use(page); } catch (error) { console.error("Error in page fixture:", error); throw error; } }, }); }; exports.MetaMaskFixturesBuilder = MetaMaskFixturesBuilder;