unexpected-express
Version:
Extend the unexpected assertion library with support for testing Express middleware
64 lines (54 loc) • 1.89 kB
JavaScript
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 };
};