UNPKG

@apideck/portman

Version:

Port OpenAPI Spec to Postman Collection, with contract & variation tests included

86 lines 4.56 kB
"use strict"; 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