fix(core-flows): select stock locations for reservation from correct SC (#10661)

* fix: add stock location for reservations only if related to correct SC

* fix: update spec

* fix: wrong SC id get in OE flow

* fix: ensure test case has multiple SC and SLs
This commit is contained in:
Frane Polić authored and GitHub committed 2024-12-20 09:25:19 +01:00
1 parent 8650e6178e
commit fc321e96ce
5 files changed
+52 -3

No files matched your search

@@ -2116,6 +2116,7 @@ medusaIntegrationTestRunner({
]) ])
let cart = await cartModuleService.createCarts({ let cart = await cartModuleService.createCarts({
sales_channel_id: salesChannel.id,
currency_code: "usd", currency_code: "usd",
items: [ items: [
{ {
@@ -1117,6 +1117,14 @@ medusaIntegrationTestRunner({
) )
).data.sales_channel ).data.sales_channel
const salesChannel2 = (
await api.post(
"/admin/sales-channels",
{ name: "second channel", description: "channel" },
adminHeaders
)
).data.sales_channel
stockLocation = ( stockLocation = (
await api.post( await api.post(
`/admin/stock-locations`, `/admin/stock-locations`,
@@ -1125,6 +1133,14 @@ medusaIntegrationTestRunner({
) )
).data.stock_location ).data.stock_location
const stockLocation2 = (
await api.post(
`/admin/stock-locations`,
{ name: "test location 2" },
adminHeaders
)
).data.stock_location
inventoryItem = ( inventoryItem = (
await api.post( await api.post(
`/admin/inventory-items`, `/admin/inventory-items`,
@@ -1144,12 +1160,27 @@ medusaIntegrationTestRunner({
adminHeaders adminHeaders
) )
await api.post(
`/admin/inventory-items/${inventoryItem.id}/location-levels`,
{
location_id: stockLocation2.id,
stocked_quantity: 10,
},
adminHeaders
)
await api.post( await api.post(
`/admin/stock-locations/${stockLocation.id}/sales-channels`, `/admin/stock-locations/${stockLocation.id}/sales-channels`,
{ add: [salesChannel.id] }, { add: [salesChannel.id] },
adminHeaders adminHeaders
) )
await api.post(
`/admin/stock-locations/${stockLocation2.id}/sales-channels`,
{ add: [salesChannel2.id] },
adminHeaders
)
shippingProfile = await fulfillmentModule.createShippingProfiles({ shippingProfile = await fulfillmentModule.createShippingProfiles({
name: "Test", name: "Test",
type: "default", type: "default",
@@ -1210,6 +1241,23 @@ medusaIntegrationTestRunner({
fulfillment_set_id: fulfillmentSet.id, fulfillment_set_id: fulfillmentSet.id,
}, },
}, },
{
[Modules.PRODUCT]: {
product_id: product.id,
},
[Modules.SALES_CHANNEL]: {
sales_channel_id: salesChannel2.id,
},
},
// Add product to 2 sales channels to test that the right stock location is selected for reservations
{
[Modules.PRODUCT]: {
product_id: product.id,
},
[Modules.SALES_CHANNEL]: {
sales_channel_id: salesChannel.id,
},
},
]) ])
promotion = ( promotion = (
@@ -67,7 +67,7 @@ export const prepareConfirmInventoryInput = (data: {
hasSalesChannelStockLocation = true hasSalesChannelStockLocation = true
} }
if (stock_locations) { if (stock_locations && sales_channels?.id === salesChannelId) {
stockLocationIds.add(stock_locations.id) stockLocationIds.add(stock_locations.id)
} }
@@ -5,7 +5,7 @@ import {
import { import {
Modules, Modules,
OrderStatus, OrderStatus,
OrderWorkflowEvents OrderWorkflowEvents,
} from "@medusajs/framework/utils" } from "@medusajs/framework/utils"
import { import {
createWorkflow, createWorkflow,
@@ -215,7 +215,7 @@ export const confirmOrderEditRequestWorkflow = createWorkflow(
const formatedInventoryItems = transform( const formatedInventoryItems = transform(
{ {
input: { input: {
sales_channel_id: (orderItems as any).order.sales_channel_id, sales_channel_id: (orderItems as any).sales_channel_id,
variants, variants,
items, items,
}, },