From cad8b40c130e371d615d3bd953bb466fb4ac54a8 Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Tue, 4 Mar 2025 14:10:11 +0100 Subject: [PATCH] fix(inventory): Wrong event emitted on reservation update (#11714) * fix(inventory): Wrong event emitted on reservation update * fix(inventory): Wrong event emitted on reservation update * Create tall-mice-smile.md --- .changeset/tall-mice-smile.md | 5 ++ .../inventory-module-service.spec.ts | 47 ++++++++++++++++++- .../src/services/inventory-module.ts | 27 ++++++----- 3 files changed, 64 insertions(+), 15 deletions(-) create mode 100644 .changeset/tall-mice-smile.md diff --git a/.changeset/tall-mice-smile.md b/.changeset/tall-mice-smile.md new file mode 100644 index 0000000000..6cf09466f0 --- /dev/null +++ b/.changeset/tall-mice-smile.md @@ -0,0 +1,5 @@ +--- +"@medusajs/inventory": patch +--- + +fix(inventory): Wrong event emitted on reservation update diff --git a/packages/modules/inventory/integration-tests/__tests__/inventory-module-service.spec.ts b/packages/modules/inventory/integration-tests/__tests__/inventory-module-service.spec.ts index 5d88297993..f142c1bb00 100644 --- a/packages/modules/inventory/integration-tests/__tests__/inventory-module-service.spec.ts +++ b/packages/modules/inventory/integration-tests/__tests__/inventory-module-service.spec.ts @@ -1,12 +1,25 @@ import { IInventoryService, InventoryItemDTO } from "@medusajs/framework/types" -import { BigNumber, Module, Modules } from "@medusajs/framework/utils" -import { moduleIntegrationTestRunner } from "@medusajs/test-utils" +import { + BigNumber, + CommonEvents, + composeMessage, + InventoryEvents, + Module, + Modules, +} from "@medusajs/framework/utils" +import { + MockEventBusService, + moduleIntegrationTestRunner, +} from "@medusajs/test-utils" import { InventoryModuleService } from "../../src/services" jest.setTimeout(100000) moduleIntegrationTestRunner({ moduleName: Modules.INVENTORY, + injectedDependencies: { + [Modules.EVENT_BUS]: new MockEventBusService(), + }, testSuite: ({ service }) => { describe("Inventory Module Service", () => { it(`should export the appropriate linkable configuration`, () => { @@ -414,6 +427,8 @@ moduleIntegrationTestRunner({ }) it("should update a reservationItem", async () => { + const eventBusSpy = jest.spyOn(MockEventBusService.prototype, "emit") + const update = { id: reservationItem.id, quantity: 1, @@ -422,6 +437,20 @@ moduleIntegrationTestRunner({ const updated = await service.updateReservationItems(update) expect(updated).toEqual(expect.objectContaining(update)) + expect(eventBusSpy).toHaveBeenNthCalledWith( + 1, + [ + composeMessage(InventoryEvents.RESERVATION_ITEM_UPDATED, { + data: { id: reservationItem.id }, + object: "reservation-item", + source: Modules.INVENTORY, + action: CommonEvents.UPDATED, + }), + ], + { + internal: true, + } + ) const update2 = { id: reservationItem.id, @@ -431,6 +460,20 @@ moduleIntegrationTestRunner({ const updated2 = await service.updateReservationItems(update2) expect(updated2).toEqual(expect.objectContaining(update2)) + expect(eventBusSpy).toHaveBeenNthCalledWith( + 2, + [ + composeMessage(InventoryEvents.RESERVATION_ITEM_UPDATED, { + data: { id: reservationItem.id }, + object: "reservation-item", + source: Modules.INVENTORY, + action: CommonEvents.UPDATED, + }), + ], + { + internal: true, + } + ) }) it("should adjust reserved_quantity of inventory level after updates increasing reserved quantity", async () => { diff --git a/packages/modules/inventory/src/services/inventory-module.ts b/packages/modules/inventory/src/services/inventory-module.ts index e298d313de..c470f005d4 100644 --- a/packages/modules/inventory/src/services/inventory-module.ts +++ b/packages/modules/inventory/src/services/inventory-module.ts @@ -26,6 +26,7 @@ import { MedusaContext, MedusaError, MedusaService, + Modules, partitionArray, } from "@medusajs/framework/utils" import { InventoryItem, InventoryLevel, ReservationItem } from "@models" @@ -250,7 +251,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( created.map((reservationItem) => ({ eventName: InventoryEvents.RESERVATION_ITEM_CREATED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.CREATED, object: "reservation-item", context, @@ -352,7 +353,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( result.map((inventoryItem) => ({ eventName: InventoryEvents.INVENTORY_ITEM_CREATED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.CREATED, object: "inventory-item", context, @@ -408,7 +409,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( created.map((inventoryLevel) => ({ eventName: InventoryEvents.INVENTORY_LEVEL_CREATED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.CREATED, object: "inventory-level", context, @@ -464,7 +465,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( result.map((inventoryItem) => ({ eventName: InventoryEvents.INVENTORY_ITEM_UPDATED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.UPDATED, object: "inventory-item", context, @@ -505,7 +506,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( result[0].map((inventoryLevel) => ({ eventName: InventoryEvents.INVENTORY_LEVEL_DELETED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.DELETED, object: "inventory-level", context, @@ -536,7 +537,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData({ eventName: InventoryEvents.INVENTORY_LEVEL_DELETED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.DELETED, object: "inventory-level", context, @@ -581,7 +582,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( levels.map((inventoryLevel) => ({ eventName: InventoryEvents.INVENTORY_LEVEL_UPDATED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.UPDATED, object: "inventory-level", context, @@ -663,8 +664,8 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( result.map((reservationItem) => ({ - eventName: InventoryEvents.INVENTORY_LEVEL_UPDATED, - source: this.constructor.name, + eventName: InventoryEvents.RESERVATION_ITEM_UPDATED, + source: Modules.INVENTORY, action: CommonEvents.UPDATED, object: "reservation-item", context, @@ -869,7 +870,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( reservations.map((reservationItem) => ({ eventName: InventoryEvents.RESERVATION_ITEM_DELETED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.DELETED, object: "reservation-item", context, @@ -911,7 +912,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( reservations.map((reservationItem) => ({ eventName: InventoryEvents.RESERVATION_ITEM_DELETED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.DELETED, object: "reservation-item", context, @@ -948,7 +949,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData( reservations.map((reservationItem) => ({ eventName: InventoryEvents.RESERVATION_ITEM_CREATED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.CREATED, object: "reservation-item", context, @@ -1017,7 +1018,7 @@ export default class InventoryModuleService context.messageAggregator?.saveRawMessageData({ eventName: InventoryEvents.INVENTORY_LEVEL_UPDATED, - source: this.constructor.name, + source: Modules.INVENTORY, action: CommonEvents.UPDATED, object: "inventory-level", context,