@redocly/respect-core
Version:
API testing framework core
62 lines • 2.56 kB
JavaScript
import { isPlainObject } from '@redocly/openapi-core';
import { generateTestDataFromJsonSchema, generateExampleValue, } from '../arazzo-description-generator/index.js';
import { extractFirstExample } from './extract-first-example.js';
import { isParameterWithIn } from '../context-parser/index.js';
export function getRequestDataFromOpenApi(operation, logger) {
const content = operation?.requestBody?.content || {};
const [contentType, contentItem] = Object.entries(content)[0] || [];
const requestBody = contentItem?.example ||
extractFirstExample(contentItem?.examples) ||
generateTestDataFromJsonSchema(contentItem?.schema, logger);
const accept = getAcceptHeader(operation);
const parameters = getUniqueParameters([
...transformParameters(operation.pathParameters, logger),
...transformParameters(operation.parameters, logger),
]).filter(({ value }) => value);
return {
parameters,
contentTypeParameters: [
...(contentType ? [{ name: 'content-type', in: 'header', value: contentType }] : []),
...(accept ? [{ name: 'accept', in: 'header', value: accept }] : []),
],
requestBody,
contentType,
};
}
function getAcceptHeader(descriptionOperation) {
return descriptionOperation?.responses
? Array.from(new Set(Object.values(descriptionOperation.responses).flatMap((response) => {
if (isPlainObject(response) && 'content' in response) {
return Object.keys(response.content || {});
}
return [];
}))).join(', ')
: undefined;
}
function transformParameters(params, logger) {
return (params || [])
.filter((parameter) => parameter?.required === true)
.map((parameter) => {
if (isParameterWithIn(parameter)) {
return {
name: parameter.name,
in: parameter.in,
value: generateExampleValue(parameter, logger),
};
}
// Return undefined for non-matching parameters
return undefined;
})
.filter((parameter) => parameter !== undefined);
}
function getUniqueParameters(parameters) {
const uniqParameters = {};
for (const parameter of parameters) {
if (!isParameterWithIn(parameter)) {
continue;
}
uniqParameters[(parameter.name + ':' + parameter.in).toLowerCase()] = parameter;
}
return Object.values(uniqParameters);
}
//# sourceMappingURL=get-request-data-from-openapi.js.map