feat(medusa, medusa-js, medusa-react): Implement item change deletion from an order edit (#2241)

This commit is contained in:
Adrien de Peretti
2022-09-22 11:02:58 +02:00
committed by GitHub
parent eb8034502b
commit 14e808c724
18 changed files with 700 additions and 17 deletions
@@ -520,4 +520,230 @@ describe("[MEDUSA_FF_ORDER_EDITING] /admin/order-edits", () => {
)
})
})
describe("DELETE /admin/order-edits/:id/changes/:change_id", () => {
let product
const orderId1 = IdMap.getId("order-id-1")
const orderEditId = IdMap.getId("order-edit-1")
const orderEditId2 = IdMap.getId("order-edit-2")
const prodId1 = IdMap.getId("prodId1")
const lineItemId1 = IdMap.getId("line-item-1")
const changeUpdateId = IdMap.getId("order-id-1-change-1")
const changeUpdateId2 = IdMap.getId("order-id-1-change-2")
const lineItemUpdateId = IdMap.getId("line-item-1-update")
const lineItemUpdateId2 = IdMap.getId("line-item-1-update-2")
beforeEach(async () => {
await adminSeeder(dbConnection)
product = await simpleProductFactory(dbConnection, {
id: prodId1,
})
await simpleOrderFactory(dbConnection, {
id: orderId1,
email: "test@testson.com",
tax_rate: null,
fulfillment_status: "fulfilled",
payment_status: "captured",
region: {
id: "test-region",
name: "Test region",
tax_rate: 12.5,
},
line_items: [
{
id: lineItemId1,
variant_id: product.variants[0].id,
quantity: 1,
fulfilled_quantity: 1,
shipped_quantity: 1,
unit_price: 1000,
},
],
})
await simpleLineItemFactory(dbConnection, {
id: lineItemUpdateId,
order_id: null,
variant_id: product.variants[0].id,
unit_price: 100,
quantity: 2,
})
await simpleLineItemFactory(dbConnection, {
id: lineItemUpdateId2,
order_id: null,
variant_id: product.variants[0].id,
unit_price: 100,
quantity: 2,
})
})
afterEach(async () => {
const db = useDb()
return await db.teardown()
})
it("deletes an item change from an order edit", async () => {
await simpleLineItemFactory(dbConnection, {
id: lineItemUpdateId,
order_id: null,
variant_id: product.variants[0].id,
unit_price: 100,
quantity: 2,
})
await simpleOrderEditFactory(dbConnection, {
id: orderEditId,
order_id: orderId1,
created_by: "admin_user",
internal_note: "test internal note",
})
await simpleOrderItemChangeFactory(dbConnection, {
id: changeUpdateId,
type: OrderEditItemChangeType.ITEM_UPDATE,
line_item_id: lineItemUpdateId,
original_line_item_id: lineItemId1,
order_edit_id: orderEditId,
})
const api = useApi()
let res = await api.get(`/admin/order-edits/${orderEditId}`, adminHeaders)
expect(res.status).toEqual(200)
expect(res.data.order_edit.changes.length).toBe(1)
res = await api.delete(
`/admin/order-edits/${orderEditId}/changes/${changeUpdateId}`,
adminHeaders
)
expect(res.status).toEqual(200)
expect(res.data).toEqual(
expect.objectContaining({
id: changeUpdateId,
object: "item_change",
deleted: true,
})
)
res = await api.get(`/admin/order-edits/${orderEditId}`, adminHeaders)
expect(res.status).toEqual(200)
expect(res.data.order_edit.changes.length).toBe(0)
})
it("return invalid error if the item change does not belong to the order edit", async () => {
await simpleOrderEditFactory(dbConnection, {
id: orderEditId,
order_id: orderId1,
created_by: "admin_user",
internal_note: "test internal note 2",
})
await simpleOrderItemChangeFactory(dbConnection, {
id: changeUpdateId,
type: OrderEditItemChangeType.ITEM_UPDATE,
line_item_id: lineItemUpdateId,
original_line_item_id: lineItemId1,
order_edit_id: orderEditId,
})
await simpleOrderEditFactory(dbConnection, {
id: orderEditId2,
order_id: orderId1,
created_by: "admin_user",
internal_note: "test internal note 2",
})
await simpleOrderItemChangeFactory(dbConnection, {
id: changeUpdateId2,
type: OrderEditItemChangeType.ITEM_UPDATE,
line_item_id: lineItemUpdateId2,
original_line_item_id: lineItemId1,
order_edit_id: orderEditId2,
})
const api = useApi()
const response = await api
.delete(
`/admin/order-edits/${orderEditId}/changes/${changeUpdateId2}`,
adminHeaders
)
.catch((e) => e)
expect(response.response.status).toEqual(400)
expect(response.response.data.message).toEqual(
`The item change you are trying to delete doesn't belong to the OrderEdit with id: ${orderEditId}.`
)
})
it("return an error if the order edit is confirmed", async () => {
await simpleOrderEditFactory(dbConnection, {
id: orderEditId,
order_id: orderId1,
created_by: "admin_user",
internal_note: "test internal note 3",
confirmed_at: new Date(),
})
await simpleOrderItemChangeFactory(dbConnection, {
id: changeUpdateId,
type: OrderEditItemChangeType.ITEM_UPDATE,
line_item_id: lineItemUpdateId,
original_line_item_id: lineItemId1,
order_edit_id: orderEditId,
})
const api = useApi()
const response = await api
.delete(
`/admin/order-edits/${orderEditId}/changes/${changeUpdateId}`,
adminHeaders
)
.catch((e) => e)
expect(response.response.status).toEqual(400)
expect(response.response.data.message).toEqual(
"Cannot delete and item change from a confirmed order edit"
)
})
it("return an error if the order edit is canceled", async () => {
await simpleOrderEditFactory(dbConnection, {
id: orderEditId,
order_id: orderId1,
created_by: "admin_user",
internal_note: "test internal note 4",
canceled_at: new Date(),
})
await simpleOrderItemChangeFactory(dbConnection, {
id: changeUpdateId,
type: OrderEditItemChangeType.ITEM_UPDATE,
line_item_id: lineItemUpdateId,
original_line_item_id: lineItemId1,
order_edit_id: orderEditId,
})
const api = useApi()
const response = await api
.delete(
`/admin/order-edits/${orderEditId}/changes/${changeUpdateId}`,
adminHeaders
)
.catch((e) => e)
expect(response.response.status).toEqual(400)
expect(response.response.data.message).toEqual(
"Cannot delete and item change from a canceled order edit"
)
})
})
})