tests: implement event controller for managing system events and pausing functionality
This commit is contained in:
parent
9304962b16
commit
a442562a03
73
backend/tests/utils/event-controller.ts
Normal file
73
backend/tests/utils/event-controller.ts
Normal file
@ -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<string, Array<{ eventType: string; payload: any }>>(),
|
||||
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;
|
||||
}
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user