UNPKG

request-mocking-protocol

Version:
48 lines 1.87 kB
"use strict"; /** * Playwright interceptor. * Used in Playwright tests to mock page requests with the same syntax as for server requests. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.setupPlaywrightInterceptor = setupPlaywrightInterceptor; const utils_1 = require("../request-matcher/utils"); const response_builder_1 = require("../response-builder"); async function setupPlaywrightInterceptor(page, mockClient) { await page.route('**', async (route) => { const request = buildFetchRequest(route.request()); const matchResult = await (0, utils_1.matchSchemas)(request, mockClient.schemas); if (!matchResult) return route.fallback(); const { body, headers, status } = await new response_builder_1.ResponseBuilder(matchResult, { bypass: (req) => bypass(req, route), }).build(); await route.fulfill({ status, headers: Object.fromEntries(headers), body: body instanceof ArrayBuffer ? Buffer.from(body) : (body ?? undefined), // route.fulfill() doesn't accept statusText }); }); } function buildFetchRequest(pwRequest) { return new Request(pwRequest.url(), { method: pwRequest.method(), headers: pwRequest.headers(), body: pwRequest.postDataBuffer(), }); } async function bypass(req, route) { const pwResponse = await route.fetch({ url: req.url, headers: Object.fromEntries(req.headers), postData: req.body ? Buffer.from(await req.arrayBuffer()) : undefined, }); return { status: pwResponse.status(), statusText: pwResponse.statusText(), headers: new Headers(pwResponse.headers()), arrayBuffer: () => pwResponse.body(), json: () => pwResponse.json(), }; } //# sourceMappingURL=playwright.js.map