diff --git a/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts b/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts index 246294fe5ef38..21cd151bf5aff 100644 --- a/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts +++ b/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts @@ -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, + }) + }) + }) }) }, }) 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 dd02e0c1f314b..4fb049bf2830d 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 @@ -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 = { diff --git a/packages/core/core-flows/src/tax/steps/get-item-tax-lines.ts b/packages/core/core-flows/src/tax/steps/get-item-tax-lines.ts index b500bd7ae2043..e9576bf681816 100644 --- a/packages/core/core-flows/src/tax/steps/get-item-tax-lines.ts +++ b/packages/core/core-flows/src/tax/steps/get-item-tax-lines.ts @@ -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, diff --git a/packages/core/types/src/tax/common.ts b/packages/core/types/src/tax/common.ts index 219013babe0f5..a3fa60b287bcf 100644 --- a/packages/core/types/src/tax/common.ts +++ b/packages/core/types/src/tax/common.ts @@ -448,6 +448,11 @@ export interface TaxCalculationContext { * The postal code. */ postal_code?: string + + /** + * Address metadata. + */ + metadata?: Record | null } /** @@ -468,6 +473,11 @@ export interface TaxCalculationContext { * The groups that the customer belongs to. */ customer_groups: string[] + + /** + * Customer metadata. + */ + metadata?: Record | null } /**