feat: added delay flag in @hoppscotch/cli and related tests (#2527)
Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
This commit is contained in:
@@ -5,7 +5,12 @@ import { bold } from "chalk";
|
||||
import { log } from "console";
|
||||
import round from "lodash/round";
|
||||
import { HoppCollection, HoppRESTRequest } from "@hoppscotch/data";
|
||||
import { HoppEnvs, CollectionStack, RequestReport } from "../types/request";
|
||||
import {
|
||||
HoppEnvs,
|
||||
CollectionStack,
|
||||
RequestReport,
|
||||
ProcessRequestParams,
|
||||
} from "../types/request";
|
||||
import {
|
||||
getRequestMetrics,
|
||||
preProcessRequest,
|
||||
@@ -41,6 +46,7 @@ export const collectionsRunner =
|
||||
(param: CollectionRunnerParam): T.Task<RequestReport[]> =>
|
||||
async () => {
|
||||
const envs: HoppEnvs = param.envs;
|
||||
const delay = param.delay ?? 0;
|
||||
const requestsReport: RequestReport[] = [];
|
||||
const collectionStack: CollectionStack[] = getCollectionStack(
|
||||
param.collections
|
||||
@@ -54,12 +60,18 @@ export const collectionsRunner =
|
||||
for (const request of collection.requests) {
|
||||
const _request = preProcessRequest(request);
|
||||
const requestPath = `${path}/${_request.name}`;
|
||||
const processRequestParams: ProcessRequestParams = {
|
||||
path: requestPath,
|
||||
request: _request,
|
||||
envs,
|
||||
delay,
|
||||
};
|
||||
|
||||
// Request processing initiated message.
|
||||
log(WARN(`\nRunning: ${bold(requestPath)}`));
|
||||
|
||||
// Processing current request.
|
||||
const result = await processRequest(_request, envs, requestPath)();
|
||||
const result = await processRequest(processRequestParams)();
|
||||
|
||||
// Updating global & selected envs with new envs from processed-request output.
|
||||
const { global, selected } = result.envs;
|
||||
|
||||
@@ -129,3 +129,8 @@ export const getDurationInSeconds = (
|
||||
const durationInSeconds = (end[0] * 1e9 + end[1]) / 1e9;
|
||||
return round(durationInSeconds, precision);
|
||||
};
|
||||
|
||||
export const roundDuration = (
|
||||
duration: number,
|
||||
precision: number = DEFAULT_DURATION_PRECISION
|
||||
) => round(duration, precision);
|
||||
|
||||
@@ -12,7 +12,11 @@ import { testRunner, getTestScriptParams, hasFailedTestCases } from "./test";
|
||||
import { RequestConfig, EffectiveHoppRESTRequest } from "../interfaces/request";
|
||||
import { RequestRunnerResponse } from "../interfaces/response";
|
||||
import { preRequestScriptRunner } from "./pre-request";
|
||||
import { HoppEnvs, RequestReport } from "../types/request";
|
||||
import {
|
||||
HoppEnvs,
|
||||
ProcessRequestParams,
|
||||
RequestReport,
|
||||
} from "../types/request";
|
||||
import {
|
||||
printPreRequestRunner,
|
||||
printRequestRunner,
|
||||
@@ -189,11 +193,11 @@ const getRequest = {
|
||||
*/
|
||||
export const processRequest =
|
||||
(
|
||||
request: HoppRESTRequest,
|
||||
envs: HoppEnvs,
|
||||
path: string
|
||||
params: ProcessRequestParams
|
||||
): T.Task<{ envs: HoppEnvs; report: RequestReport }> =>
|
||||
async () => {
|
||||
const { envs, path, request, delay } = params;
|
||||
|
||||
// Initialising updatedEnvs with given parameter envs, will eventually get updated.
|
||||
const result = {
|
||||
envs: <HoppEnvs>envs,
|
||||
@@ -247,7 +251,9 @@ export const processRequest =
|
||||
duration: 0,
|
||||
};
|
||||
// Executing request-runner.
|
||||
const requestRunnerRes = await requestRunner(requestConfig)();
|
||||
const requestRunnerRes = await delayPromiseFunction<
|
||||
E.Either<HoppCLIError, RequestRunnerResponse>
|
||||
>(requestRunner(requestConfig), delay);
|
||||
if (E.isLeft(requestRunnerRes)) {
|
||||
// Updating report for errors & current result
|
||||
report.errors.push(requestRunnerRes.left);
|
||||
@@ -358,3 +364,15 @@ export const getRequestMetrics = (
|
||||
hasReqErrors ? { failed: 1, passed: 0 } : { failed: 0, passed: 1 },
|
||||
(requests) => <RequestMetrics>{ requests, duration }
|
||||
);
|
||||
|
||||
/**
|
||||
* A function to execute promises with specific delay in milliseconds.
|
||||
* @param func Function with promise with return type T.
|
||||
* @param delay TIme in milliseconds to delay function.
|
||||
* @returns Promise of type same as func.
|
||||
*/
|
||||
export const delayPromiseFunction = <T>(
|
||||
func: () => Promise<T>,
|
||||
delay: number
|
||||
): Promise<T> =>
|
||||
new Promise((resolve) => setTimeout(() => resolve(func()), delay));
|
||||
|
||||
Reference in New Issue
Block a user