feat(translation,core-flows): translate remaining core entities and sync shipping option <> method translations (#14358)

* Get translated shipping options step

* Apply translations on shipping options list methods.

* Pass shipping option naem when refreshing cart shipping methods, so if locale changed, we update the name

* Update translatable fields config

* Cart shipping method update translation tests

* Shipping options translations tests

* Add changeset

* Update order shipping method translations on update

* Remove unnecessary workflow and use step instead

* Translate shipping method on order edit

* Use new update shipping methods tranlsations step

* Draft order shipping method translation sync

* Translate shipping method on order exchange

* Translate returns shipping methods

* Translate claims shipping methods

* Remove unnecessary check

* Early return

* Fix import

---------

Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
Nicolas Gorga
2026-01-02 11:26:06 +01:00
committed by GitHub
co-authored by Oli Juhl
parent 5f807ee657
commit 11de7e3e34
25 changed files with 2831 additions and 27 deletions
@@ -33,6 +33,7 @@ medusaIntegrationTestRunner({
let shippingProfile: { id: string }
let stockLocation: { id: string }
let shippingOption: { id: string }
let additionalShippingOption: { id: string }
let inventoryItem: { id: string }
beforeAll(async () => {
@@ -196,6 +197,27 @@ medusaIntegrationTestRunner({
)
).data.shipping_option
additionalShippingOption = (
await api.post(
`/admin/shipping-options`,
{
name: "Additional shipping option",
service_zone_id: fulfillmentSet.service_zones[0].id,
shipping_profile_id: shippingProfile.id,
provider_id: "manual_test-provider",
price_type: "flat",
type: {
label: "Test type",
description: "Test description",
code: "test-code",
},
prices: [{ currency_code: "usd", amount: 500 }],
rules: [],
},
adminHeaders
)
).data.shipping_option
await api.post(
"/admin/translations/batch",
{
@@ -242,6 +264,38 @@ medusaIntegrationTestRunner({
locale_code: "de-DE",
translations: { title: "Mittel" },
},
{
reference_id: shippingOption.id,
reference: "shipping_option",
locale_code: "fr-FR",
translations: {
name: "Option d'expédition de test",
},
},
{
reference_id: shippingOption.id,
reference: "shipping_option",
locale_code: "de-DE",
translations: {
name: "Test-Versandoption",
},
},
{
reference_id: additionalShippingOption.id,
reference: "shipping_option",
locale_code: "fr-FR",
translations: {
name: "Option d'expédition supplémentaire",
},
},
{
reference_id: additionalShippingOption.id,
reference: "shipping_option",
locale_code: "de-DE",
translations: {
name: "Zusätzliche Versandoption",
},
},
],
},
adminHeaders
@@ -414,6 +468,96 @@ medusaIntegrationTestRunner({
)
})
})
describe("POST /admin/order-edits/:id/shipping-method (add shipping method during order edit)", () => {
it("should translate shipping method added during order edit using order locale", async () => {
const order = await createOrderFromCart("fr-FR")
await api.post(
"/admin/order-edits",
{ order_id: order.id },
adminHeaders
)
const previewResponse = await api.post(
`/admin/order-edits/${order.id}/shipping-method`,
{ shipping_option_id: additionalShippingOption.id },
adminHeaders
)
expect(previewResponse.data.order_preview.shipping_methods).toEqual(
expect.arrayContaining([
expect.objectContaining({
shipping_option_id: additionalShippingOption.id,
name: "Option d'expédition supplémentaire",
}),
])
)
await api.post(
`/admin/order-edits/${order.id}/confirm`,
{},
adminHeaders
)
const updatedOrder = (
await api.get(`/admin/orders/${order.id}`, adminHeaders)
).data.order
expect(updatedOrder.shipping_methods).toEqual(
expect.arrayContaining([
expect.objectContaining({
shipping_option_id: additionalShippingOption.id,
name: "Option d'expédition supplémentaire",
}),
])
)
})
it("should have original shipping method name when order has no locale", async () => {
const order = await createOrderFromCart()
await api.post(
"/admin/order-edits",
{ order_id: order.id },
adminHeaders
)
const previewResponse = await api.post(
`/admin/order-edits/${order.id}/shipping-method`,
{ shipping_option_id: additionalShippingOption.id },
adminHeaders
)
expect(previewResponse.data.order_preview.shipping_methods).toEqual(
expect.arrayContaining([
expect.objectContaining({
shipping_option_id: additionalShippingOption.id,
name: "Additional shipping option",
}),
])
)
await api.post(
`/admin/order-edits/${order.id}/confirm`,
{},
adminHeaders
)
const updatedOrder = (
await api.get(`/admin/orders/${order.id}`, adminHeaders)
).data.order
expect(updatedOrder.shipping_methods).toEqual(
expect.arrayContaining([
expect.objectContaining({
shipping_option_id: additionalShippingOption.id,
name: "Additional shipping option",
}),
])
)
})
})
})
},
})