@coinbase/onchaintestkit
Version:
End-to-end testing toolkit for blockchain applications, powered by Playwright
107 lines (106 loc) • 4.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoinbaseFixturesBuilder = CoinbaseFixturesBuilder;
const test_1 = require("@playwright/test");
const _1 = require(".");
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 sharedCoinbasePage;
function CoinbaseFixturesBuilder(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,
_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 { coinbaseContext, coinbasePage } = await _1.CoinbaseWallet.initialize(currentContext, _contextPath, walletConfig);
sharedCoinbasePage = coinbasePage;
await use(coinbaseContext);
await coinbaseContext.close();
}
catch (error) {
console.error("Error in context fixture:", error);
throw error;
}
},
coinbasePage: async ({ context: _ }, use) => {
await use(sharedCoinbasePage);
},
extensionId: async ({ context }, use) => {
try {
const extensionId = await (0, extensionManager_1.getExtensionId)(context, "Coinbase Wallet extension");
await use(extensionId);
}
catch (error) {
console.error("Error in extensionId fixture:", error);
throw error;
}
},
coinbase: [
async ({ context, extensionId }, use) => {
try {
const coinbase = new _1.CoinbaseWallet(walletConfig, context, sharedCoinbasePage, extensionId);
await use(coinbase);
}
catch (error) {
console.error("Error in coinbase fixture:", error);
throw error;
}
},
{ scope: "test", auto: true },
],
setupWallet: [
async ({ coinbase, node }, use) => {
try {
console.log("Running wallet setup...");
await walletConfig.walletSetup(coinbase, {
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;
}
},
});
}