From aca68eb5a33c11bb4391bc84d74c96f3ed8c7410 Mon Sep 17 00:00:00 2001 From: Henric Malmberg Date: Mon, 6 Sep 2021 17:20:26 +0200 Subject: [PATCH 1/2] add selling_plan to cartAdd() --- packages/theme-cart/__tests__/theme-cart.test.js | 15 +++++++++++++++ packages/theme-cart/request.js | 3 ++- packages/theme-cart/theme-cart.js | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/theme-cart/__tests__/theme-cart.test.js b/packages/theme-cart/__tests__/theme-cart.test.js index a0bca20b..e7f5b9b6 100644 --- a/packages/theme-cart/__tests__/theme-cart.test.js +++ b/packages/theme-cart/__tests__/theme-cart.test.js @@ -191,6 +191,21 @@ describe('addItem()', () => { ); }); + test('optional second argument is an object with a `selling_plan` key', async () => { + const spy = jest.spyOn(global, 'fetch'); + const item = require('../__fixtures__/cart-populated.json').items[0]; + const id = item.id; + const selling_plan = 1234; + const options = {selling_plan}; + + await cart.addItem(id, options); + + expect(spy).toHaveBeenLastCalledWith( + '/cart/add.js', + expect.objectContaining({body: JSON.stringify({id, ...options})}) + ); + }); + test('returns a promise', () => { expect(cart.addItem(123456).then).toBeDefined(); }); diff --git a/packages/theme-cart/request.js b/packages/theme-cart/request.js index 8243befe..32c66f26 100644 --- a/packages/theme-cart/request.js +++ b/packages/theme-cart/request.js @@ -23,13 +23,14 @@ export function cart() { return fetchJSON('/cart.js', getDefaultRequestConfig()); } -export function cartAdd(id, quantity, properties) { +export function cartAdd(id, quantity, properties, selling_plan) { var config = getDefaultRequestConfig(); config.method = 'POST'; config.body = JSON.stringify({ id: id, quantity: quantity, + selling_plan: selling_plan, properties: properties }); diff --git a/packages/theme-cart/theme-cart.js b/packages/theme-cart/theme-cart.js index 288d1d3e..45b50886 100644 --- a/packages/theme-cart/theme-cart.js +++ b/packages/theme-cart/theme-cart.js @@ -80,7 +80,7 @@ export function addItem(id, options) { validate.id(id); - return request.cartAdd(id, options.quantity, options.properties); + return request.cartAdd(id, options.quantity, options.properties, options.selling_plan); } /** From d9cfada08a481aaab91596190eeb74196ccd2641 Mon Sep 17 00:00:00 2001 From: Henric Malmberg Date: Wed, 17 Nov 2021 14:13:32 +0100 Subject: [PATCH 2/2] add additems function for adding multiple variants in one call --- packages/theme-cart/request.js | 9 +++++++++ packages/theme-cart/theme-cart.js | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/packages/theme-cart/request.js b/packages/theme-cart/request.js index 32c66f26..cf0794e5 100644 --- a/packages/theme-cart/request.js +++ b/packages/theme-cart/request.js @@ -37,6 +37,15 @@ export function cartAdd(id, quantity, properties, selling_plan) { return fetchJSON('/cart/add.js', config); } +export function cartAddBulk(items) { + var config = getDefaultRequestConfig(); + + config.method = 'POST'; + config.body = JSON.stringify({items}); + + return fetchJSON('/cart/add.js', config); +} + export function cartAddFromForm(formData) { var config = getDefaultRequestConfig(); delete config.headers['Content-Type']; diff --git a/packages/theme-cart/theme-cart.js b/packages/theme-cart/theme-cart.js index 45b50886..46a924a8 100644 --- a/packages/theme-cart/theme-cart.js +++ b/packages/theme-cart/theme-cart.js @@ -83,6 +83,12 @@ export function addItem(id, options) { return request.cartAdd(id, options.quantity, options.properties, options.selling_plan); } +export function addItems(items) { + items.forEach(({id}) => validate.id(id)) + + return request.cartAddBulk(items); +} + /** * Add a new line item to the cart from a product form * @param {object} form DOM element which is equal to the
node