fix(core-flows): Access orderItem.variant safely inside convertDraftOrderWorkflow when containing custom items (#14233)
* Access orderItem variant safely on convert draft order workflow * Tests * Add changest * Remove .only from test
This commit is contained in:
5
.changeset/three-dodos-admire.md
Normal file
5
.changeset/three-dodos-admire.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@medusajs/core-flows": patch
|
||||
---
|
||||
|
||||
fix(core-flows): Access orderItem.variant safely inside convertDraftOrderWorkflow when containing custom items
|
||||
@@ -416,6 +416,102 @@ medusaIntegrationTestRunner({
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.data.order.status).toBe("pending")
|
||||
})
|
||||
|
||||
it("should convert a draft order with a custom item (without variant_id) to an order", async () => {
|
||||
await api.post(
|
||||
`/admin/draft-orders/${testDraftOrder.id}/edit`,
|
||||
{},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
await api.post(
|
||||
`/admin/draft-orders/${testDraftOrder.id}/edit/items`,
|
||||
{
|
||||
items: [
|
||||
{
|
||||
title: "Custom Item",
|
||||
quantity: 2,
|
||||
unit_price: 1500,
|
||||
},
|
||||
],
|
||||
},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
await api.post(
|
||||
`/admin/draft-orders/${testDraftOrder.id}/edit/confirm`,
|
||||
{},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
const response = await api.post(
|
||||
`/admin/draft-orders/${testDraftOrder.id}/convert-to-order`,
|
||||
{},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.data.order.status).toBe("pending")
|
||||
})
|
||||
|
||||
it("should convert a draft order with both variant items and custom items to an order", async () => {
|
||||
await api.post(
|
||||
`/admin/draft-orders/${testDraftOrder.id}/edit`,
|
||||
{},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
await api.post(
|
||||
`/admin/draft-orders/${testDraftOrder.id}/edit/items`,
|
||||
{
|
||||
items: [
|
||||
{
|
||||
variant_id: product.variants.find((v) => v.title === "L shirt")
|
||||
.id,
|
||||
quantity: 1,
|
||||
},
|
||||
{
|
||||
title: "Custom Item",
|
||||
quantity: 1,
|
||||
unit_price: 2000,
|
||||
},
|
||||
],
|
||||
},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
await api.post(
|
||||
`/admin/draft-orders/${testDraftOrder.id}/edit/confirm`,
|
||||
{},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
let reservations = (await api.get(`/admin/reservations`, adminHeaders))
|
||||
.data.reservations
|
||||
|
||||
expect(reservations.length).toBe(0)
|
||||
|
||||
const response = await api.post(
|
||||
`/admin/draft-orders/${testDraftOrder.id}/convert-to-order`,
|
||||
{},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
reservations = (await api.get(`/admin/reservations`, adminHeaders)).data
|
||||
.reservations
|
||||
|
||||
expect(reservations).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
inventory_item_id: inventoryItemLarge.id,
|
||||
quantity: 1,
|
||||
}),
|
||||
])
|
||||
)
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.data.order.status).toBe("pending")
|
||||
})
|
||||
})
|
||||
|
||||
describe("POST /draft-orders/:id/edit/items/:item_id", () => {
|
||||
|
||||
@@ -143,11 +143,13 @@ export const convertDraftOrderWorkflow = createWorkflow(
|
||||
|
||||
for (const orderItem of orderItems.items ?? []) {
|
||||
items.push({
|
||||
variant_id: orderItem.variant.id,
|
||||
variant_id: orderItem.variant?.id,
|
||||
quantity: orderItem.quantity,
|
||||
id: orderItem.id,
|
||||
})
|
||||
variants.push(orderItem.variant)
|
||||
if (orderItem.variant) {
|
||||
variants.push(orderItem.variant)
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user