diff --git a/backend/tests/integration/api/meetings/end-meeting.test.ts b/backend/tests/integration/api/meetings/end-meeting.test.ts new file mode 100644 index 0000000..04bc328 --- /dev/null +++ b/backend/tests/integration/api/meetings/end-meeting.test.ts @@ -0,0 +1,81 @@ +import { afterAll, beforeAll, describe, expect, it } from '@jest/globals'; +import { container } from '../../../../src/config/index.js'; +import { LiveKitService } from '../../../../src/services/index.js'; +import { + deleteAllRooms, + deleteRoom, + disconnectFakeParticipants, + endMeeting, + getRoom, + startTestServer +} from '../../../helpers/request-helpers.js'; +import { RoomData, setupSingleRoom } from '../../../helpers/test-scenarios.js'; +import { OpenViduMeetError } from '../../../../src/models/error.model.js'; + +describe('Meetings API Tests', () => { + let livekitService: LiveKitService; + let roomData: RoomData; + + beforeAll(async () => { + startTestServer(); + roomData = await setupSingleRoom(true); + livekitService = container.get(LiveKitService); + }); + + afterAll(async () => { + await disconnectFakeParticipants(); + await deleteAllRooms(); + }); + + describe('End Meeting Tests', () => { + it('should remove LiveKit room when ending meeting', async () => { + // Check if the LiveKit room exists before ending the meeting + const lkRoom = await livekitService.getRoom(roomData.room.roomId); + expect(lkRoom).toBeDefined(); + expect(lkRoom.name).toBe(roomData.room.roomId); + + // End the meeting + let response = await endMeeting(roomData.room.roomId, roomData.moderatorCookie); + expect(response.status).toBe(200); + + // Check if the LiveKit room has been removed + try { + await livekitService.getRoom(roomData.room.roomId); + } catch (error) { + expect((error as OpenViduMeetError).statusCode).toBe(404); + } + + // Check if the Meet room already exists + response = await getRoom(roomData.room.roomId); + expect(response.status).toBe(200); + }); + + it('should succeed even if there is not a current meeting for the room', async () => { + // Set up a new room without participants + roomData = await setupSingleRoom(); + + // Check that the LiveKit room does not exist before ending the meeting + try { + await livekitService.getRoom(roomData.room.roomId); + } catch (error) { + expect((error as OpenViduMeetError).statusCode).toBe(404); + } + + // End the meeting + const response = await endMeeting(roomData.room.roomId, roomData.moderatorCookie); + expect(response.status).toBe(200); + + // Recreate the room with a participant + roomData = await setupSingleRoom(true); + }); + + it('should fail with 404 if the room does not exist', async () => { + // Delete the room to ensure it does not exist + let response = await deleteRoom(roomData.room.roomId, { force: true }); + expect(response.status).toBe(204); + + response = await endMeeting(roomData.room.roomId, roomData.moderatorCookie); + expect(response.status).toBe(404); + }); + }); +});