UNPKG

e2ed

Version:

E2E testing framework over Playwright

63 lines (62 loc) 2.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getWaitForResponsePredicate = void 0; const isPageNavigatingNow_1 = require("../../context/isPageNavigatingNow"); const navigationDelay_1 = require("../../context/navigationDelay"); const config_1 = require("../config"); const error_1 = require("../error"); const object_1 = require("../object"); const promise_1 = require("../promise"); const requestHooks_1 = require("../requestHooks"); const maxNavigationDelay = 3_000; const navigationDelayAfterLastEventInMs = 300; /** * Get internal predicate for `waitForResponse` function. * @internal */ const getWaitForResponsePredicate = (predicate, includeNavigationRequest, rejectTimeout) => { const { testIdleTimeout } = (0, config_1.getFullPackConfig)(); const navigationDelay = (0, navigationDelay_1.getNavigationDelay)(); return async (playwrightResponse) => { const isPageNavigatingNow = (0, isPageNavigatingNow_1.getIsPageNavigatingNow)(); if (!includeNavigationRequest && isPageNavigatingNow) { return false; } if (navigationDelay.promise === undefined) { const { promiseWithTimeout, resolve } = (0, promise_1.getPromiseWithResolveAndReject)(testIdleTimeout); void (0, object_1.setReadonlyProperty)(navigationDelay, 'promise', promiseWithTimeout); (0, object_1.setReadonlyProperty)(navigationDelay, 'resolve', resolve); } (0, object_1.setReadonlyProperty)(navigationDelay, 'reasonsCount', navigationDelay.reasonsCount + 1); let isDecreased = false; const decreaseReasonsCount = () => { if (isDecreased) { return; } isDecreased = true; (0, object_1.setReadonlyProperty)(navigationDelay, 'reasonsCount', navigationDelay.reasonsCount - 1); if (navigationDelay.reasonsCount <= 0) { const { resolve } = navigationDelay; void (0, object_1.setReadonlyProperty)(navigationDelay, 'promise', undefined); (0, object_1.setReadonlyProperty)(navigationDelay, 'resolve', undefined); resolve?.(); } }; const response = await Promise.race([ (0, requestHooks_1.getResponseFromPlaywrightResponse)(playwrightResponse), (0, promise_1.getTimeoutPromise)(maxNavigationDelay).then(decreaseReasonsCount), ]); setTimeout(decreaseReasonsCount, navigationDelayAfterLastEventInMs); if (response === undefined) { return false; } try { const result = await predicate(response); return result; } catch (cause) { throw new error_1.E2edError('waitForResponse predicate threw an exception', { cause, rejectTimeout }); } }; }; exports.getWaitForResponsePredicate = getWaitForResponsePredicate;