mirror of
https://github.com/usebruno/bruno.git
synced 2024-11-24 17:03:47 +01:00
extract basic OpenAPI links (#2624)
This commit is contained in:
parent
25e57d2578
commit
fd6b3630a5
@ -59,12 +59,15 @@ const transformOpenapiRequestItem = (request) => {
|
|||||||
operationName = `${request.method} ${request.path}`;
|
operationName = `${request.method} ${request.path}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// replace OpenAPI links in path by Bruno variables
|
||||||
|
let path = request.path.replace(/{([a-zA-Z]+)}/g, `{{${_operationObject.operationId}_$1}}`);
|
||||||
|
|
||||||
const brunoRequestItem = {
|
const brunoRequestItem = {
|
||||||
uid: uuid(),
|
uid: uuid(),
|
||||||
name: operationName,
|
name: operationName,
|
||||||
type: 'http-request',
|
type: 'http-request',
|
||||||
request: {
|
request: {
|
||||||
url: ensureUrl(request.global.server + '/' + request.path),
|
url: ensureUrl(request.global.server + '/' + path),
|
||||||
method: request.method.toUpperCase(),
|
method: request.method.toUpperCase(),
|
||||||
auth: {
|
auth: {
|
||||||
mode: 'none',
|
mode: 'none',
|
||||||
@ -81,6 +84,9 @@ const transformOpenapiRequestItem = (request) => {
|
|||||||
xml: null,
|
xml: null,
|
||||||
formUrlEncoded: [],
|
formUrlEncoded: [],
|
||||||
multipartForm: []
|
multipartForm: []
|
||||||
|
},
|
||||||
|
script: {
|
||||||
|
res: null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -195,6 +201,26 @@ const transformOpenapiRequestItem = (request) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// build the extraction scripts from responses that have links
|
||||||
|
// https://swagger.io/docs/specification/links/
|
||||||
|
let script = [];
|
||||||
|
each(_operationObject.responses || [], (response, responseStatus) => {
|
||||||
|
if (Object.hasOwn(response, 'links')) {
|
||||||
|
// only extract if the status code matches the response
|
||||||
|
script.push(`if (res.status === ${responseStatus}) {`);
|
||||||
|
each(response.links, (link) => {
|
||||||
|
each(link.parameters || [], (expression, parameter) => {
|
||||||
|
let value = openAPIRuntimeExpressionToScript(expression);
|
||||||
|
script.push(` bru.setVar('${link.operationId}_${parameter}', ${value});`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
script.push(`}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (script.length > 0) {
|
||||||
|
brunoRequestItem.request.script.res = script.join('\n');
|
||||||
|
}
|
||||||
|
|
||||||
return brunoRequestItem;
|
return brunoRequestItem;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -305,6 +331,18 @@ const getSecurity = (apiSpec) => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const openAPIRuntimeExpressionToScript = (expression) => {
|
||||||
|
// see https://swagger.io/docs/specification/links/#runtime-expressions
|
||||||
|
if (expression === '$response.body') {
|
||||||
|
return 'res.body';
|
||||||
|
} else if (expression.startsWith('$response.body#')) {
|
||||||
|
let pointer = expression.substring(15);
|
||||||
|
// could use https://www.npmjs.com/package/json-pointer for better support
|
||||||
|
return `res.body${pointer.replace('/', '.')}`;
|
||||||
|
}
|
||||||
|
return expression;
|
||||||
|
};
|
||||||
|
|
||||||
const parseOpenApiCollection = (data) => {
|
const parseOpenApiCollection = (data) => {
|
||||||
const brunoCollection = {
|
const brunoCollection = {
|
||||||
name: '',
|
name: '',
|
||||||
|
Loading…
Reference in New Issue
Block a user