98 lines
3.0 KiB
TypeScript
98 lines
3.0 KiB
TypeScript
import { afterEach, beforeAll, describe, expect, it } from '@jest/globals';
|
|
import { MeetAnalytics } from '@openvidu-meet/typings';
|
|
import {
|
|
createRoom,
|
|
deleteAllRecordings,
|
|
deleteAllRooms,
|
|
disconnectFakeParticipants,
|
|
getAnalytics,
|
|
startTestServer,
|
|
stopRecording
|
|
} from '../../../helpers/request-helpers.js';
|
|
import { setupSingleRoom, setupSingleRoomWithRecording } from '../../../helpers/test-scenarios.js';
|
|
|
|
describe('Analytics API Tests', () => {
|
|
beforeAll(async () => {
|
|
await startTestServer();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await disconnectFakeParticipants();
|
|
await deleteAllRooms();
|
|
await deleteAllRecordings();
|
|
});
|
|
|
|
describe('Get analytics', () => {
|
|
it('should return correct structure', async () => {
|
|
const response = await getAnalytics();
|
|
|
|
expect(response.status).toBe(200);
|
|
expect(response.body).toHaveProperty('totalRooms');
|
|
expect(response.body).toHaveProperty('activeRooms');
|
|
expect(response.body).toHaveProperty('totalRecordings');
|
|
expect(response.body).toHaveProperty('completeRecordings');
|
|
|
|
// All properties should be numbers
|
|
expect(typeof response.body.totalRooms).toBe('number');
|
|
expect(typeof response.body.activeRooms).toBe('number');
|
|
expect(typeof response.body.totalRecordings).toBe('number');
|
|
expect(typeof response.body.completeRecordings).toBe('number');
|
|
});
|
|
|
|
it('should return zero analytics when no data exists', async () => {
|
|
const response = await getAnalytics();
|
|
expect(response.status).toBe(200);
|
|
|
|
const analytics: MeetAnalytics = response.body;
|
|
expect(analytics.totalRooms).toBe(0);
|
|
expect(analytics.activeRooms).toBe(0);
|
|
expect(analytics.totalRecordings).toBe(0);
|
|
expect(analytics.completeRecordings).toBe(0);
|
|
});
|
|
|
|
it('should count total rooms correctly', async () => {
|
|
// Create 3 rooms
|
|
await createRoom();
|
|
await createRoom();
|
|
await createRoom();
|
|
|
|
const response = await getAnalytics();
|
|
expect(response.status).toBe(200);
|
|
|
|
const analytics: MeetAnalytics = response.body;
|
|
expect(analytics.totalRooms).toBe(3);
|
|
expect(analytics.activeRooms).toBe(0);
|
|
});
|
|
|
|
it('should count active rooms correctly', async () => {
|
|
// Create 3 rooms, 2 with active meetings
|
|
await createRoom();
|
|
await setupSingleRoom(true);
|
|
await setupSingleRoom(true);
|
|
|
|
const response = await getAnalytics();
|
|
expect(response.status).toBe(200);
|
|
|
|
const analytics: MeetAnalytics = response.body;
|
|
expect(analytics.totalRooms).toBe(3);
|
|
expect(analytics.activeRooms).toBe(2);
|
|
});
|
|
|
|
it('should count recordings correctly', async () => {
|
|
// Create 2 recordings, only 1 complete
|
|
await setupSingleRoomWithRecording(true);
|
|
const roomToStop = await setupSingleRoomWithRecording(false);
|
|
|
|
const response = await getAnalytics();
|
|
expect(response.status).toBe(200);
|
|
|
|
const analytics: MeetAnalytics = response.body;
|
|
expect(analytics.totalRecordings).toBe(2);
|
|
expect(analytics.completeRecordings).toBe(1);
|
|
|
|
// Now stop the incomplete recording
|
|
await stopRecording(roomToStop.recordingId!);
|
|
});
|
|
});
|
|
});
|