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 ) {