diff --git a/packages/core/lib/executor/messages/events/events.executor.impl.spec.ts b/packages/core/lib/executor/messages/events/events.executor.impl.spec.ts index fda1c16..b26e324 100644 --- a/packages/core/lib/executor/messages/events/events.executor.impl.spec.ts +++ b/packages/core/lib/executor/messages/events/events.executor.impl.spec.ts @@ -50,25 +50,23 @@ describe('EventsExecutor', () => { ); }); - it('should handle event', (done) => { - executor.execute(subject, event).subscribe({ - complete() { - expect(handler.handle).toHaveBeenCalledTimes(1); - done(); - }, - }); + it('should handle event with its handler', async () => { + await lastValueFrom(executor.execute(subject, event)); + expect(handler.handle).toHaveBeenCalledTimes(1); }); - it('should emit event handling steps', (done) => { - executor.execute(subject, event).subscribe({ - complete() { - expect(eventStates).toEqual([ - new HandlingStartedEventProcessingState(handler), - new HandlingCompletedEventProcessingState(handler), - ]); - done(); - }, - }); + it('should handle event with no handlers registered', async () => { + class NoHandlersEvent {} + const event = new NoHandlersEvent(); + expect(await lastValueFrom(executor.execute(subject, event))).toBe(event); + }); + + it('should emit event handling steps', async () => { + await lastValueFrom(executor.execute(subject, event)); + expect(eventStates).toEqual([ + new HandlingStartedEventProcessingState(handler), + new HandlingCompletedEventProcessingState(handler), + ]); }); }); diff --git a/packages/core/lib/executor/messages/events/events.executor.impl.ts b/packages/core/lib/executor/messages/events/events.executor.impl.ts index c00daef..e27974c 100644 --- a/packages/core/lib/executor/messages/events/events.executor.impl.ts +++ b/packages/core/lib/executor/messages/events/events.executor.impl.ts @@ -1,4 +1,18 @@ -import { catchError, defer, from, last, map, mergeMap, of, retry, Subject, tap, throwError, timeout } from 'rxjs'; +import { + catchError, + defaultIfEmpty, + defer, + from, + last, + map, + mergeMap, + of, + retry, + Subject, + tap, + throwError, + timeout, +} from 'rxjs'; import { Event } from '../../../messages/event/event'; import { EventsProvidersSchema } from '../../../providers-manager/messages/events/interfaces/events-providers-schema.interface'; import { IEventHandler, MessageTypes } from '../../../messages'; @@ -31,6 +45,7 @@ export class MediatorEventsExecutor implements EventsExecutor { isPromise(handler) ? from(handler as Promise>) : of(handler as IEventHandler) ), mergeMap((handler) => this.handleEvent({ config, messageProcessing, event, handler })), + defaultIfEmpty(undefined), // There can be no handlers registered for this event last(), map(() => event) );