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.status).toBe(200)
|
||||||
expect(response.data.order.status).toBe("pending")
|
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", () => {
|
describe("POST /draft-orders/:id/edit/items/:item_id", () => {
|
||||||
|
|||||||
@@ -143,11 +143,13 @@ export const convertDraftOrderWorkflow = createWorkflow(
|
|||||||
|
|
||||||
for (const orderItem of orderItems.items ?? []) {
|
for (const orderItem of orderItems.items ?? []) {
|
||||||
items.push({
|
items.push({
|
||||||
variant_id: orderItem.variant.id,
|
variant_id: orderItem.variant?.id,
|
||||||
quantity: orderItem.quantity,
|
quantity: orderItem.quantity,
|
||||||
id: orderItem.id,
|
id: orderItem.id,
|
||||||
})
|
})
|
||||||
variants.push(orderItem.variant)
|
if (orderItem.variant) {
|
||||||
|
variants.push(orderItem.variant)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user