UNPKG

unexpected-express

Version:

Extend the unexpected assertion library with support for testing Express middleware

64 lines (54 loc) 1.89 kB
const FormData = require('form-data'); const isStream = require('is-stream'); const qs = require('qs'); module.exports = function resolveRequestBody(requestProperties, httpRequest) { let requestBody = requestProperties.body; let requestBodyKind = ''; if (requestProperties.form) { const requestForm = requestProperties.form; if (typeof requestForm !== 'string') { requestBody = qs.stringify(requestForm); } else { requestBody = requestForm; } if (!httpRequest.headers.has('Content-Type')) { httpRequest.headers.set( 'Content-Type', 'application/x-www-form-urlencoded' ); } } else if (requestProperties.formData) { if (requestBody) { throw new Error( 'unexpected-express: The "body" and "formData" options are not supported together' ); } requestBody = new FormData(); Object.keys(requestProperties.formData).forEach((name) => { let value = requestProperties.formData[name]; let options = {}; if (isStream.readable(value) && value.path) { options.filename = value.path; } else if (typeof value === 'object' && !Buffer.isBuffer(value)) { options = { ...value }; value = options.value; delete options.value; if (options.fileName) { options.filename = options.fileName; delete options.fileName; } } requestBody.append(name, value, options); }); delete requestProperties.formData; } else if ('unchunkedBody' in requestProperties) { requestBodyKind = 'unchunked'; requestBody = requestProperties.unchunkedBody; } else if ('rawBody' in requestProperties) { requestBodyKind = 'raw'; requestBody = requestProperties.rawBody; } else if (Buffer.isBuffer(requestBody)) { requestBodyKind = 'buffer'; } return { requestBody, requestBodyKind }; };