diff --git a/integration-tests/api/__tests__/admin/order-edit.js b/integration-tests/api/__tests__/admin/order-edit.js index 3cdd082c41..0533daf55f 100644 --- a/integration-tests/api/__tests__/admin/order-edit.js +++ b/integration-tests/api/__tests__/admin/order-edit.js @@ -265,6 +265,70 @@ describe("[MEDUSA_FF_ORDER_EDITING] /admin/order-edits", () => { }) }) + it("deletes order edit which has quantity changes", async () => { + const api = useApi() + + const initialProduct = await simpleProductFactory(dbConnection, { + variants: [{ id: "initial-variant" }], + }) + + const cart = await simpleCartFactory(dbConnection, { + email: "tst@test.com", + line_items: [ + { + id: "line-item-id", + variant_id: initialProduct.variants[0].id, + quantity: 1, + unit_price: 1000, + }, + ], + }) + + await api.post(`/store/carts/${cart.id}/payment-sessions`) + + const completeRes = await api.post(`/store/carts/${cart.id}/complete`) + + const order = completeRes.data.data + + let response = await api.post( + `/admin/order-edits/`, + { + order_id: order.id, + }, + adminHeaders + ) + + const orderEditId = response.data.order_edit.id + + const itemToUpdate = response.data.order_edit.items.find( + (item) => item.original_item_id === "line-item-id" + ) + + await api.post( + `/admin/order-edits/${orderEditId}/items/${itemToUpdate.id}`, + { quantity: 10 }, + adminHeaders + ) + + response = await api.delete( + `/admin/order-edits/${orderEditId}`, + adminHeaders + ) + + const orderEdit = await dbConnection.manager.findOne(OrderEdit, { + where: { id: orderEditId }, + withDeleted: true, + }) + + expect(orderEdit).toBeUndefined() + expect(response.status).toEqual(200) + expect(response.data).toEqual({ + id: orderEditId, + object: "order_edit", + deleted: true, + }) + }) + it("deletes already removed order edit", async () => { const { id } = await simpleOrderEditFactory(dbConnection, { created_by: adminUserId, diff --git a/packages/medusa/src/services/order-edit.ts b/packages/medusa/src/services/order-edit.ts index 26a0657ebf..8625ed1130 100644 --- a/packages/medusa/src/services/order-edit.ts +++ b/packages/medusa/src/services/order-edit.ts @@ -787,6 +787,15 @@ export default class OrderEditService extends TransactionBaseService { ) const clonedItemIds = clonedLineItems.map((item) => item.id) + const orderEdit = await this.retrieve(orderEditId, { + select: ["id", "changes"], + relations: ["changes"], + }) + + await this.orderEditItemChangeService_.delete( + orderEdit.changes.map((change) => change.id) + ) + await Promise.all( [ taxProviderServiceTs.clearLineItemsTaxLines(clonedItemIds),