From a442562a036893132cb40f12af2c39b5a521e6a4 Mon Sep 17 00:00:00 2001 From: Carlos Santos <4a.santos@gmail.com> Date: Wed, 23 Apr 2025 17:45:44 +0200 Subject: [PATCH] tests: implement event controller for managing system events and pausing functionality --- backend/tests/utils/event-controller.ts | 73 +++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 backend/tests/utils/event-controller.ts diff --git a/backend/tests/utils/event-controller.ts b/backend/tests/utils/event-controller.ts new file mode 100644 index 0000000..ce5fdc5 --- /dev/null +++ b/backend/tests/utils/event-controller.ts @@ -0,0 +1,73 @@ +import { container } from '../../src/config/dependency-injector.config'; +import { SystemEventType } from '../../src/models/system-event.model.js'; +import { SystemEventService } from '../../src/services/index.js'; + +export const eventController = { + systemEventService: undefined as unknown as SystemEventService, + pausedEvents: new Map>(), + isInitialized: false, + originalEmit: null as any, + + initialize() { + if (this.isInitialized) return; + + this.systemEventService = container.get(SystemEventService); + this.originalEmit = this.systemEventService['emitter'].emit; + this.pausedEvents.clear(); + this.isInitialized = true; + + // Replace the emit method to intercept events + this.systemEventService['emitter'].emit = (eventType: string, payload: any) => { + console.log(`Event intercepted: ${eventType}`, payload); + + // Check if the event is paused for the room + if ( + eventType === SystemEventType.RECORDING_ACTIVE && + payload?.roomId && + this.pausedEvents.has(payload.roomId) + ) { + console.log(`🔴 Pausing event ${eventType} for room ${payload.roomId}`); + + // Save the event to the pausedEvents map + this.pausedEvents.get(payload.roomId)?.push({ eventType, payload }); + return true; + } + + return this.originalEmit.call(this.systemEventService['emitter'], eventType, payload); + }; + }, + + pauseEventsForRoom(roomId: string) { + if (!this.isInitialized) this.initialize(); + + console.log(`🟠 Setting up pause for events in room: ${roomId}`); + this.pausedEvents.set(roomId, []); + }, + + releaseEventsForRoom(roomId: string) { + const events = this.pausedEvents.get(roomId) || []; + this.pausedEvents.delete(roomId); + + console.log(`🟢 Releasing ${events.length} events for room ${roomId}`); + + events.forEach(({ eventType, payload }) => { + console.log(` Releasing event: ${eventType}`, payload); + this.originalEmit.call(this.systemEventService['emitter'], eventType, payload); + }); + }, + + releaseAllEvents() { + for (const roomId of this.pausedEvents.keys()) { + this.releaseEventsForRoom(roomId); + } + }, + + reset() { + if (!this.isInitialized) return; + + this.systemEventService['emitter'].emit = this.originalEmit; + + this.pausedEvents.clear(); + this.isInitialized = false; + } +};