UNPKG

e2ed

Version:

E2E testing framework over Playwright

56 lines (55 loc) 3.07 kB
"use strict"; 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 }; });