import { appendFileSync } from 'fs';
import {
currentTimestamp,
DiagramConfiguration,
formatPayload,
getInputFile,
quote,
} from './diagramDrawing';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const wrap = require('word-wrap');
export const addRequest = (
scenarioId: string,
target: string,
url: string,
data: unknown,
diagramConfiguration: DiagramConfiguration,
): void => {
const quotedTarget = quote(target);
const request = `ALT -> ${quotedTarget}: ${url}\nactivate ${quotedTarget}\n${
data
? `note right\n**${currentTimestamp()}**\n${formatPayload(
data,
diagramConfiguration,
)}\nend note\n`
: ''
}`;
appendFileSync(getInputFile(scenarioId), request);
};
export const addSuccessfulResponse = (
scenarioId: string,
source: string,
status: string,
body: unknown,
diagramConfiguration: DiagramConfiguration,
): void => {
addSuccessfulResponseArrow(scenarioId, source, status);
if (body) {
addSuccessfulResponseBody(scenarioId, body, diagramConfiguration);
}
};
export const addSuccessfulResponseBody = (
scenarioId: string,
body: unknown,
diagramConfiguration: DiagramConfiguration,
): void => {
const note = `note left #99FF99\n**${currentTimestamp()}**\n${formatPayload(
body,
diagramConfiguration,
)}\nend note\n`;
appendFileSync(getInputFile(scenarioId), note);
};
export const addFailedResponse = (
scenarioId: string,
source: string,
status: string,
body: string,
diagramConfiguration: DiagramConfiguration,
): void => {
addFailedResponseArrow(scenarioId, source, status);
appendFileSync(
getInputFile(scenarioId),
`note right\n${formatPayload(
body,
diagramConfiguration,
)}\nend note\n`,
);
};
const addResponseArrow = (
scenarioId: string,
source: string,
status: string,
color: string,
): void => {
const quotedSource = quote(source);
appendFileSync(
getInputFile(scenarioId),
`${quotedSource} --> ALT: ${status}\ndeactivate ${quotedSource}\n`,
);
};
export const addSuccessfulResponseArrow = (
scenarioId: string,
source: string,
status: string,
): void => addResponseArrow(scenarioId, source, status, 'green');
const addFailedResponseArrow = (
scenarioId: string,
source: string,
status: string,
): void => addResponseArrow(scenarioId, source, status, 'red');
export const addValidationFailureResponseBody = (
scenarioId: string,
validationError: { errorMsg: string; responseBody: unknown },
diagramConfiguration: DiagramConfiguration,
): void => {
const formattedErrorMsg = `${wrap(
validationError.errorMsg,
{ newline: '\n', indent: '' },
)}`;
const note = `note left #FF0000\n**${currentTimestamp()}**\n${formattedErrorMsg}\n\nIncoming Response was:\n\n
${formatPayload(
validationError.responseBody,
diagramConfiguration,
)}\nend note\n`;
appendFileSync(getInputFile(scenarioId), note);
};