UNPKG

e2ed

Version:

E2E testing framework over Playwright

56 lines (55 loc) 2.66 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 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) => { 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; } return predicate(response); }; }; exports.getWaitForResponsePredicate = getWaitForResponsePredicate;