UNPKG

e2ed

Version:

E2E testing framework over Playwright

57 lines (56 loc) 3.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.waitForResponseToRoute = 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 waitForResponse_1 = require("./waitForResponse"); /** * Waits for some response (from browser) to the route filtered by route parameters predicate. * If the function runs longer than the specified timeout, it is rejected. */ exports.waitForResponseToRoute = (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)().waitForResponseTimeout; 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 response to route "${Route.name}" with timeout ${timeoutWithUnits}`, { predicate, trigger }, 5 /* LogEventType.InternalAction */); } const sentinelValue = Symbol('sentinel value'); let routeParams = sentinelValue; const predicateForResponse = async (response) => { const { request } = response; const maypeRouteWithRouteParams = (0, getRouteInstanceFromUrl_1.getRouteInstanceFromUrl)(request.url, Route); if (maypeRouteWithRouteParams === undefined) { return false; } const { routeParams: currentRouteParams } = maypeRouteWithRouteParams; const isRequestMatched = await predicate(currentRouteParams, response); if (isRequestMatched !== true) { return false; } (0, asserts_1.assertValueIsTrue)(routeParams === sentinelValue, 'routeParams was not setted'); routeParams = currentRouteParams; return true; }; const response = await (0, waitForResponse_1.waitForResponse)(predicateForResponse, trigger, { skipLogs: true, timeout }); if (routeParams === sentinelValue) { throw new error_1.E2edError('routeParams is not setted', { predicate, response }); } const waitWithUnits = (0, getDurationWithUnits_1.getDurationWithUnits)(Date.now() - startTimeInMs); if (finalOptions?.skipLogs !== true) { (0, log_1.log)(`Have waited for response to route "${Route.name}" for ${waitWithUnits}`, { predicate, response, routeParams, timeoutWithUnits, trigger }, 7 /* LogEventType.InternalCore */); } return { response, routeParams }; });