From 74342fc1eaf174e7c899197eac5ef8b0fb02095f Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Thu, 22 Sep 2022 18:19:10 +0200 Subject: [PATCH] feat(medusa): Improve order edit retrieve active (#2244) **What** - Improve `retrieveActive` to take into account `(confirmed/canceled/declined)_at` **Test** - one more Integration test on that case FIXES CORE-601 --- .../api/__tests__/admin/order-edit.js | 59 +++++++++++++++++++ packages/medusa/src/services/order-edit.ts | 12 +++- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/integration-tests/api/__tests__/admin/order-edit.js b/integration-tests/api/__tests__/admin/order-edit.js index ba6bb2b214..37af1c3aca 100644 --- a/integration-tests/api/__tests__/admin/order-edit.js +++ b/integration-tests/api/__tests__/admin/order-edit.js @@ -314,6 +314,7 @@ describe("[MEDUSA_FF_ORDER_EDITING] /admin/order-edits", () => { const prodId2 = IdMap.getId("prodId2") const lineItemId1 = IdMap.getId("line-item-1") const lineItemId2 = IdMap.getId("line-item-2") + const confirmedOrderEditId = IdMap.getId("confirmed-order-edit") beforeEach(async () => { await adminSeeder(dbConnection) @@ -428,6 +429,64 @@ describe("[MEDUSA_FF_ORDER_EDITING] /admin/order-edits", () => { `An active order edit already exists for the order ${payload.order_id}` ) }) + + it("created a new order edit if none are active anymore", async () => { + const api = useApi() + + await simpleOrderEditFactory(dbConnection, { + id: confirmedOrderEditId, + order_id: orderId, + internal_note: "test", + confirmed_at: new Date(), + created_by: "admin_user", + }) + + const payload = { + order_id: orderId, + internal_note: "This is an internal note", + } + + const response = await api.post( + `/admin/order-edits/`, + payload, + adminHeaders + ) + + expect(response.status).toEqual(200) + expect(response.data.order_edit).toEqual( + expect.objectContaining({ + order_id: orderId, + created_by: "admin_user", + requested_by: null, + canceled_by: null, + confirmed_by: null, + internal_note: "This is an internal note", + items: expect.arrayContaining([ + expect.objectContaining({ + id: lineItemId1, + quantity: 1, + fulfilled_quantity: 1, + shipped_quantity: 1, + unit_price: 1000, + }), + expect.objectContaining({ + id: lineItemId2, + quantity: 1, + fulfilled_quantity: 1, + shipped_quantity: 1, + unit_price: 1000, + }), + ]), + shipping_total: 0, + gift_card_total: 0, + gift_card_tax_total: 0, + discount_total: 0, + tax_total: 0, + total: 2000, + subtotal: 2000, + }) + ) + }) }) describe("POST /admin/order-edits/:id/request", () => { diff --git a/packages/medusa/src/services/order-edit.ts b/packages/medusa/src/services/order-edit.ts index 6e4f343dbf..da400f2cfd 100644 --- a/packages/medusa/src/services/order-edit.ts +++ b/packages/medusa/src/services/order-edit.ts @@ -1,4 +1,4 @@ -import { EntityManager } from "typeorm" +import { EntityManager, IsNull } from "typeorm" import { FindConfig } from "../types/common" import { buildQuery, isDefined } from "../utils" import { MedusaError } from "medusa-core-utils" @@ -102,7 +102,15 @@ export default class OrderEditService extends TransactionBaseService { this.orderEditRepository_ ) - const query = buildQuery({ order_id: orderId }, config) + const query = buildQuery( + { + order_id: orderId, + confirmed_at: IsNull(), + canceled_at: IsNull(), + declined_at: IsNull(), + }, + config + ) return await orderEditRepository.findOne(query) }