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