e2ed
Version:
E2E testing framework over Playwright
63 lines (62 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.setHeadersAndNavigateToUrl = void 0;
const node_async_hooks_1 = require("node:async_hooks");
const internal_1 = require("../constants/internal");
const step_1 = require("../step");
const useContext_1 = require("../useContext");
const asserts_1 = require("../utils/asserts");
const config_1 = require("../utils/config");
const generalLog_1 = require("../utils/generalLog");
const headers_1 = require("../utils/headers");
const navigateToUrl_1 = require("./navigateToUrl");
/**
* Navigates to the `url` and map custom response and request headers.
*/
const setHeadersAndNavigateToUrl = async (url, { mapRequestHeaders, mapResponseHeaders, skipLogs = false }, navigateToUrlOptions) => {
let navigationReturn;
const timeout = navigateToUrlOptions?.timeout ?? (0, config_1.getFullPackConfig)().navigationTimeout;
await (0, step_1.step)(`Navigate to ${url} and map headers`, async () => {
let requestHeaders;
let responseHeaders;
const page = (0, useContext_1.getPlaywrightPage)();
await page.route(url, node_async_hooks_1.AsyncLocalStorage.bind(async (route) => {
if (mapResponseHeaders === undefined) {
return route.fallback();
}
try {
const response = await route.fetch({ timeout });
const headers = response.headers();
(0, headers_1.applyHeadersMapper)(headers, mapResponseHeaders);
responseHeaders = headers;
return route.fulfill({ headers, response });
}
catch (error) {
(0, generalLog_1.generalLog)(`Caught an error when fetching route by url "${url}"`, {
error: String(error),
});
return route.fallback();
}
}), { times: 1 });
if (mapRequestHeaders !== undefined) {
await page.route(url, node_async_hooks_1.AsyncLocalStorage.bind(async (route, request) => {
const headers = request.headers();
(0, headers_1.applyHeadersMapper)(headers, mapRequestHeaders);
requestHeaders = headers;
await route.fallback({ headers });
}), { times: 1 });
}
navigationReturn = await (0, navigateToUrl_1.navigateToUrl)(url, { skipLogs: true, ...navigateToUrlOptions });
return { requestHeaders, responseHeaders };
}, {
skipLogs,
timeout: timeout + internal_1.ADDITIONAL_STEP_TIMEOUT,
type: 5 /* LogEventType.InternalAction */,
});
(0, asserts_1.assertValueIsDefined)(navigationReturn, 'navigationReturn is defined', {
navigateToUrlOptions,
url,
});
return navigationReturn;
};
exports.setHeadersAndNavigateToUrl = setHeadersAndNavigateToUrl;