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 07:26:06 -03:00
committed by GitHub
parent 5f807ee657
commit 11de7e3e34
25 changed files with 2831 additions and 27 deletions

View File

@@ -208,6 +208,22 @@ 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",
},
},
],
},
adminHeaders
@@ -480,6 +496,202 @@ medusaIntegrationTestRunner({
)
})
})
describe("POST /admin/draft-orders/:id/edit/shipping-methods (add shipping method to draft order)", () => {
it("should translate shipping method added to draft order using draft order locale", async () => {
const draftOrder = (
await api.post(
"/admin/draft-orders",
{
email: "test@test.com",
region_id: region.id,
sales_channel_id: salesChannel.id,
locale: "fr-FR",
shipping_address: {
address_1: "123 Main St",
city: "Anytown",
country_code: "us",
postal_code: "12345",
first_name: "John",
},
},
adminHeaders
)
).data.draft_order
await api.post(
`/admin/draft-orders/${draftOrder.id}/edit`,
{},
adminHeaders
)
const previewResponse = await api.post(
`/admin/draft-orders/${draftOrder.id}/edit/shipping-methods`,
{ shipping_option_id: shippingOption.id },
adminHeaders
)
expect(
previewResponse.data.draft_order_preview.shipping_methods
).toEqual(
expect.arrayContaining([
expect.objectContaining({
shipping_option_id: shippingOption.id,
name: "Option d'expédition de test",
}),
])
)
await api.post(
`/admin/draft-orders/${draftOrder.id}/edit/confirm`,
{},
adminHeaders
)
const updatedDraftOrder = (
await api.get(`/admin/draft-orders/${draftOrder.id}`, adminHeaders)
).data.draft_order
expect(updatedDraftOrder.shipping_methods).toEqual(
expect.arrayContaining([
expect.objectContaining({
shipping_option_id: shippingOption.id,
name: "Option d'expédition de test",
}),
])
)
})
it("should have original shipping method name when draft order has no locale", async () => {
const draftOrder = (
await api.post(
"/admin/draft-orders",
{
email: "test@test.com",
region_id: region.id,
sales_channel_id: salesChannel.id,
shipping_address: {
address_1: "123 Main St",
city: "Anytown",
country_code: "us",
postal_code: "12345",
first_name: "John",
},
},
adminHeaders
)
).data.draft_order
await api.post(
`/admin/draft-orders/${draftOrder.id}/edit`,
{},
adminHeaders
)
const previewResponse = await api.post(
`/admin/draft-orders/${draftOrder.id}/edit/shipping-methods`,
{ shipping_option_id: shippingOption.id },
adminHeaders
)
expect(
previewResponse.data.draft_order_preview.shipping_methods
).toEqual(
expect.arrayContaining([
expect.objectContaining({
shipping_option_id: shippingOption.id,
name: "Test shipping option",
}),
])
)
await api.post(
`/admin/draft-orders/${draftOrder.id}/edit/confirm`,
{},
adminHeaders
)
const updatedDraftOrder = (
await api.get(`/admin/draft-orders/${draftOrder.id}`, adminHeaders)
).data.draft_order
expect(updatedDraftOrder.shipping_methods).toEqual(
expect.arrayContaining([
expect.objectContaining({
shipping_option_id: shippingOption.id,
name: "Test shipping option",
}),
])
)
})
})
describe("POST /admin/draft-orders/:id (update draft order locale)", () => {
it("should re-translate shipping methods when locale is updated", async () => {
const draftOrder = (
await api.post(
"/admin/draft-orders",
{
email: "test@test.com",
region_id: region.id,
sales_channel_id: salesChannel.id,
locale: "fr-FR",
shipping_address: {
address_1: "123 Main St",
city: "Anytown",
country_code: "us",
postal_code: "12345",
first_name: "John",
},
},
adminHeaders
)
).data.draft_order
await api.post(
`/admin/draft-orders/${draftOrder.id}/edit`,
{},
adminHeaders
)
await api.post(
`/admin/draft-orders/${draftOrder.id}/edit/shipping-methods`,
{ shipping_option_id: shippingOption.id },
adminHeaders
)
await api.post(
`/admin/draft-orders/${draftOrder.id}/edit/confirm`,
{},
adminHeaders
)
let updatedDraftOrder = (
await api.get(`/admin/draft-orders/${draftOrder.id}`, adminHeaders)
).data.draft_order
expect(updatedDraftOrder.shipping_methods[0].name).toEqual(
"Option d'expédition de test"
)
await api.post(
`/admin/draft-orders/${draftOrder.id}`,
{ locale: "de-DE" },
adminHeaders
)
updatedDraftOrder = (
await api.get(`/admin/draft-orders/${draftOrder.id}`, adminHeaders)
).data.draft_order
expect(updatedDraftOrder.shipping_methods[0]).toEqual(
expect.objectContaining({
shipping_option_id: shippingOption.id,
name: "Test-Versandoption",
})
)
})
})
})
},
})