From 52b6ef6a7d457fd7618b2fd28875a6ec6905794b Mon Sep 17 00:00:00 2001 From: bc-yevhenii-buliuk Date: Thu, 2 Apr 2026 23:43:15 +0300 Subject: [PATCH] feat: TRAC-362 add optional requestOptions to itemAdd and handleItemAdd for locale-aware cart requests --- spec/api/cart.spec.js | 38 ++++++++++++++++++++++++++++++++++++++ src/api/cart.js | 11 +++++++---- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/spec/api/cart.spec.js b/spec/api/cart.spec.js index 71919a4..6520372 100644 --- a/spec/api/cart.spec.js +++ b/spec/api/cart.spec.js @@ -75,6 +75,44 @@ describe('Cart Api Class', () => { expect(cart.makeRequest).toHaveBeenCalled(); }); + it('should pass requestOptions baseUrl to makeRequest when provided to itemAdd', () => { + const baseUrl = 'https://site.com/es'; + cart.itemAdd({}, jest.fn(), { baseUrl }); + + expect(cart.makeRequest).toHaveBeenCalledWith( + expect.stringContaining('/cart/add'), + 'POST', + expect.objectContaining({ baseUrl }), + true, + expect.any(Function), + ); + }); + + it('should pass requestOptions baseUrl to makeRequest when provided to handleItemAdd', () => { + const baseUrl = 'https://site.com/fr'; + cart.handleItemAdd({}, jest.fn(), { baseUrl }); + + expect(cart.makeRequest).toHaveBeenCalledWith( + expect.stringContaining('/cart/add'), + 'POST', + expect.objectContaining({ baseUrl }), + true, + expect.any(Function), + ); + }); + + it('should work without requestOptions (backward compatibility)', () => { + cart.itemAdd({}, jest.fn()); + + expect(cart.makeRequest).toHaveBeenCalledWith( + expect.stringContaining('/cart/add'), + 'POST', + expect.not.objectContaining({ baseUrl: expect.anything() }), + true, + expect.any(Function), + ); + }); + it('should be able to call api on item remove', () => { cart.itemRemove(1, jest.fn()); diff --git a/src/api/cart.js b/src/api/cart.js index d0b18a9..60bf39c 100644 --- a/src/api/cart.js +++ b/src/api/cart.js @@ -107,14 +107,15 @@ export default class extends Base { * * @param {FormData} formData * @param {Function} callback + * @param {Object} [requestOptions] - optional */ - itemAdd(formData, callback) { + itemAdd(formData, callback, requestOptions = {}) { this.handleItemAdd(formData, (err, response) => { if (!err) { this.getBodlEventsCart().emitAddItem(response); } callback(err, response); - }); + }, requestOptions); } /** @@ -122,9 +123,11 @@ export default class extends Base { * * @param {FormData} formData * @param {Function} callback + * @param {Object} [requestOptions] - optional */ - handleItemAdd(formData, callback) { - this.remoteRequest('/cart/add', 'POST', { formData }, (err, response) => { + handleItemAdd(formData, callback, requestOptions = {}) { + const { baseUrl } = requestOptions; + this.remoteRequest('/cart/add', 'POST', { formData, baseUrl }, (err, response) => { const emitData = { err, response,