playwright-fluent
Version:
Fluent API around playwright
87 lines (86 loc) • 2.72 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.onRequestToRespondWith = void 0;
function serializeBody(body) {
if (typeof body === 'string') {
return body;
}
try {
return JSON.stringify(body, null, 2);
}
catch (error) {
const buffer = body;
return buffer;
}
}
function buildPlaywrightResponseWith(mockedResponse) {
return {
headers: buildHeadersFrom(mockedResponse),
contentType: buildContentTypeFrom(mockedResponse),
status: mockedResponse.status || 200,
body: serializeBody(mockedResponse.body),
};
}
function buildHeadersFrom(mockedResponse) {
const headers = {
...mockedResponse.headers,
};
if (!hasAccessControlAllowCredentialsHeader(headers)) {
headers['Access-Control-Allow-Credentials'] = 'true';
}
if (!hasAccessControlAllowOriginHeader(headers)) {
headers['Access-Control-Allow-Origin'] = '*';
}
return headers;
}
function hasAccessControlAllowCredentialsHeader(headers) {
if (headers['access-control-allow-credentials']) {
return true;
}
if (headers['Access-Control-Allow-Credentials']) {
return true;
}
return false;
}
function hasAccessControlAllowOriginHeader(headers) {
if (headers['access-control-allow-origin']) {
return true;
}
if (headers['Access-Control-Allow-Origin']) {
return true;
}
return false;
}
function buildContentTypeFrom(mockedResponse) {
if (mockedResponse.contentType) {
return mockedResponse.contentType;
}
if (typeof mockedResponse.body === 'string') {
return 'text/plain';
}
return 'application/json';
}
async function onRequestToRespondWith(url, options, response, page) {
if (!page) {
throw new Error(`Cannot intercept requests to '${url}' because no browser has been launched`);
}
await page.route((uri) => {
return uri.toString().includes(url);
}, (route, request) => {
const requestMethod = request.method();
if (options && typeof options.method === 'string' && options.method !== requestMethod) {
route.continue();
return;
}
if (options &&
typeof options.bypassPredicate === 'function' &&
options.bypassPredicate(request)) {
route.continue();
return;
}
const mockedResponse = typeof response === 'function' ? response(request) : response;
const playwrightResponse = buildPlaywrightResponseWith(mockedResponse);
route.fulfill(playwrightResponse);
});
}
exports.onRequestToRespondWith = onRequestToRespondWith;
;