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

Closes CC-265
This commit is contained in:
Oli Juhl
2024-08-07 09:48:14 +02:00
committed by GitHub
parent 1e0149ad08
commit 78eb457487
3 changed files with 188 additions and 21 deletions

View File

@@ -986,9 +986,8 @@ medusaIntegrationTestRunner({
})
})
describe("POST /admin/returns/:id/request-items/:action_id", () => {
describe("POST /admin/returns/:id/request", () => {
let returnId
let itemChange
beforeEach(async () => {
let result = await api.post(
@@ -1004,7 +1003,7 @@ medusaIntegrationTestRunner({
returnId = result.data.return.id
})
it("should unset reason and note", async () => {
it("should confirm return request", async () => {
const item = order.items[0]
let result = (
await api.post(
@@ -1023,31 +1022,195 @@ medusaIntegrationTestRunner({
)
).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({
details: expect.objectContaining({
reason_id: returnReason.id,
}),
internal_note: "Test note",
id: returnId,
status: "requested",
requested_at: expect.any(String),
})
)
})
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-items/${itemChange.id}`,
{ quantity: 1, reason_id: null, internal_note: null },
`/admin/returns/${returnId}/request`,
{},
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
)
).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({
details: expect.objectContaining({
reason_id: null,
}),
internal_note: null,
id: returnId,
status: "requested",
requested_at: expect.any(String),
})
)
})
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),
})
)
})

View File

@@ -106,12 +106,8 @@ function prepareFulfillmentData({
}
function extractReturnShippingOptionId({ orderPreview, orderReturn }) {
if (!orderPreview.shipping_methods?.length) {
return
}
let returnShippingMethod
for (const shippingMethod of orderPreview.shipping_methods) {
for (const shippingMethod of orderPreview.shipping_methods ?? []) {
const modifiedShippingMethod_ = shippingMethod as any
if (!modifiedShippingMethod_.actions) {
continue
@@ -124,6 +120,11 @@ function extractReturnShippingOptionId({ orderPreview, orderReturn }) {
)
})
}
if (!returnShippingMethod) {
return null
}
return returnShippingMethod.shipping_option_id
}

View File

@@ -50,6 +50,9 @@ function updateReturnItems(returnEntry, items) {
const data = items.find((i) => i.details.reference_id === item.item_id)
if (!data) return
console.log("ITEM: ", item)
console.log("DATA: ", data)
const receivedQuantity = MathBN.add(
item.received_quantity || 0,
data.details.quantity