fix(core-flows): Allow return requests with no shipping (#8472)

Closes CC-265
This commit is contained in:
Oli Juhl
2024-08-07 07:48:14 +00:00
committed by GitHub
parent 1e0149ad08
commit 78eb457487
3 changed files with 188 additions and 21 deletions
@@ -986,9 +986,8 @@ medusaIntegrationTestRunner({
}) })
}) })
describe("POST /admin/returns/:id/request-items/:action_id", () => { describe("POST /admin/returns/:id/request", () => {
let returnId let returnId
let itemChange
beforeEach(async () => { beforeEach(async () => {
let result = await api.post( let result = await api.post(
@@ -1004,7 +1003,7 @@ medusaIntegrationTestRunner({
returnId = result.data.return.id returnId = result.data.return.id
}) })
it("should unset reason and note", async () => { it("should confirm return request", async () => {
const item = order.items[0] const item = order.items[0]
let result = ( let result = (
await api.post( await api.post(
@@ -1023,31 +1022,195 @@ medusaIntegrationTestRunner({
) )
).data.order_preview ).data.order_preview
itemChange = result.items[0].actions[0] result = (
await api.post(
`/admin/returns/${returnId}/request`,
{},
adminHeaders
)
).data.return
expect(result.items[0].actions[0]).toEqual( expect(result).toEqual(
expect.objectContaining({ expect.objectContaining({
details: expect.objectContaining({ id: returnId,
reason_id: returnReason.id, status: "requested",
}), requested_at: expect.any(String),
internal_note: "Test note", })
)
})
it("should confirm return request with shipping", async () => {
const item = order.items[0]
let result = (
await api.post(
`/admin/returns/${returnId}/request-items`,
{
items: [
{
id: item.id,
quantity: 2,
reason_id: returnReason.id,
internal_note: "Test note",
},
],
},
adminHeaders
)
).data.order_preview
result = (
await api.post(
`/admin/returns/${returnId}/shipping-method`,
{
shipping_option_id: returnShippingOption.id,
},
adminHeaders
)
).data.order_preview
expect(result).toEqual(
expect.objectContaining({
id: order.id,
shipping_methods: expect.arrayContaining([
expect.objectContaining({
id: expect.any(String),
name: "Return shipping",
amount: 1000,
subtotal: 1000,
total: 1000,
}),
]),
}) })
) )
result = ( result = (
await api.post( await api.post(
`/admin/returns/${returnId}/request-items/${itemChange.id}`, `/admin/returns/${returnId}/request`,
{ quantity: 1, reason_id: null, internal_note: null }, {},
adminHeaders
)
).data.return
expect(result).toEqual(
expect.objectContaining({
id: returnId,
status: "requested",
requested_at: expect.any(String),
})
)
})
})
describe("POST /admin/returns/:id/request", () => {
let returnId
beforeEach(async () => {
let result = await api.post(
"/admin/returns",
{
order_id: order.id,
description: "Test",
location_id: location.id,
},
adminHeaders
)
returnId = result.data.return.id
})
it("should confirm return request", async () => {
const item = order.items[0]
let result = (
await api.post(
`/admin/returns/${returnId}/request-items`,
{
items: [
{
id: item.id,
quantity: 2,
reason_id: returnReason.id,
internal_note: "Test note",
},
],
},
adminHeaders adminHeaders
) )
).data.order_preview ).data.order_preview
expect(result.items[0].actions[0]).toEqual( result = (
await api.post(
`/admin/returns/${returnId}/request`,
{},
adminHeaders
)
).data.return
expect(result).toEqual(
expect.objectContaining({ expect.objectContaining({
details: expect.objectContaining({ id: returnId,
reason_id: null, status: "requested",
}), requested_at: expect.any(String),
internal_note: null, })
)
})
it("should confirm return request with shipping", async () => {
const item = order.items[0]
let result = (
await api.post(
`/admin/returns/${returnId}/request-items`,
{
items: [
{
id: item.id,
quantity: 2,
reason_id: returnReason.id,
internal_note: "Test note",
},
],
},
adminHeaders
)
).data.order_preview
result = (
await api.post(
`/admin/returns/${returnId}/shipping-method`,
{
shipping_option_id: returnShippingOption.id,
},
adminHeaders
)
).data.order_preview
expect(result).toEqual(
expect.objectContaining({
id: order.id,
shipping_methods: expect.arrayContaining([
expect.objectContaining({
id: expect.any(String),
name: "Return shipping",
amount: 1000,
subtotal: 1000,
total: 1000,
}),
]),
})
)
result = (
await api.post(
`/admin/returns/${returnId}/request`,
{},
adminHeaders
)
).data.return
expect(result).toEqual(
expect.objectContaining({
id: returnId,
status: "requested",
requested_at: expect.any(String),
}) })
) )
}) })
@@ -106,12 +106,8 @@ function prepareFulfillmentData({
} }
function extractReturnShippingOptionId({ orderPreview, orderReturn }) { function extractReturnShippingOptionId({ orderPreview, orderReturn }) {
if (!orderPreview.shipping_methods?.length) {
return
}
let returnShippingMethod let returnShippingMethod
for (const shippingMethod of orderPreview.shipping_methods) { for (const shippingMethod of orderPreview.shipping_methods ?? []) {
const modifiedShippingMethod_ = shippingMethod as any const modifiedShippingMethod_ = shippingMethod as any
if (!modifiedShippingMethod_.actions) { if (!modifiedShippingMethod_.actions) {
continue continue
@@ -124,6 +120,11 @@ function extractReturnShippingOptionId({ orderPreview, orderReturn }) {
) )
}) })
} }
if (!returnShippingMethod) {
return null
}
return returnShippingMethod.shipping_option_id return returnShippingMethod.shipping_option_id
} }
@@ -50,6 +50,9 @@ function updateReturnItems(returnEntry, items) {
const data = items.find((i) => i.details.reference_id === item.item_id) const data = items.find((i) => i.details.reference_id === item.item_id)
if (!data) return if (!data) return
console.log("ITEM: ", item)
console.log("DATA: ", data)
const receivedQuantity = MathBN.add( const receivedQuantity = MathBN.add(
item.received_quantity || 0, item.received_quantity || 0,
data.details.quantity data.details.quantity