fix: Ensure tax lines are generated for all items and shipping methods in cart (#10372)

* fix: Generate tax lines for all items in cart

* fix: Correct test
This commit is contained in:
Oli Juhl
2024-12-01 14:50:38 +01:00
committed by GitHub
parent 94f6265dfc
commit eacd691951
6 changed files with 98 additions and 9 deletions

View File

@@ -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

View File

@@ -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),

View File

@@ -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,
},
})

View File

@@ -133,7 +133,6 @@ export const addToCartWorkflow = createWorkflow(
updateTaxLinesWorkflow.runAsStep({
input: {
cart_id: input.cart.id,
items,
},
})

View File

@@ -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 }) => {

View File

@@ -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,
}))
)