fix(utils,core-flows): subtotal calculation and returns location (#13497)
* fix(utils,core-flows): subtotal calculation and returns location * changeset * fix test * var * rm extra field from test * fix original total * fix partial refunds and pending difference * fix test * fix test * test * extract to util * original total and update payment when receive return * original_subtotal * default fields * test * calculate pending difference * revert claims test * pending difference * creadit line fix * if
This commit is contained in:
committed by
GitHub
parent
4736c58da5
commit
9563ee446f
@@ -22,8 +22,10 @@ medusaIntegrationTestRunner({
|
||||
let returnReason
|
||||
let inventoryItem
|
||||
let inventoryItemExtra
|
||||
let inventoryItemExtra2
|
||||
let location
|
||||
let productExtra
|
||||
let productExtra2
|
||||
const shippingProviderId = "manual_test-provider"
|
||||
|
||||
beforeEach(async () => {
|
||||
@@ -123,6 +125,31 @@ medusaIntegrationTestRunner({
|
||||
)
|
||||
).data.product
|
||||
|
||||
productExtra2 = (
|
||||
await api.post(
|
||||
"/admin/products",
|
||||
{
|
||||
title: "Extra product 2, same price",
|
||||
shipping_profile_id: shippingProfile.id,
|
||||
options: [{ title: "size", values: ["large", "small"] }],
|
||||
variants: [
|
||||
{
|
||||
title: "my variant 2",
|
||||
sku: "variant-sku-2",
|
||||
options: { size: "large" },
|
||||
prices: [
|
||||
{
|
||||
currency_code: "usd",
|
||||
amount: 25,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
adminHeaders
|
||||
)
|
||||
).data.product
|
||||
|
||||
returnReason = (
|
||||
await api.post(
|
||||
"/admin/return-reasons",
|
||||
@@ -269,6 +296,10 @@ medusaIntegrationTestRunner({
|
||||
await api.get(`/admin/inventory-items?sku=variant-sku`, adminHeaders)
|
||||
).data.inventory_items[0]
|
||||
|
||||
inventoryItemExtra2 = (
|
||||
await api.get(`/admin/inventory-items?sku=variant-sku-2`, adminHeaders)
|
||||
).data.inventory_items[0]
|
||||
|
||||
await api.post(
|
||||
`/admin/inventory-items/${inventoryItemExtra.id}/location-levels`,
|
||||
{
|
||||
@@ -278,6 +309,15 @@ medusaIntegrationTestRunner({
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
await api.post(
|
||||
`/admin/inventory-items/${inventoryItemExtra2.id}/location-levels`,
|
||||
{
|
||||
location_id: location.id,
|
||||
stocked_quantity: 2,
|
||||
},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
const remoteLink = container.resolve(
|
||||
ContainerRegistrationKeys.REMOTE_LINK
|
||||
)
|
||||
@@ -323,6 +363,14 @@ medusaIntegrationTestRunner({
|
||||
inventory_item_id: inventoryItemExtra.id,
|
||||
},
|
||||
},
|
||||
{
|
||||
[Modules.PRODUCT]: {
|
||||
variant_id: productExtra2.variants[0].id,
|
||||
},
|
||||
[Modules.INVENTORY]: {
|
||||
inventory_item_id: inventoryItemExtra2.id,
|
||||
},
|
||||
},
|
||||
])
|
||||
|
||||
// create reservation for inventory item that is initially on the order
|
||||
@@ -440,6 +488,95 @@ medusaIntegrationTestRunner({
|
||||
})
|
||||
|
||||
describe("Exchanges lifecycle", () => {
|
||||
it("test full exchange flow", async () => {
|
||||
const orderBefore = (
|
||||
await api.get(`/admin/orders/${order.id}`, adminHeaders)
|
||||
).data.order
|
||||
|
||||
let result = await api.post(
|
||||
"/admin/exchanges",
|
||||
{
|
||||
order_id: order.id,
|
||||
description: "Test",
|
||||
},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
expect(result.data.exchange.created_by).toEqual(expect.any(String))
|
||||
|
||||
const exchangeId = result.data.exchange.id
|
||||
|
||||
const item = order.items[0]
|
||||
|
||||
result = await api.post(
|
||||
`/admin/exchanges/${exchangeId}/inbound/items`,
|
||||
{
|
||||
items: [
|
||||
{
|
||||
id: item.id,
|
||||
reason_id: returnReason.id,
|
||||
quantity: 2,
|
||||
},
|
||||
],
|
||||
},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
// New Item
|
||||
result = await api.post(
|
||||
`/admin/exchanges/${exchangeId}/outbound/items`,
|
||||
{
|
||||
items: [
|
||||
{
|
||||
variant_id: productExtra2.variants[0].id,
|
||||
quantity: 2,
|
||||
},
|
||||
],
|
||||
},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
result = await api.post(
|
||||
`/admin/exchanges/${exchangeId}/request`,
|
||||
{},
|
||||
adminHeaders
|
||||
)
|
||||
const returnId = result.data.exchange.return_id
|
||||
|
||||
result = (await api.get(`/admin/orders/${order.id}`, adminHeaders)).data
|
||||
.order
|
||||
|
||||
expect(orderBefore.total).toBe(61)
|
||||
expect(result.total).toBe(112)
|
||||
|
||||
// receive return
|
||||
await api.post(`/admin/returns/${returnId}/receive`, {}, adminHeaders)
|
||||
await api.post(
|
||||
`/admin/returns/${returnId}/receive-items`,
|
||||
{
|
||||
items: [
|
||||
{
|
||||
id: item.id,
|
||||
quantity: 2,
|
||||
},
|
||||
],
|
||||
},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
await api.post(
|
||||
`/admin/returns/${returnId}/receive/confirm`,
|
||||
{},
|
||||
adminHeaders
|
||||
)
|
||||
|
||||
result = (await api.get(`/admin/orders/${order.id}`, adminHeaders)).data
|
||||
.order
|
||||
|
||||
expect(orderBefore.total).toBe(61)
|
||||
expect(result.total).toBe(62) // +1 is from taxes of the new item
|
||||
})
|
||||
|
||||
it("Full flow with 2 orders", async () => {
|
||||
let result = await api.post(
|
||||
"/admin/exchanges",
|
||||
|
||||
Reference in New Issue
Block a user