e2ed
Version:
E2E testing framework over Playwright
56 lines (55 loc) • 2.66 kB
JavaScript
;
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;