fix: add address and customer metadata to tax calc context (#10122)
Fixes CMRC-713 **What** - Ensure that customer and shipping address metadata is passed in the tax calculation context when updating tax lines on a cart. **Why** - Gives more flexibility in criteria to evaluate tax rates. - https://github.com/medusajs/medusa/discussions/10121 - https://github.com/medusajs/medusa/discussions/10114 Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
updateLineItemInCartWorkflow,
|
||||
updateLineItemsStepId,
|
||||
updatePaymentCollectionStepId,
|
||||
updateTaxLinesWorkflow,
|
||||
} from "@medusajs/core-flows"
|
||||
import {
|
||||
ICartModuleService,
|
||||
@@ -2159,6 +2160,44 @@ medusaIntegrationTestRunner({
|
||||
])
|
||||
})
|
||||
})
|
||||
|
||||
describe("updateTaxLinesWorkflow", () => {
|
||||
it("should include shipping address metadata in tax calculation context", async () => {
|
||||
const cart = await cartModuleService.createCarts({
|
||||
currency_code: "dkk",
|
||||
region_id: defaultRegion.id,
|
||||
shipping_address: {
|
||||
metadata: {
|
||||
testing_tax: true,
|
||||
},
|
||||
},
|
||||
items: [
|
||||
{
|
||||
quantity: 1,
|
||||
unit_price: 5000,
|
||||
title: "Test item",
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
const { transaction } = await updateTaxLinesWorkflow(
|
||||
appContainer
|
||||
).run({
|
||||
input: {
|
||||
cart_id: cart.id,
|
||||
},
|
||||
throwOnError: false,
|
||||
})
|
||||
|
||||
expect(
|
||||
// @ts-ignore
|
||||
transaction.context.invoke["use-remote-query"].output.output
|
||||
.shipping_address.metadata
|
||||
).toEqual({
|
||||
testing_tax: true,
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
@@ -47,6 +47,7 @@ const cartFields = [
|
||||
"shipping_methods.amount",
|
||||
"customer.id",
|
||||
"customer.email",
|
||||
"customer.metadata",
|
||||
"customer.groups.id",
|
||||
"shipping_address.id",
|
||||
"shipping_address.address_1",
|
||||
@@ -56,6 +57,7 @@ const cartFields = [
|
||||
"shipping_address.country_code",
|
||||
"shipping_address.region_code",
|
||||
"shipping_address.province",
|
||||
"shipping_address.metadata",
|
||||
]
|
||||
|
||||
export type UpdateTaxLinesWorkflowInput = {
|
||||
|
||||
@@ -53,6 +53,7 @@ function normalizeTaxModuleContext(
|
||||
id: orderOrCart.customer.id,
|
||||
email: orderOrCart.customer.email,
|
||||
customer_groups: orderOrCart.customer.groups?.map((g) => g.id) || [],
|
||||
metadata: orderOrCart.customer.metadata,
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -63,6 +64,7 @@ function normalizeTaxModuleContext(
|
||||
address_2: address.address_2,
|
||||
city: address.city,
|
||||
postal_code: address.postal_code,
|
||||
metadata: address.metadata,
|
||||
},
|
||||
customer,
|
||||
is_return: isReturn ?? false,
|
||||
|
||||
@@ -448,6 +448,11 @@ export interface TaxCalculationContext {
|
||||
* The postal code.
|
||||
*/
|
||||
postal_code?: string
|
||||
|
||||
/**
|
||||
* Address metadata.
|
||||
*/
|
||||
metadata?: Record<string, unknown> | null
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -468,6 +473,11 @@ export interface TaxCalculationContext {
|
||||
* The groups that the customer belongs to.
|
||||
*/
|
||||
customer_groups: string[]
|
||||
|
||||
/**
|
||||
* Customer metadata.
|
||||
*/
|
||||
metadata?: Record<string, unknown> | null
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user