Files
medusa-store/integration-tests/http/__tests__/claims/claims-translations.spec.ts
Nicolas Gorga d60ea7268a feat(translation,fulfillment,customer,product,region,tax,core-flows,medusa,types): Implement dynamic translation settings management (#14536)
* Add is_active field to translation_settings model

* Types

* Workflows

* Api layer

* Tests

* Add changeset

* Add comment

* Hook to create or deactivate translatable entities on startup

* Cleanup old code

* Configure translatable option for core entities

* Validation step and snake case correction

* Cleanup

* Tests

* Comment in PR

* Update changeset

* Mock DmlEntity.getTranslatableEntities

* Move validation to module service layer

* Remove validation from remaining workflow

* Return object directly

* Type improvements

* Remove .only from tests

* Apply snakeCase

* Fix tests

* Fix tests

* Remove unnecessary map and use set instead

* Fix tests

* Comments

* Include translatable product properties

* Avoid race condition in translations tests

* Update test
2026-01-14 07:09:49 -03:00

1152 lines
32 KiB
TypeScript

import { medusaIntegrationTestRunner } from "@medusajs/test-utils"
import { MedusaContainer } from "@medusajs/types"
import {
ClaimReason,
ClaimType,
ContainerRegistrationKeys,
Modules,
ProductStatus,
RuleOperator,
} from "@medusajs/utils"
import {
adminHeaders,
createAdminUser,
} from "../../../helpers/create-admin-user"
import { setupTaxStructure } from "../../../modules/__tests__/fixtures"
jest.setTimeout(60000)
process.env.MEDUSA_FF_TRANSLATION = "true"
medusaIntegrationTestRunner({
testSuite: ({ dbConnection, getContainer, api }) => {
let appContainer: MedusaContainer
let order
let product
let productExtra
let shippingProfile
let stockLocation
let location
let fulfillmentSet
let inventoryItem
let inventoryItemExtra
let taxRate
let salesChannel
let region
let customer
let shippingOption
let returnShippingOption
let outboundShippingOption
const shippingProviderId = "manual_test-provider"
beforeEach(async () => {
appContainer = getContainer()
const translationModule = appContainer.resolve(Modules.TRANSLATION)
await translationModule.__hooks?.onApplicationStart?.().catch(() => {})
await createAdminUser(dbConnection, adminHeaders, appContainer)
const taxStructure = await setupTaxStructure(
appContainer.resolve(Modules.TAX)
)
const storeModule = appContainer.resolve(Modules.STORE)
const [defaultStore] = await storeModule.listStores(
{},
{ select: ["id"], take: 1 }
)
await storeModule.updateStores(defaultStore.id, {
supported_locales: [
{ locale_code: "en-US" },
{ locale_code: "fr-FR" },
{ locale_code: "de-DE" },
],
})
region = (
await api.post(
"/admin/regions",
{
name: "test-region",
currency_code: "usd",
},
adminHeaders
)
).data.region
customer = (
await api.post(
"/admin/customers",
{
first_name: "joe",
email: "joe@admin.com",
},
adminHeaders
)
).data.customer
salesChannel = (
await api.post(
"/admin/sales-channels",
{
name: "Test channel",
},
adminHeaders
)
).data.sales_channel
shippingProfile = (
await api.post(
`/admin/shipping-profiles`,
{
name: "Test",
type: "default",
},
adminHeaders
)
).data.shipping_profile
location = (
await api.post(
`/admin/stock-locations`,
{ name: "Test location" },
adminHeaders
)
).data.stock_location
inventoryItem = (
await api.post(
`/admin/inventory-items`,
{ sku: "test-variant" },
adminHeaders
)
).data.inventory_item
await api.post(
`/admin/inventory-items/${inventoryItem.id}/location-levels`,
{ location_id: location.id, stocked_quantity: 10 },
adminHeaders
)
await api.post(
`/admin/stock-locations/${location.id}/sales-channels`,
{ add: [salesChannel.id] },
adminHeaders
)
product = (
await api.post(
"/admin/products",
{
title: "Test product",
status: ProductStatus.PUBLISHED,
options: [{ title: "size", values: ["large", "small"] }],
shipping_profile_id: shippingProfile.id,
variants: [
{
title: "Test variant",
sku: "test-variant",
options: { size: "large" },
inventory_items: [
{
inventory_item_id: inventoryItem.id,
required_quantity: 1,
},
],
prices: [{ currency_code: "usd", amount: 25 }],
},
],
},
adminHeaders
)
).data.product
productExtra = (
await api.post(
"/admin/products",
{
title: "Extra product",
status: ProductStatus.PUBLISHED,
options: [{ title: "size", values: ["large", "small"] }],
shipping_profile_id: shippingProfile.id,
variants: [
{
title: "Extra variant",
sku: "extra-variant",
options: { size: "large" },
prices: [{ currency_code: "usd", amount: 50 }],
},
],
},
adminHeaders
)
).data.product
stockLocation = (
await api.post(
`/admin/stock-locations/${location.id}/fulfillment-sets?fields=*fulfillment_sets`,
{ name: "Test", type: "test-type" },
adminHeaders
)
).data.stock_location
fulfillmentSet = (
await api.post(
`/admin/fulfillment-sets/${stockLocation.fulfillment_sets[0].id}/service-zones`,
{
name: "Test",
geo_zones: [{ type: "country", country_code: "us" }],
},
adminHeaders
)
).data.fulfillment_set
inventoryItemExtra = (
await api.get(`/admin/inventory-items?sku=extra-variant`, adminHeaders)
).data.inventory_items[0]
await api.post(
`/admin/inventory-items/${inventoryItemExtra.id}/location-levels`,
{
location_id: location.id,
stocked_quantity: 10,
},
adminHeaders
)
const remoteLink = appContainer.resolve(
ContainerRegistrationKeys.REMOTE_LINK
)
await api.post(
`/admin/stock-locations/${stockLocation.id}/fulfillment-providers`,
{ add: [shippingProviderId] },
adminHeaders
)
shippingOption = (
await api.post(
"/admin/shipping-options",
{
name: "Test shipping option",
service_zone_id: fulfillmentSet.service_zones[0].id,
shipping_profile_id: shippingProfile.id,
provider_id: shippingProviderId,
price_type: "flat",
type: {
label: "Test type",
description: "Test description",
code: "test-code",
},
prices: [
{
currency_code: "usd",
amount: 10,
},
],
rules: [],
},
adminHeaders
)
).data.shipping_option
returnShippingOption = (
await api.post(
"/admin/shipping-options",
{
name: "Return shipping",
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: 1500 }],
rules: [
{
operator: RuleOperator.EQ,
attribute: "is_return",
value: "true",
},
],
},
adminHeaders
)
).data.shipping_option
outboundShippingOption = (
await api.post(
"/admin/shipping-options",
{
name: "Outbound shipping",
service_zone_id: fulfillmentSet.service_zones[0].id,
shipping_profile_id: shippingProfile.id,
provider_id: shippingProviderId,
price_type: "flat",
type: {
label: "Test type",
description: "Test description",
code: "test-code",
},
prices: [{ currency_code: "usd", amount: 0 }],
rules: [
{
operator: RuleOperator.EQ,
attribute: "is_return",
value: "false",
},
],
},
adminHeaders
)
).data.shipping_option
await remoteLink.create([
{
[Modules.STOCK_LOCATION]: {
stock_location_id: stockLocation.id,
},
[Modules.FULFILLMENT]: {
fulfillment_provider_id: shippingProviderId,
},
},
{
[Modules.STOCK_LOCATION]: {
stock_location_id: stockLocation.id,
},
[Modules.FULFILLMENT]: {
fulfillment_set_id: fulfillmentSet.id,
},
},
{
[Modules.SALES_CHANNEL]: {
sales_channel_id: salesChannel.id,
},
[Modules.STOCK_LOCATION]: {
stock_location_id: stockLocation.id,
},
},
{
[Modules.PRODUCT]: {
variant_id: product.variants[0].id,
},
[Modules.INVENTORY]: {
inventory_item_id: inventoryItem.id,
},
},
{
[Modules.PRODUCT]: {
variant_id: productExtra.variants[0].id,
},
[Modules.INVENTORY]: {
inventory_item_id: inventoryItemExtra.id,
},
},
])
const taxRatesResponse = await api.get(
`/admin/tax-rates?tax_region_id=${taxStructure.us.children.cal.province.id}`,
adminHeaders
)
taxRate = taxRatesResponse.data.tax_rates.find(
(rate: { code: string }) => rate.code === "CADEFAULT"
)
// Create translations for tax rates and shipping options
await api.post(
"/admin/translations/batch",
{
create: [
{
reference_id: taxRate.id,
reference: "tax_rate",
locale_code: "fr-FR",
translations: {
name: "Taux par défaut CA",
},
},
{
reference_id: taxRate.id,
reference: "tax_rate",
locale_code: "de-DE",
translations: {
name: "CA Standardsteuersatz",
},
},
{
reference_id: returnShippingOption.id,
reference: "shipping_option",
locale_code: "fr-FR",
translations: { name: "Expédition de retour" },
},
{
reference_id: returnShippingOption.id,
reference: "shipping_option",
locale_code: "de-DE",
translations: { name: "Rückversand" },
},
{
reference_id: outboundShippingOption.id,
reference: "shipping_option",
locale_code: "fr-FR",
translations: { name: "Expédition sortante" },
},
{
reference_id: outboundShippingOption.id,
reference: "shipping_option",
locale_code: "de-DE",
translations: { name: "Ausgehende Versand" },
},
],
},
adminHeaders
)
})
const createOrderWithLocale = async (locale?: string) => {
const orderModule = appContainer.resolve(Modules.ORDER)
const inventoryModule = appContainer.resolve(Modules.INVENTORY)
const createdOrder = await orderModule.createOrders({
region_id: region.id,
email: "foo@bar.com",
locale,
items: [
{
title: "Custom Item",
variant_id: product.variants[0].id,
quantity: 2,
unit_price: 25,
},
],
sales_channel_id: salesChannel.id,
shipping_address: {
customer_id: customer.id,
first_name: "Test",
last_name: "Test",
address_1: "Test",
city: "Test",
country_code: "US",
province: "CA",
postal_code: "12345",
phone: "12345",
},
billing_address: {
customer_id: customer.id,
first_name: "Test",
last_name: "Test",
address_1: "Test",
city: "Test",
country_code: "US",
province: "CA",
postal_code: "12345",
},
shipping_methods: [
{
name: "Test shipping method",
amount: 10,
data: {},
shipping_option_id: shippingOption.id,
},
],
currency_code: "usd",
customer_id: customer.id,
transactions: [
{
amount: 60,
currency_code: "usd",
},
],
})
await inventoryModule.createReservationItems([
{
inventory_item_id: inventoryItem.id,
location_id: stockLocation.id,
quantity: 2,
line_item_id: createdOrder.items![0].id,
},
])
// Fulfill the order
await api.post(
`/admin/orders/${createdOrder.id}/fulfillments`,
{
items: [
{
id: createdOrder.items![0].id,
quantity: 2,
},
],
},
adminHeaders
)
return createdOrder
}
describe("Claims tax line translations", () => {
describe("when adding outbound items to a claim", () => {
it("should translate tax lines based on order locale when adding new items", async () => {
order = await createOrderWithLocale("fr-FR")
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/outbound/items`,
{
items: [
{
variant_id: productExtra.variants[0].id,
quantity: 1,
},
],
},
adminHeaders
)
await api.post(`/admin/claims/${claim.id}/request`, {}, adminHeaders)
const updatedOrder = (
await api.get(`/admin/orders/${order.id}`, adminHeaders)
).data.order
const newItem = updatedOrder.items.find(
(item) => item.title === "Extra product"
)
expect(newItem).toBeDefined()
expect(newItem.tax_lines).toBeDefined()
expect(newItem.tax_lines.length).toBeGreaterThan(0)
const taxLine = newItem.tax_lines.find(
(tl) => tl.code === "CADEFAULT"
)
expect(taxLine).toBeDefined()
expect(taxLine.description).toEqual("Taux par défaut CA")
})
it("should use original tax line description when order has no locale", async () => {
order = await createOrderWithLocale()
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/outbound/items`,
{
items: [
{
variant_id: productExtra.variants[0].id,
quantity: 1,
},
],
},
adminHeaders
)
await api.post(`/admin/claims/${claim.id}/request`, {}, adminHeaders)
const updatedOrder = (
await api.get(`/admin/orders/${order.id}`, adminHeaders)
).data.order
const newItem = updatedOrder.items.find(
(item) => item.title === "Extra product"
)
expect(newItem).toBeDefined()
expect(newItem.tax_lines).toBeDefined()
expect(newItem.tax_lines.length).toBeGreaterThan(0)
const taxLine = newItem.tax_lines.find(
(tl) => tl.code === "CADEFAULT"
)
expect(taxLine).toBeDefined()
expect(taxLine.description).toEqual("CA Default Rate")
})
})
describe("when adding outbound shipping methods to a claim", () => {
it("should translate shipping method tax lines based on order locale", async () => {
order = await createOrderWithLocale("fr-FR")
await api.post(
`/admin/orders/${order.id}`,
{ locale: "fr-FR" },
adminHeaders
)
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/outbound/items`,
{
items: [
{
variant_id: productExtra.variants[0].id,
quantity: 1,
},
],
},
adminHeaders
)
await api.post(
`/admin/claims/${claim.id}/outbound/shipping-method`,
{ shipping_option_id: outboundShippingOption.id },
adminHeaders
)
await api.post(`/admin/claims/${claim.id}/request`, {}, adminHeaders)
const updatedOrder = (
await api.get(`/admin/orders/${order.id}`, adminHeaders)
).data.order
const outboundShippingMethod = updatedOrder.shipping_methods.find(
(sm) => sm.shipping_option_id === outboundShippingOption.id
)
expect(outboundShippingMethod.tax_lines.length).toBeGreaterThan(0)
const taxLine = outboundShippingMethod.tax_lines.find(
(tl) => tl.code === "CADEFAULT"
)
expect(taxLine.description).toEqual("Taux par défaut CA")
})
it("should use original tax line description when order has no locale", async () => {
order = await createOrderWithLocale()
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/outbound/items`,
{
items: [
{
variant_id: productExtra.variants[0].id,
quantity: 1,
},
],
},
adminHeaders
)
await api.post(
`/admin/claims/${claim.id}/outbound/shipping-method`,
{ shipping_option_id: outboundShippingOption.id },
adminHeaders
)
await api.post(`/admin/claims/${claim.id}/request`, {}, adminHeaders)
const updatedOrder = (
await api.get(`/admin/orders/${order.id}`, adminHeaders)
).data.order
const outboundShippingMethod = updatedOrder.shipping_methods.find(
(sm) => sm.shipping_option_id === outboundShippingOption.id
)
expect(outboundShippingMethod.tax_lines.length).toBeGreaterThan(0)
const taxLine = outboundShippingMethod.tax_lines.find(
(tl) => tl.code === "CADEFAULT"
)
expect(taxLine.description).toEqual("CA Default Rate")
})
})
describe("when updating outbound items in a claim", () => {
it("should preserve tax line translations when updating item quantity", async () => {
order = await createOrderWithLocale("fr-FR")
await api.post(
`/admin/orders/${order.id}`,
{ locale: "fr-FR" },
adminHeaders
)
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
const addItemResponse = await api.post(
`/admin/claims/${claim.id}/outbound/items`,
{
items: [
{
variant_id: productExtra.variants[0].id,
quantity: 1,
},
],
},
adminHeaders
)
const actionId = addItemResponse.data.order_preview.items.find(
(item) =>
!!item.actions?.find((action) => action.action === "ITEM_ADD")
).actions[0].id
await api.post(
`/admin/claims/${claim.id}/outbound/items/${actionId}`,
{
quantity: 2,
},
adminHeaders
)
await api.post(`/admin/claims/${claim.id}/request`, {}, adminHeaders)
const updatedOrder = (
await api.get(`/admin/orders/${order.id}`, adminHeaders)
).data.order
const newItem = updatedOrder.items.find(
(item) => item.title === "Extra product"
)
expect(newItem).toBeDefined()
expect(newItem.tax_lines).toBeDefined()
expect(newItem.tax_lines.length).toBeGreaterThan(0)
const taxLine = newItem.tax_lines.find(
(tl) => tl.code === "CADEFAULT"
)
expect(taxLine).toBeDefined()
expect(taxLine.description).toEqual("Taux par défaut CA")
})
})
})
describe("Claim shipping method translation", () => {
describe("Inbound (return) shipping method", () => {
it("should translate inbound shipping method name using French locale", async () => {
order = await createOrderWithLocale("fr-FR")
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/inbound/items`,
{
items: [
{
id: order.items![0].id,
quantity: 1,
reason: ClaimReason.PRODUCTION_FAILURE,
},
],
},
adminHeaders
)
const shippingMethodResult = await api.post(
`/admin/claims/${claim.id}/inbound/shipping-method`,
{ shipping_option_id: returnShippingOption.id },
adminHeaders
)
const inboundShippingMethod =
shippingMethodResult.data.order_preview.shipping_methods.find(
(sm: any) => sm.shipping_option_id === returnShippingOption.id
)
expect(inboundShippingMethod).toEqual(
expect.objectContaining({
name: "Expédition de retour",
shipping_option_id: returnShippingOption.id,
})
)
})
it("should use original inbound shipping method name when order has no locale", async () => {
order = await createOrderWithLocale()
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/inbound/items`,
{
items: [
{
id: order.items![0].id,
quantity: 1,
reason: ClaimReason.PRODUCTION_FAILURE,
},
],
},
adminHeaders
)
const shippingMethodResult = await api.post(
`/admin/claims/${claim.id}/inbound/shipping-method`,
{ shipping_option_id: returnShippingOption.id },
adminHeaders
)
const inboundShippingMethod =
shippingMethodResult.data.order_preview.shipping_methods.find(
(sm: any) => sm.shipping_option_id === returnShippingOption.id
)
expect(inboundShippingMethod).toEqual(
expect.objectContaining({
name: "Return shipping",
shipping_option_id: returnShippingOption.id,
})
)
})
})
describe("Outbound shipping method", () => {
it("should translate outbound shipping method", async () => {
order = await createOrderWithLocale("fr-FR")
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/inbound/items`,
{
items: [
{
id: order.items![0].id,
quantity: 1,
reason: ClaimReason.PRODUCTION_FAILURE,
},
],
},
adminHeaders
)
await api.post(
`/admin/claims/${claim.id}/outbound/items`,
{
items: [
{
variant_id: productExtra.variants[0].id,
quantity: 1,
},
],
},
adminHeaders
)
const shippingMethodResult = await api.post(
`/admin/claims/${claim.id}/outbound/shipping-method`,
{ shipping_option_id: outboundShippingOption.id },
adminHeaders
)
const outboundShippingMethod =
shippingMethodResult.data.order_preview.shipping_methods.find(
(sm: any) => sm.shipping_option_id === outboundShippingOption.id
)
expect(outboundShippingMethod).toEqual(
expect.objectContaining({
name: "Expédition sortante",
shipping_option_id: outboundShippingOption.id,
})
)
})
it("should use original outbound shipping method name when order has no locale", async () => {
order = await createOrderWithLocale()
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/inbound/items`,
{
items: [
{
id: order.items![0].id,
quantity: 1,
reason: ClaimReason.PRODUCTION_FAILURE,
},
],
},
adminHeaders
)
await api.post(
`/admin/claims/${claim.id}/outbound/items`,
{
items: [
{
variant_id: productExtra.variants[0].id,
quantity: 1,
},
],
},
adminHeaders
)
const shippingMethodResult = await api.post(
`/admin/claims/${claim.id}/outbound/shipping-method`,
{ shipping_option_id: outboundShippingOption.id },
adminHeaders
)
const outboundShippingMethod =
shippingMethodResult.data.order_preview.shipping_methods.find(
(sm: any) => sm.shipping_option_id === outboundShippingOption.id
)
expect(outboundShippingMethod).toEqual(
expect.objectContaining({
name: "Outbound shipping",
shipping_option_id: outboundShippingOption.id,
})
)
})
})
describe("Both inbound and outbound shipping methods", () => {
it("should translate both shipping methods", async () => {
order = await createOrderWithLocale("fr-FR")
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/inbound/items`,
{
items: [
{
id: order.items![0].id,
quantity: 1,
reason: ClaimReason.PRODUCTION_FAILURE,
},
],
},
adminHeaders
)
await api.post(
`/admin/claims/${claim.id}/inbound/shipping-method`,
{ shipping_option_id: returnShippingOption.id },
adminHeaders
)
await api.post(
`/admin/claims/${claim.id}/outbound/items`,
{
items: [
{
variant_id: productExtra.variants[0].id,
quantity: 1,
},
],
},
adminHeaders
)
const result = await api.post(
`/admin/claims/${claim.id}/outbound/shipping-method`,
{ shipping_option_id: outboundShippingOption.id },
adminHeaders
)
const shippingMethods = result.data.order_preview.shipping_methods
const inboundShippingMethod = shippingMethods.find(
(sm: any) => sm.shipping_option_id === returnShippingOption.id
)
const outboundShippingMethod = shippingMethods.find(
(sm: any) => sm.shipping_option_id === outboundShippingOption.id
)
expect(inboundShippingMethod).toEqual(
expect.objectContaining({
name: "Expédition de retour",
shipping_option_id: returnShippingOption.id,
})
)
expect(outboundShippingMethod).toEqual(
expect.objectContaining({
name: "Expédition sortante",
shipping_option_id: outboundShippingOption.id,
})
)
})
it("should keep translations after confirming claim request", async () => {
order = await createOrderWithLocale("fr-FR")
const claim = (
await api.post(
"/admin/claims",
{
order_id: order.id,
type: ClaimType.REPLACE,
description: "Test claim",
},
adminHeaders
)
).data.claim
await api.post(
`/admin/claims/${claim.id}/inbound/items`,
{
items: [
{
id: order.items![0].id,
quantity: 1,
reason: ClaimReason.PRODUCTION_FAILURE,
},
],
},
adminHeaders
)
await api.post(
`/admin/claims/${claim.id}/inbound/shipping-method`,
{ shipping_option_id: returnShippingOption.id },
adminHeaders
)
await api.post(
`/admin/claims/${claim.id}/outbound/items`,
{
items: [
{
variant_id: productExtra.variants[0].id,
quantity: 1,
},
],
},
adminHeaders
)
await api.post(
`/admin/claims/${claim.id}/outbound/shipping-method`,
{ shipping_option_id: outboundShippingOption.id },
adminHeaders
)
await api.post(`/admin/claims/${claim.id}/request`, {}, adminHeaders)
const orderResult = await api.get(
`/admin/orders/${order.id}`,
adminHeaders
)
const shippingMethods = orderResult.data.order.shipping_methods
const outboundShippingMethod = shippingMethods.find(
(sm: any) => sm.shipping_option_id === outboundShippingOption.id
)
expect(outboundShippingMethod).toEqual(
expect.objectContaining({
name: "Expédition sortante",
shipping_option_id: outboundShippingOption.id,
})
)
})
})
})
},
})