@coinbase/onchaintestkit
Version:
End-to-end testing toolkit for blockchain applications, powered by Playwright
114 lines (113 loc) • 4.56 kB
JavaScript
;
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;