From e0a120620e3728c8161ecdafb4903f373c83673a Mon Sep 17 00:00:00 2001 From: Nandan Acharya Date: Mon, 8 Dec 2025 11:52:30 +0530 Subject: [PATCH] test: add Node unit tests for toFormData and refactor buildURL to avoid param reassignment (#7272) Co-authored-by: Jay --- lib/helpers/buildURL.js | 17 +++++------ test/unit/helpers/toFormData.js | 53 +++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 test/unit/helpers/toFormData.js diff --git a/lib/helpers/buildURL.js b/lib/helpers/buildURL.js index 4f9c0d1..e159665 100644 --- a/lib/helpers/buildURL.js +++ b/lib/helpers/buildURL.js @@ -29,29 +29,26 @@ function encode(val) { * @returns {string} The formatted url */ export default function buildURL(url, params, options) { - /*eslint no-param-reassign:0*/ if (!params) { return url; } - + const _encode = options && options.encode || encode; - if (utils.isFunction(options)) { - options = { - serialize: options - }; - } + const _options = utils.isFunction(options) ? { + serialize: options + } : options; - const serializeFn = options && options.serialize; + const serializeFn = _options && _options.serialize; let serializedParams; if (serializeFn) { - serializedParams = serializeFn(params, options); + serializedParams = serializeFn(params, _options); } else { serializedParams = utils.isURLSearchParams(params) ? params.toString() : - new AxiosURLSearchParams(params, options).toString(_encode); + new AxiosURLSearchParams(params, _options).toString(_encode); } if (serializedParams) { diff --git a/test/unit/helpers/toFormData.js b/test/unit/helpers/toFormData.js new file mode 100644 index 0000000..1b4bada --- /dev/null +++ b/test/unit/helpers/toFormData.js @@ -0,0 +1,53 @@ +import assert from 'assert'; +import toFormData from '../../../lib/helpers/toFormData.js'; +import FormData from 'form-data'; + +describe('helpers::toFormData', function () { + it('should convert a flat object to FormData', function () { + const data = { + foo: 'bar', + baz: 123 + }; + + const formData = toFormData(data, new FormData()); + + assert.ok(formData instanceof FormData); + // form-data package specific checks + assert.ok(formData._streams.length > 0); + }); + + it('should convert a nested object to FormData', function () { + const data = { + foo: { + bar: 'baz' + } + }; + + const formData = toFormData(data, new FormData()); + + assert.ok(formData instanceof FormData); + }); + + it('should throw Error on circular reference', function () { + const data = { + foo: 'bar' + }; + data.self = data; + + try { + toFormData(data, new FormData()); + assert.fail('Should have thrown an error'); + } catch (e) { + assert.strictEqual(e.message, 'Circular reference detected in self'); + } + }); + + it('should handle arrays', function () { + const data = { + arr: [1, 2, 3] + }; + + const formData = toFormData(data, new FormData()); + assert.ok(formData instanceof FormData); + }); +});