UNPKG

e2ed

Version:

E2E testing framework over Playwright

58 lines (57 loc) 2.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.request = void 0; const node_http_1 = require("node:http"); const node_https_1 = require("node:https"); const internal_1 = require("../../constants/internal"); const fullMocks_1 = require("../../context/fullMocks"); const error_1 = require("../error"); const log_1 = require("../log"); const object_1 = require("../object"); const getFullMocksResponse_1 = require("./getFullMocksResponse"); const getPreparedOptions_1 = require("./getPreparedOptions"); const getResponse_1 = require("./getResponse"); const defaultIsNeedRetry = ({ statusCode }) => statusCode >= internal_1.BAD_REQUEST_STATUS_CODE; /** * Send a request to the (JSON) API by `Route`, route parameters, headers, * post-data, timeout and number of retries. */ const request = async (Route, { isNeedRetry = defaultIsNeedRetry, maxRetriesCount = 5, requestHeaders, requestBody, routeParams, timeout = 30_000, // eslint-disable-next-line @typescript-eslint/consistent-type-assertions } = {}) => { const { isResponseBodyInJsonFormat, logParams, options, requestBodyAsString, url, urlObject } = (0, getPreparedOptions_1.getPreparedOptions)(Route, { requestBody, requestHeaders, routeParams, timeout }); const fullMocksState = (0, fullMocks_1.getFullMocksState)(); if (fullMocksState?.appliedMocks !== undefined) { const response = (0, getFullMocksResponse_1.getFullMocksResponse)(fullMocksState, logParams, urlObject); return response; } const libRequest = urlObject.protocol === 'http:' ? node_http_1.request : node_https_1.request; for (let retryIndex = 1; retryIndex <= maxRetriesCount; retryIndex += 1) { const retry = `${retryIndex}/${maxRetriesCount}`; (0, object_1.setReadonlyProperty)(logParams, 'retry', retry); try { const response = await (0, getResponse_1.getResponse)({ isNeedRetry, isResponseBodyInJsonFormat, libRequest, logParams, options, requestBody, requestBodyAsString, timeout, url, urlObject, }); if (response !== undefined) { return response; } (0, object_1.setReadonlyProperty)(logParams, 'cause', 'isNeedRetry returns true'); } catch (cause) { (0, object_1.setReadonlyProperty)(logParams, 'cause', cause); (0, log_1.log)(`An error was received during the request to ${url}`, { ...logParams, logEventStatus: "failed" /* LogEventStatus.Failed */ }, 8 /* LogEventType.InternalUtil */); } } throw new error_1.E2edError(`All ${maxRetriesCount} retries to request to ${url} have been exhausted`, logParams); }; exports.request = request;