149 lines
4.5 KiB
TypeScript

import { afterAll, beforeAll, describe, expect, it } from '@jest/globals';
import { ParticipantRole } from '../../../../src/typings/ce/participant.js';
import { expectValidationError, expectValidParticipantTokenResponse } from '../../../helpers/assertion-helpers.js';
import {
deleteAllRooms,
disconnectFakeParticipants,
generateParticipantToken,
generateParticipantTokenCookie,
startTestServer
} from '../../../helpers/request-helpers.js';
import { RoomData, setupSingleRoom } from '../../../helpers/test-scenarios.js';
const participantName = 'TEST_PARTICIPANT';
describe('Participant API Tests', () => {
let roomData: RoomData;
beforeAll(async () => {
startTestServer();
roomData = await setupSingleRoom();
});
afterAll(async () => {
await disconnectFakeParticipants();
await deleteAllRooms();
});
describe('Generate Participant Token Tests', () => {
it('should generate a participant token without join permissions when not specifying participant name', async () => {
const response = await generateParticipantToken({
roomId: roomData.room.roomId,
secret: roomData.moderatorSecret
});
expectValidParticipantTokenResponse(response, roomData.room.roomId, ParticipantRole.MODERATOR);
});
it('should generate a participant token with moderator permissions when using the moderator secret', async () => {
const response = await generateParticipantToken({
roomId: roomData.room.roomId,
secret: roomData.moderatorSecret,
participantName
});
expectValidParticipantTokenResponse(
response,
roomData.room.roomId,
ParticipantRole.MODERATOR,
participantName
);
});
it('should generate a participant token with speaker permissions when using the speaker secret', async () => {
const response = await generateParticipantToken({
roomId: roomData.room.roomId,
secret: roomData.speakerSecret,
participantName
});
expectValidParticipantTokenResponse(
response,
roomData.room.roomId,
ParticipantRole.SPEAKER,
participantName
);
});
it(`should generate a participant token with both speaker and moderator permissions
when using the speaker secret after having a moderator token`, async () => {
const moderatorCookie = await generateParticipantTokenCookie(
roomData.room.roomId,
roomData.moderatorSecret,
`${participantName}_MODERATOR`
);
const speakerResponse = await generateParticipantToken(
{
roomId: roomData.room.roomId,
secret: roomData.speakerSecret,
participantName: `${participantName}_SPEAKER`
},
moderatorCookie
);
expectValidParticipantTokenResponse(
speakerResponse,
roomData.room.roomId,
ParticipantRole.SPEAKER,
`${participantName}_SPEAKER`,
undefined,
[ParticipantRole.MODERATOR]
);
});
it('should fail with 409 when participant already exists in the room', async () => {
roomData = await setupSingleRoom(true);
const response = await generateParticipantToken({
roomId: roomData.room.roomId,
secret: roomData.moderatorSecret,
participantName
});
expect(response.status).toBe(409);
// Recreate the room without the participant
roomData = await setupSingleRoom();
});
it('should fail with 404 when room does not exist', async () => {
const response = await generateParticipantToken({
roomId: 'non_existent_room',
secret: roomData.moderatorSecret,
participantName
});
expect(response.status).toBe(404);
});
it('should fail with 400 when secret is invalid', async () => {
const response = await generateParticipantToken({
roomId: roomData.room.roomId,
secret: 'invalid_secret',
participantName
});
expect(response.status).toBe(400);
});
});
describe('Generate Participant Token Validation Tests', () => {
it('should fail when roomId is not provided', async () => {
const response = await generateParticipantToken({
secret: roomData.moderatorSecret,
participantName
});
expectValidationError(response, 'roomId', 'Required');
});
it('should fail when secret is not provided', async () => {
const response = await generateParticipantToken({
roomId: roomData.room.roomId,
participantName
});
expectValidationError(response, 'secret', 'Required');
});
it('should fail when secret is empty', async () => {
const response = await generateParticipantToken({
roomId: roomData.room.roomId,
secret: '',
participantName
});
expectValidationError(response, 'secret', 'Secret is required');
});
});
});