@apideck/portman
Version:
Port OpenAPI Spec to Postman Collection, with contract & variation tests included
86 lines • 4.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.assignVarFromResponseBody = void 0;
var application_1 = require("../../application");
var utils_1 = require("../../utils");
var openapi_format_1 = require("openapi-format");
var assignVarFromResponseBody = function (dto) {
var pmOperation = dto.pmOperation, oaOperation = dto.oaOperation, varSetting = dto.varSetting, options = dto.options, globals = dto.globals;
if (!varSetting.responseBodyProp)
return pmOperation;
var pmJsonData = '';
var pmMappedData = '';
var pmVarAssign = '';
var toggleLog = (options === null || options === void 0 ? void 0 : options.logAssignVariables) === false ? '// ' : '';
if (!pmOperation.testJsonDataInjected) {
pmJsonData = [
"// Set response object as internal variable\n",
"let jsonData = {};\n",
"try {jsonData = pm.response.json();}catch(e){}\n"
].join('');
pmOperation.testJsonDataInjected = true;
}
var root = varSetting.responseBodyProp === '.';
var opsRef = pmOperation.id ? pmOperation.id : pmOperation.pathVar;
var casedProp = (0, utils_1.parseTpl)({
template: varSetting.responseBodyProp,
oaOperation: oaOperation,
options: {
casing: globals === null || globals === void 0 ? void 0 : globals.variableCasing,
caseOnlyExpressions: true
}
});
var prop = (0, utils_1.hasTpl)(varSetting === null || varSetting === void 0 ? void 0 : varSetting.responseBodyProp) ? casedProp : varSetting.responseBodyProp;
var varSafeProp = (0, utils_1.renderBracketPath)(prop);
var varProp = varSafeProp.charAt(0) === '[' ? "".concat(varSafeProp) : root ? '' : ".".concat(varSafeProp);
var nameProp = prop.charAt(0) !== '[' ? ".".concat(prop) : prop;
var tpl = (varSetting === null || varSetting === void 0 ? void 0 : varSetting.name) || (0, utils_1.hasTpl)(varSetting === null || varSetting === void 0 ? void 0 : varSetting.name) ? varSetting === null || varSetting === void 0 ? void 0 : varSetting.name : '<opsRef><nameProp>';
var casedVarName = (0, utils_1.parseTpl)({
template: tpl,
oaOperation: oaOperation,
dynamicValues: {
nameProp: nameProp,
opsRef: opsRef
},
options: {
casing: globals === null || globals === void 0 ? void 0 : globals.variableCasing
}
});
var varName = casedVarName;
if ((varSetting === null || varSetting === void 0 ? void 0 : varSetting.name) === undefined || (0, utils_1.hasTpl)(varSetting.name)) {
varName = casedVarName;
}
else if (varSetting.name !== '') {
varName = varSetting.name;
}
var varPath = "".concat((0, utils_1.renderChainPath)("jsonData".concat(varProp)));
var sanitizedVarProp = (0, utils_1.sanitizeKeyForVar)(varProp);
var pathVarName = "_".concat((0, openapi_format_1.changeCase)("res".concat(sanitizedVarProp.replace(/\[/g, '')), 'camelCase'));
if (!pmOperation.mappedVars.includes(pathVarName)) {
pmOperation.registerVar(pathVarName);
pmMappedData = [
"// Set property value as variable\n",
"const ".concat(pathVarName, " = ").concat(varPath, ";\n")
].join('');
}
pmVarAssign = [
"// pm.collectionVariables - Set ".concat(varName, " as variable for jsonData").concat(varProp, "\n"),
"if (".concat(pathVarName, " !== undefined) {\n"),
" pm.collectionVariables.set(\"".concat(varName, "\", jsonData").concat(varProp, ");\n"),
" ".concat(toggleLog, "console.log(\"- use {{").concat(varName, "}} as collection variable for value\","),
"jsonData".concat(varProp, ");\n"),
"} else {\n",
" console.log('INFO - Unable to assign variable {{".concat(varName, "}}, as jsonData").concat(varProp, " is undefined.');\n"),
"};\n"
].join('');
console.log("- Set variable for \"".concat(opsRef, "\" - use {{").concat(varName, "}} as variable for \"response").concat(varProp, "\""));
if (pmJsonData !== '')
(0, application_1.writeOperationTestScript)(pmOperation, pmJsonData);
if (pmMappedData !== '')
(0, application_1.writeOperationTestScript)(pmOperation, pmMappedData);
if (pmVarAssign !== '')
(0, application_1.writeOperationTestScript)(pmOperation, pmVarAssign);
return pmOperation;
};
exports.assignVarFromResponseBody = assignVarFromResponseBody;
//# sourceMappingURL=assignVarFromResponseBody.js.map