diff --git a/integration-tests/http/__tests__/cart/store/cart.spec.ts b/integration-tests/http/__tests__/cart/store/cart.spec.ts index 7828772789..c82ebaaaff 100644 --- a/integration-tests/http/__tests__/cart/store/cart.spec.ts +++ b/integration-tests/http/__tests__/cart/store/cart.spec.ts @@ -362,6 +362,91 @@ medusaIntegrationTestRunner({ ) }) + it("should add item to cart with tax lines multiple times", async () => { + let response = await api.post( + `/store/carts/${cart.id}/line-items`, + { + variant_id: product.variants[0].id, + quantity: 1, + }, + storeHeaders + ) + + expect(response.status).toEqual(200) + expect(response.data.cart).toEqual( + expect.objectContaining({ + id: cart.id, + currency_code: "usd", + items: expect.arrayContaining([ + expect.objectContaining({ + unit_price: 1500, + compare_at_unit_price: null, + is_tax_inclusive: true, + title: "S / Black", + quantity: 2, + tax_lines: [ + expect.objectContaining({ + description: "CA Default Rate", + code: "CADEFAULT", + rate: 5, + provider_id: "system", + }), + ], + }), + ]), + }) + ) + + response = await api.post( + `/store/carts/${cart.id}/line-items`, + { + variant_id: product.variants[1].id, + quantity: 1, + }, + storeHeaders + ) + + expect(response.status).toEqual(200) + expect(response.data.cart).toEqual( + expect.objectContaining({ + id: cart.id, + currency_code: "usd", + items: expect.arrayContaining([ + expect.objectContaining({ + unit_price: 1500, + compare_at_unit_price: null, + is_tax_inclusive: true, + quantity: 2, + title: "S / Black", + tax_lines: [ + expect.objectContaining({ + description: "CA Default Rate", + code: "CADEFAULT", + rate: 5, + provider_id: "system", + }), + ], + }), + expect.objectContaining({ + unit_price: 1500, + compare_at_unit_price: null, + is_tax_inclusive: true, + quantity: 1, + title: "S / White", + tax_lines: [ + expect.objectContaining({ + description: "CA Default Rate", + code: "CADEFAULT", + rate: 5, + provider_id: "system", + }), + ], + }), + ]), + }) + ) + }) + describe("with sale price lists", () => { let priceList diff --git a/integration-tests/modules/__tests__/cart/store/carts.spec.ts b/integration-tests/modules/__tests__/cart/store/carts.spec.ts index 050dfd7488..42f3d21e22 100644 --- a/integration-tests/modules/__tests__/cart/store/carts.spec.ts +++ b/integration-tests/modules/__tests__/cart/store/carts.spec.ts @@ -876,7 +876,14 @@ medusaIntegrationTestRunner({ is_tax_inclusive: false, quantity: 1, title: "Test item", - tax_lines: [], + tax_lines: [ + expect.objectContaining({ + code: "CADEFAULT", + description: "CA Default Rate", + provider_id: "system", + rate: 5, + }), + ], adjustments: [ expect.objectContaining({ id: expect.not.stringContaining(lineItemAdjustment.id), diff --git a/packages/core/core-flows/src/cart/workflows/add-shipping-method-to-cart.ts b/packages/core/core-flows/src/cart/workflows/add-shipping-method-to-cart.ts index 314fd11892..86a2cf16b0 100644 --- a/packages/core/core-flows/src/cart/workflows/add-shipping-method-to-cart.ts +++ b/packages/core/core-flows/src/cart/workflows/add-shipping-method-to-cart.ts @@ -132,7 +132,7 @@ export const addShippingMethodToCartWorkflow = createWorkflow( return cart.shipping_methods.map((sm) => sm.id) }) - const [, shippingMethodsToAdd] = parallelize( + parallelize( removeShippingMethodFromCartStep({ shipping_method_ids: currentShippingMethods, }), @@ -148,7 +148,6 @@ export const addShippingMethodToCartWorkflow = createWorkflow( updateTaxLinesWorkflow.runAsStep({ input: { cart_id: input.cart_id, - shipping_methods: shippingMethodsToAdd, }, }) diff --git a/packages/core/core-flows/src/cart/workflows/add-to-cart.ts b/packages/core/core-flows/src/cart/workflows/add-to-cart.ts index cc4d058bf5..90a129cf5d 100644 --- a/packages/core/core-flows/src/cart/workflows/add-to-cart.ts +++ b/packages/core/core-flows/src/cart/workflows/add-to-cart.ts @@ -133,7 +133,6 @@ export const addToCartWorkflow = createWorkflow( updateTaxLinesWorkflow.runAsStep({ input: { cart_id: input.cart.id, - items, }, }) diff --git a/packages/core/core-flows/src/cart/workflows/refresh-cart-items.ts b/packages/core/core-flows/src/cart/workflows/refresh-cart-items.ts index d3331368fd..6a90feb1ec 100644 --- a/packages/core/core-flows/src/cart/workflows/refresh-cart-items.ts +++ b/packages/core/core-flows/src/cart/workflows/refresh-cart-items.ts @@ -88,7 +88,7 @@ export const refreshCartItemsWorkflow = createWorkflow( return items }) - const items = updateLineItemsStep({ + updateLineItemsStep({ id: cart.id, items: lineItems, }) @@ -103,7 +103,7 @@ export const refreshCartItemsWorkflow = createWorkflow( refreshCartShippingMethodsStep({ cart: refetchedCart }) updateTaxLinesWorkflow.runAsStep({ - input: { cart_id: cart.id, items }, + input: { cart_id: cart.id }, }) const cartPromoCodes = transform({ cart, input }, ({ cart, input }) => { diff --git a/packages/core/core-flows/src/cart/workflows/update-tax-lines.ts b/packages/core/core-flows/src/cart/workflows/update-tax-lines.ts index 4fb049bf28..9aff9e6a9c 100644 --- a/packages/core/core-flows/src/cart/workflows/update-tax-lines.ts +++ b/packages/core/core-flows/src/cart/workflows/update-tax-lines.ts @@ -86,9 +86,8 @@ export const updateTaxLinesWorkflow = createWorkflow( const taxLineItems = getItemTaxLinesStep( transform({ input, cart }, (data) => ({ orderOrCart: data.cart, - items: data.input.items || data.cart.items, - shipping_methods: - data.input.shipping_methods || data.cart.shipping_methods, + items: data.cart.items, + shipping_methods: data.cart.shipping_methods, force_tax_calculation: data.input.force_tax_calculation, })) )