From e31fe4af163ebd94eefaaa61e519607ec04c5622 Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Mon, 16 May 2022 10:06:50 +0200 Subject: [PATCH] fix(medusa): CartService fix discounts empty array check on update (#1516) * fix(medusa): CartService fix constraint check * test(medusa): CartService test case, remove all discount if empty array is passed --- .../medusa/src/services/__tests__/cart.js | 35 +++++++++++++++++++ packages/medusa/src/services/cart.ts | 4 +-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/packages/medusa/src/services/__tests__/cart.js b/packages/medusa/src/services/__tests__/cart.js index 0fefc85592..d47778b997 100644 --- a/packages/medusa/src/services/__tests__/cart.js +++ b/packages/medusa/src/services/__tests__/cart.js @@ -2137,6 +2137,41 @@ describe("CartService", () => { ], }) }) + + it("successfully remove all discounts that have been applied", async () => { + await cartService.update(IdMap.getId("with-d"), { + discounts: [], + }) + expect(eventBusService.emit).toHaveBeenCalledTimes(1) + expect(eventBusService.emit).toHaveBeenCalledWith( + "cart.updated", + expect.any(Object) + ) + + expect(cartRepository.save).toHaveBeenCalledTimes(1) + expect(cartRepository.save).toHaveBeenCalledWith({ + id: IdMap.getId("cart"), + region_id: IdMap.getId("good"), + discount_total: 0, + shipping_total: 0, + subtotal: 0, + tax_total: 0, + total: 0, + items: [ + { + id: "li1", + quantity: 2, + unit_price: 1000, + }, + { + id: "li2", + quantity: 1, + unit_price: 500, + }, + ], + discounts: [], + }) + }) }) describe("removeDiscount", () => { diff --git a/packages/medusa/src/services/cart.ts b/packages/medusa/src/services/cart.ts index 7df4de88c6..5b83008601 100644 --- a/packages/medusa/src/services/cart.ts +++ b/packages/medusa/src/services/cart.ts @@ -779,7 +779,7 @@ class CartService extends TransactionBaseService { await this.updateShippingAddress_(cart, shippingAddress, addrRepo) } - if (data.discounts?.length) { + if (typeof data.discounts !== "undefined") { const previousDiscounts = [...cart.discounts] cart.discounts.length = 0 @@ -797,7 +797,7 @@ class CartService extends TransactionBaseService { // we need to update shipping methods to original price if ( previousDiscounts.some( - ({ rule }) => rule?.type === "free_shipping" + ({ rule }) => rule.type === "free_shipping" ) && !hasFreeShipping ) {