vega-frontend-monorepo/libs/cypress/src/lib/mock-rest.ts

86 lines
2.0 KiB
TypeScript

import type { RouteHandler } from 'cypress/types/net-stubbing';
import type { CyHttpMessages } from 'cypress/types/net-stubbing';
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Cypress {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
interface Chainable<Subject> {
mockWallet(handler: RouteHandler): void;
}
}
}
const hasMethod = (req: CyHttpMessages.IncomingHttpRequest, method: string) => {
const { body } = req;
return 'method' in body && body.method === method;
};
export function addMockWalletCommand() {
Cypress.Commands.add('mockWallet', (handler: RouteHandler): void => {
cy.intercept('POST', '**/api/v2/requests', handler).as('walletReq');
});
}
export const aliasWalletQuery = (
req: CyHttpMessages.IncomingHttpRequest,
method: string,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
data?: any
) => {
const body = {
jsonrpc: '2.0',
id: '0',
result: data,
};
if (hasMethod(req, method)) {
req.alias = method;
if (data !== undefined) {
req.reply({
statusCode: 200,
body: body,
});
}
}
};
export const aliasWalletConnectQuery = (
req: CyHttpMessages.IncomingHttpRequest,
token: string
) => {
if (hasMethod(req, 'client.connect_wallet')) {
req.alias = 'client.connect_wallet';
req.reply({
statusCode: 200,
headers: {
'Access-Control-Expose-Headers': 'Authorization',
Authorization: `VWT ${token}`,
},
body: {
jsonrpc: '2.0',
id: '0',
},
});
}
};
export const aliasWalletConnectWithUserError = (
req: CyHttpMessages.IncomingHttpRequest
) => {
if (hasMethod(req, 'client.connect_wallet')) {
req.alias = 'client.connect_wallet';
req.reply({
statusCode: 400,
body: {
jsonrpc: '2.0',
error: {
code: 3001,
data: 'the user rejected the wallet connection',
message: 'User error',
},
id: '0',
},
});
}
};