UNPKG

e2ed

Version:

E2E testing framework over Playwright

76 lines (75 loc) 5.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.waitForAllRequestsComplete = void 0; const testRunPromise_1 = require("../../context/testRunPromise"); const waitForEventsState_1 = require("../../context/waitForEventsState"); 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 log_1 = require("../../utils/log"); const object_1 = require("../../utils/object"); const promise_1 = require("../../utils/promise"); const waitForEvents_1 = require("../../utils/waitForEvents"); /** * Waits for the complete of all requests that satisfy the request predicate. * If the function runs longer than the specified timeout, it is rejected. * If there are no new requests for more than `maxIntervalBetweenRequestsInMs` milliseconds, * the function resolves successfully. */ const waitForAllRequestsComplete = async (predicate, { maxIntervalBetweenRequestsInMs, timeout } = {}) => { const startTimeInMs = Date.now(); (0, fn_1.setCustomInspectOnFunction)(predicate); const { allRequestsCompletePredicates, hashOfNotCompleteRequests } = (0, waitForEventsState_1.getWaitForEventsState)(); const { waitForAllRequestsComplete: defaultTimeouts } = (0, config_1.getFullPackConfig)(); const resolveTimeout = maxIntervalBetweenRequestsInMs ?? defaultTimeouts.maxIntervalBetweenRequestsInMs; const maxIntervalBetweenRequests = (0, getDurationWithUnits_1.getDurationWithUnits)(resolveTimeout); const rejectTimeout = timeout ?? defaultTimeouts.timeout; const rejectTimeoutWithUnits = (0, getDurationWithUnits_1.getDurationWithUnits)(rejectTimeout); (0, log_1.log)(`Set wait for all requests complete with timeout ${rejectTimeoutWithUnits}`, { maxIntervalBetweenRequests, predicate }, 7 /* LogEventType.InternalCore */); const requestHookContextIds = await (0, waitForEvents_1.getInitialIdsForAllRequestsCompletePredicate)(hashOfNotCompleteRequests, predicate); const { clearRejectTimeout, promiseWithTimeout, reject, resolve, setRejectTimeoutFunction } = (0, promise_1.getPromiseWithResolveAndReject)(rejectTimeout); const allRequestsCompletePredicateWithPromise = { allRequestsCompleteTimeInMs: 0, clearResolveTimeout: () => { }, predicate, reject, requestHookContextIds, setResolveTimeout: () => { }, }; const testRunPromise = (0, testRunPromise_1.getTestRunPromise)(); void testRunPromise.then(clearRejectTimeout); setRejectTimeoutFunction(() => { const { allRequestsCompleteTimeInMs } = allRequestsCompletePredicateWithPromise; const logParamsAboutTime = allRequestsCompleteTimeInMs === 0 ? { allRequestsHaveNeverBeenCompletedYet: true } : { timeSinceAllRequestsComplete: (0, getDurationWithUnits_1.getDurationWithUnits)(Date.now() - allRequestsCompleteTimeInMs), }; const urlsOfNotCompleteRequests = (0, waitForEvents_1.getUrlsByRequestHookContextIds)(requestHookContextIds, hashOfNotCompleteRequests); const error = new error_1.E2edError(`waitForAllRequestsComplete promise rejected after ${rejectTimeoutWithUnits} timeout`, { ...logParamsAboutTime, predicate, urlsOfNotCompleteRequests }); allRequestsCompletePredicates.delete(allRequestsCompletePredicateWithPromise); allRequestsCompletePredicateWithPromise.clearResolveTimeout(); reject(error); }); const setResolveTimeout = () => { (0, object_1.setReadonlyProperty)(allRequestsCompletePredicateWithPromise, 'allRequestsCompleteTimeInMs', Date.now()); allRequestsCompletePredicateWithPromise.clearResolveTimeout(); const { clearRejectTimeout: clearResolveTimeout, promiseWithTimeout: resolvePromise } = (0, promise_1.getPromiseWithResolveAndReject)(resolveTimeout); (0, object_1.setReadonlyProperty)(allRequestsCompletePredicateWithPromise, 'clearResolveTimeout', clearResolveTimeout); void testRunPromise.then(clearResolveTimeout); resolvePromise.catch(() => { allRequestsCompletePredicates.delete(allRequestsCompletePredicateWithPromise); const waitWithUnits = (0, getDurationWithUnits_1.getDurationWithUnits)(Date.now() - startTimeInMs); (0, log_1.log)(`Have waited for all requests complete for ${waitWithUnits}`, { maxIntervalBetweenRequests, predicate, timeout: rejectTimeout }, 8 /* LogEventType.InternalUtil */); resolve(); }); }; (0, object_1.setReadonlyProperty)(allRequestsCompletePredicateWithPromise, 'setResolveTimeout', setResolveTimeout); allRequestsCompletePredicates.add(allRequestsCompletePredicateWithPromise); if (requestHookContextIds.size === 0) { allRequestsCompletePredicateWithPromise.setResolveTimeout(); } return promiseWithTimeout; }; exports.waitForAllRequestsComplete = waitForAllRequestsComplete;