e2ed
Version:
E2E testing framework over Playwright
56 lines (55 loc) • 3.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.waitForRequestToRoute = void 0;
const asserts_1 = require("../../utils/asserts");
const config_1 = require("../../utils/config");
const error_1 = require("../../utils/error");
const fn_1 = require("../../utils/fn");
const getDurationWithUnits_1 = require("../../utils/getDurationWithUnits");
const getRouteInstanceFromUrl_1 = require("../../utils/getRouteInstanceFromUrl");
const log_1 = require("../../utils/log");
const waitForRequest_1 = require("./waitForRequest");
/**
* Waits for some request (from browser) to the route filtered by route parameters predicate.
* If the function runs longer than the specified timeout, it is rejected.
*/
exports.waitForRequestToRoute = (async (Route, triggerOrOptions, options) => {
const startTimeInMs = Date.now();
const trigger = typeof triggerOrOptions === 'function' ? triggerOrOptions : undefined;
const finalOptions = typeof triggerOrOptions === 'function' ? options : (triggerOrOptions ?? options);
const { predicate = () => true } = finalOptions ?? {};
const timeout = finalOptions?.timeout ?? (0, config_1.getFullPackConfig)().waitForRequestTimeout;
const timeoutWithUnits = (0, getDurationWithUnits_1.getDurationWithUnits)(timeout);
(0, fn_1.setCustomInspectOnFunction)(predicate);
if (trigger !== undefined) {
(0, fn_1.setCustomInspectOnFunction)(trigger);
}
if (finalOptions?.skipLogs !== true) {
(0, log_1.log)(`Set wait for request to route "${Route.name}" with timeout ${timeoutWithUnits}`, { predicate, trigger }, 5 /* LogEventType.InternalAction */);
}
const sentinelValue = Symbol('sentinel value');
let routeParams = sentinelValue;
const predicateForRequest = async (request) => {
const maypeRouteWithRouteParams = (0, getRouteInstanceFromUrl_1.getRouteInstanceFromUrl)(request.url, Route);
if (maypeRouteWithRouteParams === undefined) {
return false;
}
const { routeParams: currentRouteParams } = maypeRouteWithRouteParams;
const isRequestMatched = await predicate(currentRouteParams, request);
if (isRequestMatched !== true) {
return false;
}
(0, asserts_1.assertValueIsTrue)(routeParams === sentinelValue, 'routeParams was not setted');
routeParams = currentRouteParams;
return true;
};
const request = await (0, waitForRequest_1.waitForRequest)(predicateForRequest, trigger, { skipLogs: true, timeout });
if (routeParams === sentinelValue) {
throw new error_1.E2edError('routeParams is not setted', { predicate, request });
}
const waitWithUnits = (0, getDurationWithUnits_1.getDurationWithUnits)(Date.now() - startTimeInMs);
if (finalOptions?.skipLogs !== true) {
(0, log_1.log)(`Have waited for request to route "${Route.name}" for ${waitWithUnits}`, { predicate, request, routeParams, timeoutWithUnits, trigger }, 7 /* LogEventType.InternalCore */);
}
return { request, routeParams };
});