Skip to content

Commit

Permalink
fix(core-flows): fixes case where inventory attempts delete when inpu…
Browse files Browse the repository at this point in the history
…t is empty (#9156)

what:

- when an empty array is passed to the workflow, it attempts to delete all inventory locations. This PR adds a conditional to prevent it from happening.

RESOLVES CC-477

Fixes #9154
  • Loading branch information
riqwan authored Sep 17, 2024
1 parent 175ca30 commit 987d007
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 5 deletions.
32 changes: 32 additions & 0 deletions integration-tests/http/__tests__/inventory/admin/inventory.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,38 @@ medusaIntegrationTestRunner({
message: `Cannot remove Inventory Levels for ${stockLocation1.id} because there are stocked or reserved items at the locations`,
})
})

it("should successfully add an inventory location", async () => {
await api.post(
`/admin/inventory-items/${inventoryItem1.id}/location-levels/${stockLocation1.id}`,
{ stocked_quantity: 10 },
adminHeaders
)

await api.post(
`/admin/inventory-items/${inventoryItem1.id}/location-levels/batch`,
{ create: [{ location_id: stockLocation2.id }] },
adminHeaders
)

const {
data: { inventory_levels: inventoryLevels },
} = await api.get(
`/admin/inventory-items/${inventoryItem1.id}/location-levels`,
adminHeaders
)

expect(inventoryLevels).toEqual(
expect.arrayContaining([
expect.objectContaining({
location_id: stockLocation1.id,
}),
expect.objectContaining({
location_id: stockLocation2.id,
}),
])
)
})
})

describe("DELETE /admin/inventory-items/:id/location-levels/:id", () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { InventoryLevelDTO, InventoryTypes } from "@medusajs/types"
import {
createWorkflow,
when,
WorkflowData,
WorkflowResponse,
} from "@medusajs/workflows-sdk"
Expand All @@ -22,12 +23,22 @@ export const bulkCreateDeleteLevelsWorkflow = createWorkflow(
(
input: WorkflowData<BulkCreateDeleteLevelsWorkflowInput>
): WorkflowResponse<InventoryLevelDTO[]> => {
deleteInventoryLevelsWorkflow.runAsStep({
input: {
$or: input.deletes,
},
when({ input }, ({ input }) => {
return !!input.deletes?.length
}).then(() => {
deleteInventoryLevelsWorkflow.runAsStep({
input: {
$or: input.deletes,
},
})
})

return new WorkflowResponse(createInventoryLevelsStep(input.creates))
const created = when({ input }, ({ input }) => {
return !!input.creates?.length
}).then(() => {
return createInventoryLevelsStep(input.creates)
})

return new WorkflowResponse(created || [])
}
)

0 comments on commit 987d007

Please sign in to comment.