From 25210369d9b731a463b37708e73b5f48f2a681d6 Mon Sep 17 00:00:00 2001 From: Oli Juhl <59018053+olivermrbl@users.noreply.github.com> Date: Mon, 24 Jun 2024 19:43:49 +0200 Subject: [PATCH] fix(utils): Uppercase event action name (#7822) Currently, the keys of the events contain a lowercased action, e.g. `INVENTORY_ITEM_created`, which is breaking our usage across multiple modules --- ...build-event-names-from-entity-name.spec.ts | 34 +++++++++++++++++++ packages/core/utils/src/event-bus/utils.ts | 5 +-- .../src/modules-sdk/event-builder-factory.ts | 6 +++- .../product-categories.spec.ts | 2 +- 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 packages/core/utils/src/event-bus/__tests__/build-event-names-from-entity-name.spec.ts diff --git a/packages/core/utils/src/event-bus/__tests__/build-event-names-from-entity-name.spec.ts b/packages/core/utils/src/event-bus/__tests__/build-event-names-from-entity-name.spec.ts new file mode 100644 index 0000000000..a967780848 --- /dev/null +++ b/packages/core/utils/src/event-bus/__tests__/build-event-names-from-entity-name.spec.ts @@ -0,0 +1,34 @@ +import { buildEventNamesFromEntityName } from "../utils" + +describe("MessageAggregator", function () { + afterEach(() => { + jest.resetAllMocks + }) + + it("should create event names from entity", function () { + const eventBaseNames: ["inventoryItem", "reservationItem"] = [ + "inventoryItem", + "reservationItem", + ] + + const InventoryEvents = buildEventNamesFromEntityName( + eventBaseNames, + "inventory" + ) + + expect(InventoryEvents).toEqual({ + INVENTORY_ITEM_CREATED: "inventory.inventory-item.created", + INVENTORY_ITEM_UPDATED: "inventory.inventory-item.updated", + INVENTORY_ITEM_DELETED: "inventory.inventory-item.deleted", + INVENTORY_ITEM_RESTORED: "inventory.inventory-item.restored", + INVENTORY_ITEM_ATTACHED: "inventory.inventory-item.attached", + INVENTORY_ITEM_DETACHED: "inventory.inventory-item.detached", + RESERVATION_ITEM_CREATED: "inventory.reservation-item.created", + RESERVATION_ITEM_UPDATED: "inventory.reservation-item.updated", + RESERVATION_ITEM_DELETED: "inventory.reservation-item.deleted", + RESERVATION_ITEM_RESTORED: "inventory.reservation-item.restored", + RESERVATION_ITEM_ATTACHED: "inventory.reservation-item.attached", + RESERVATION_ITEM_DETACHED: "inventory.reservation-item.detached", + }) + }) +}) diff --git a/packages/core/utils/src/event-bus/utils.ts b/packages/core/utils/src/event-bus/utils.ts index f7366e6b50..1a7b145038 100644 --- a/packages/core/utils/src/event-bus/utils.ts +++ b/packages/core/utils/src/event-bus/utils.ts @@ -1,6 +1,6 @@ +import { KebabCase, SnakeCase } from "@medusajs/types" import { camelToSnakeCase, kebabCase, lowerCaseFirst } from "../common" import { CommonEvents } from "./common-events" -import { KebabCase, SnakeCase } from "@medusajs/types" type ReturnType = { [K in TNames[number] as `${Uppercase< @@ -56,7 +56,8 @@ export function buildEventNamesFromEntityName( const kebabCaseName = lowerCaseFirst(kebabCase(name)) for (const event of Object.values(CommonEvents) as string[]) { - events[`${snakedCaseName}_${event}`] = `${ + const upperCasedEvent = event.toUpperCase() + events[`${snakedCaseName}_${upperCasedEvent}`] = `${ prefix ? prefix + "." : "" }${kebabCaseName}.${event}` as `${KebabCase}.${typeof event}` } diff --git a/packages/core/utils/src/modules-sdk/event-builder-factory.ts b/packages/core/utils/src/modules-sdk/event-builder-factory.ts index 5c7259c738..204ac7e942 100644 --- a/packages/core/utils/src/modules-sdk/event-builder-factory.ts +++ b/packages/core/utils/src/modules-sdk/event-builder-factory.ts @@ -46,13 +46,17 @@ export function eventBuilderFactory({ const aggregator = sharedContext.messageAggregator! const messages: EventBusTypes.RawMessageFormat[] = [] + // The event enums contains event formatted like so [object]_[action] e.g. PRODUCT_CREATED + // We expect the keys of events to be fully uppercased + const eventName = eventsEnum[`${object.toUpperCase()}_${action.toUpperCase()}`] + data.forEach((dataItem) => { messages.push({ source, action, context: sharedContext, data: { id: dataItem.id }, - eventName: eventsEnum[`${object}_${action}`], + eventName, object, }) }) diff --git a/packages/modules/product/integration-tests/__tests__/product-module-service/product-categories.spec.ts b/packages/modules/product/integration-tests/__tests__/product-module-service/product-categories.spec.ts index b57928f90d..2ae79f2252 100644 --- a/packages/modules/product/integration-tests/__tests__/product-module-service/product-categories.spec.ts +++ b/packages/modules/product/integration-tests/__tests__/product-module-service/product-categories.spec.ts @@ -1,7 +1,7 @@ import { IProductModuleService } from "@medusajs/types" import { - Modules, CommonEvents, + Modules, ProductEvents, ProductStatus, composeMessage,