parseRequest.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. "use strict";
  2. var _ = require('../../lodash'), sanitize = require('./util').sanitize;
  3. /**
  4. * Parses body of request specific requests having form data
  5. *
  6. * @param {Object} requestBody - JSON object representing body of request
  7. * @param {Boolean} trimFields - indicates whether to trim fields of body
  8. * @returns {String} code snippet of csharp-restsharp for multipart formdata
  9. */
  10. function parseFormData(requestBody, trimFields) {
  11. if (!Array.isArray(requestBody[requestBody.mode])) {
  12. return '';
  13. }
  14. return requestBody[requestBody.mode].reduce((body, data) => {
  15. if (data.disabled) {
  16. return body;
  17. }
  18. if (data.type === 'file') {
  19. body += `request.AddFile("${sanitize(data.key, trimFields)}", "${sanitize(data.src, trimFields)}");\n`;
  20. }
  21. else {
  22. (!data.value) && (data.value = '');
  23. body += `request.AddParameter("${sanitize(data.key, trimFields)}", ` +
  24. `"${sanitize(data.value, trimFields)}");\n`;
  25. }
  26. return body;
  27. }, '');
  28. }
  29. /**
  30. * Returns content-type of request body if available else returns text/plain as default
  31. *
  32. * @param {Object} request - Postman SDK request object
  33. * @returns {String} content-type of request body
  34. */
  35. function parseContentType(request) {
  36. return request.getHeaders({ enabled: true, ignoreCase: true })['content-type'] || 'text/plain';
  37. }
  38. /**
  39. *
  40. * @param {Object} requestBody - JSON object representing body of request
  41. * @param {boolean} trimFields - Boolean denoting whether to trim body fields
  42. * @returns {String} code snippet for graphql body
  43. */
  44. function parseGraphQL(requestBody, trimFields) {
  45. let query = requestBody.graphql.query, graphqlVariables;
  46. try {
  47. graphqlVariables = JSON.parse(requestBody.graphql.variables);
  48. }
  49. catch (e) {
  50. graphqlVariables = {};
  51. }
  52. return 'request.AddParameter("application/json", ' +
  53. `"${sanitize(JSON.stringify({ query: query, variables: graphqlVariables }), trimFields)}",
  54. ParameterType.RequestBody);\n`;
  55. }
  56. /**
  57. * Parses request object and returns csharp-restsharp code snippet for adding request body
  58. *
  59. * @param {Object} request - JSON object representing body of request
  60. * @param {Boolean} trimFields - indicates whether to trim fields of body
  61. * @returns {String} code snippet of csharp-restsharp parsed from request object
  62. */
  63. function parseBody(request, trimFields) {
  64. var requestBody = request.body ? request.body.toJSON() : {};
  65. if (!_.isEmpty(requestBody)) {
  66. switch (requestBody.mode) {
  67. case 'urlencoded':
  68. return parseFormData(requestBody, trimFields);
  69. case 'formdata':
  70. return parseFormData(requestBody, trimFields);
  71. case 'raw':
  72. return `request.AddParameter("${parseContentType(request)}", ` +
  73. `${JSON.stringify(requestBody[requestBody.mode])}, ParameterType.RequestBody);\n`;
  74. case 'graphql':
  75. return parseGraphQL(requestBody, trimFields);
  76. /* istanbul ignore next */
  77. case 'file':
  78. return `request.AddParameter("${parseContentType(request)}", ` +
  79. '"<file contents here>", ParameterType.RequestBody);\n';
  80. default:
  81. return '';
  82. }
  83. }
  84. return '';
  85. }
  86. /**
  87. * Parses header in Postman-SDK request and returns code snippet of csharp-restsharp for adding headers
  88. *
  89. * @param {Object} requestJson - Postman SDK request object
  90. * @returns {String} code snippet for adding headers in csharp-restsharp
  91. */
  92. function parseHeader(requestJson) {
  93. if (!Array.isArray(requestJson.header)) {
  94. return '';
  95. }
  96. return requestJson.header.reduce((headerSnippet, header) => {
  97. if (!header.disabled) {
  98. if (sanitize(header.key, true).toLowerCase() === 'user-agent') {
  99. headerSnippet += `client.UserAgent = "${sanitize(header.value)}";\n`;
  100. }
  101. else {
  102. headerSnippet += `request.AddHeader("${sanitize(header.key, true)}", "${sanitize(header.value)}");\n`;
  103. }
  104. }
  105. return headerSnippet;
  106. }, '');
  107. }
  108. module.exports = {
  109. parseBody: parseBody,
  110. parseHeader: parseHeader,
  111. parseContentType: parseContentType
  112. };