diff --git a/packages/medusa/src/models/__mocks__/cart.js b/packages/medusa/src/models/__mocks__/cart.js index 30e2e9c75e..5d76f57cfa 100644 --- a/packages/medusa/src/models/__mocks__/cart.js +++ b/packages/medusa/src/models/__mocks__/cart.js @@ -258,7 +258,7 @@ export const carts = { completeCart: { _id: IdMap.getId("complete-cart"), region_id: IdMap.getId("region-france"), - items: [], + items: [{ data: "items" }], email: "test", payment_sessions: [ { diff --git a/packages/medusa/src/services/__tests__/cart.js b/packages/medusa/src/services/__tests__/cart.js index 673624dc69..fa23e2cdff 100644 --- a/packages/medusa/src/services/__tests__/cart.js +++ b/packages/medusa/src/services/__tests__/cart.js @@ -821,6 +821,7 @@ describe("CartService", () => { }, { $set: { + items: [], region_id: IdMap.getId("region-us"), shipping_methods: [], payment_sessions: [], diff --git a/packages/medusa/src/services/__tests__/order.js b/packages/medusa/src/services/__tests__/order.js index e0620616b5..d6eee86ca8 100644 --- a/packages/medusa/src/services/__tests__/order.js +++ b/packages/medusa/src/services/__tests__/order.js @@ -56,6 +56,11 @@ describe("OrderService", () => { jest.clearAllMocks() }) + it("fails when no items", async () => { + const res = orderService.createFromCart(carts.emptyCart) + expect(res).rejects.toThrow("Cannot create order from empty cart") + }) + it("calls order model functions", async () => { await orderService.createFromCart({ ...carts.completeCart, diff --git a/packages/medusa/src/services/order.js b/packages/medusa/src/services/order.js index 9f3ee47cc8..cbfa20b3e1 100644 --- a/packages/medusa/src/services/order.js +++ b/packages/medusa/src/services/order.js @@ -287,6 +287,13 @@ class OrderService extends BaseService { // Create DB session for transaction const dbSession = await this.orderModel_.startSession() + if (cart.items.length === 0) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + "Cannot create order from empty cart" + ) + } + // Initialize DB transaction return dbSession .withTransaction(async () => { @@ -308,7 +315,7 @@ class OrderService extends BaseService { // Would be the case if a discount code is applied that covers the item // total - if (total !== 0 && cart.items.length > 0) { + if (total !== 0) { // Throw if payment method does not exist if (!payment_method) { throw new MedusaError(