test: add integration tests for retrieving room roles and permissions
This commit is contained in:
parent
65a5a1fe85
commit
e45420ac0f
@ -5,7 +5,8 @@ import {
|
|||||||
MeetRecordingInfo,
|
MeetRecordingInfo,
|
||||||
MeetRecordingStatus,
|
MeetRecordingStatus,
|
||||||
MeetRoom,
|
MeetRoom,
|
||||||
MeetRoomPreferences
|
MeetRoomPreferences,
|
||||||
|
ParticipantRole
|
||||||
} from '../../src/typings/ce';
|
} from '../../src/typings/ce';
|
||||||
|
|
||||||
const RECORDINGS_PATH = `${INTERNAL_CONFIG.INTERNAL_API_BASE_PATH_V1}/recordings`;
|
const RECORDINGS_PATH = `${INTERNAL_CONFIG.INTERNAL_API_BASE_PATH_V1}/recordings`;
|
||||||
@ -427,3 +428,87 @@ export const expectSuccessListRecordingResponse = (
|
|||||||
expect(response.body.pagination.maxItems).toBeLessThanOrEqual(100);
|
expect(response.body.pagination.maxItems).toBeLessThanOrEqual(100);
|
||||||
expect(response.body.pagination.maxItems).toBe(maxItems);
|
expect(response.body.pagination.maxItems).toBe(maxItems);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const expectValidRoomRolesAndPermissionsResponse = (response: any, roomId: string) => {
|
||||||
|
expect(response.status).toBe(200);
|
||||||
|
expect(response.body).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
{
|
||||||
|
role: ParticipantRole.MODERATOR,
|
||||||
|
permissions: getPermissions(roomId, ParticipantRole.MODERATOR)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: ParticipantRole.PUBLISHER,
|
||||||
|
permissions: getPermissions(roomId, ParticipantRole.PUBLISHER)
|
||||||
|
}
|
||||||
|
])
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const expectValidRoomRoleAndPermissionsResponse = (
|
||||||
|
response: any,
|
||||||
|
roomId: string,
|
||||||
|
participantRole: ParticipantRole
|
||||||
|
) => {
|
||||||
|
expect(response.status).toBe(200);
|
||||||
|
expect(response.body).toEqual({
|
||||||
|
role: participantRole,
|
||||||
|
permissions: getPermissions(roomId, participantRole)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const getPermissions = (roomId: string, role: ParticipantRole) => {
|
||||||
|
switch (role) {
|
||||||
|
case ParticipantRole.MODERATOR:
|
||||||
|
return {
|
||||||
|
livekit: {
|
||||||
|
roomCreate: true,
|
||||||
|
roomJoin: true,
|
||||||
|
roomList: true,
|
||||||
|
roomRecord: true,
|
||||||
|
roomAdmin: true,
|
||||||
|
room: roomId,
|
||||||
|
ingressAdmin: true,
|
||||||
|
canPublish: true,
|
||||||
|
canSubscribe: true,
|
||||||
|
canPublishData: true,
|
||||||
|
canUpdateOwnMetadata: true,
|
||||||
|
hidden: false,
|
||||||
|
recorder: true,
|
||||||
|
agent: false
|
||||||
|
},
|
||||||
|
openvidu: {
|
||||||
|
canPublishScreen: true,
|
||||||
|
canRecord: true,
|
||||||
|
canChat: true,
|
||||||
|
canChangeVirtualBackground: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
case ParticipantRole.PUBLISHER:
|
||||||
|
return {
|
||||||
|
livekit: {
|
||||||
|
roomJoin: true,
|
||||||
|
roomList: true,
|
||||||
|
roomRecord: false,
|
||||||
|
roomAdmin: false,
|
||||||
|
room: roomId,
|
||||||
|
ingressAdmin: false,
|
||||||
|
canPublish: true,
|
||||||
|
canSubscribe: true,
|
||||||
|
canPublishData: true,
|
||||||
|
canUpdateOwnMetadata: true,
|
||||||
|
hidden: false,
|
||||||
|
recorder: false,
|
||||||
|
agent: false
|
||||||
|
},
|
||||||
|
openvidu: {
|
||||||
|
canPublishScreen: true,
|
||||||
|
canRecord: false,
|
||||||
|
canChat: true,
|
||||||
|
canChangeVirtualBackground: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
default:
|
||||||
|
throw new Error(`Unknown role ${role}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@ -289,6 +289,24 @@ export const runReleaseActiveRecordingLock = async (roomId: string) => {
|
|||||||
await recordingService.releaseRecordingLockIfNoEgress(roomId);
|
await recordingService.releaseRecordingLockIfNoEgress(roomId);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getRoomRoles = async (roomId: string) => {
|
||||||
|
checkAppIsRunning();
|
||||||
|
|
||||||
|
const response = await request(app)
|
||||||
|
.get(`${INTERNAL_CONFIG.INTERNAL_API_BASE_PATH_V1}/rooms/${roomId}/roles`)
|
||||||
|
.send();
|
||||||
|
return response;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getRoomRoleBySecret = async (roomId: string, secret: string) => {
|
||||||
|
checkAppIsRunning();
|
||||||
|
|
||||||
|
const response = await request(app)
|
||||||
|
.get(`${INTERNAL_CONFIG.INTERNAL_API_BASE_PATH_V1}/rooms/${roomId}/roles/${secret}`)
|
||||||
|
.send();
|
||||||
|
return response;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a participant token for a room and returns the cookie containing the token
|
* Generates a participant token for a room and returns the cookie containing the token
|
||||||
*/
|
*/
|
||||||
@ -368,9 +386,6 @@ export const endMeeting = async (roomId: string, moderatorCookie: string) => {
|
|||||||
return response;
|
return response;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates a token for retrieving/deleting recordings from a room and returns the cookie containing the token
|
|
||||||
*/
|
|
||||||
export const generateRecordingToken = async (roomId: string, secret: string) => {
|
export const generateRecordingToken = async (roomId: string, secret: string) => {
|
||||||
checkAppIsRunning();
|
checkAppIsRunning();
|
||||||
|
|
||||||
@ -379,7 +394,6 @@ export const generateRecordingToken = async (roomId: string, secret: string) =>
|
|||||||
authMode: AuthMode.NONE
|
authMode: AuthMode.NONE
|
||||||
});
|
});
|
||||||
|
|
||||||
// Generate the recording token
|
|
||||||
const response = await request(app)
|
const response = await request(app)
|
||||||
.post(`${INTERNAL_CONFIG.INTERNAL_API_BASE_PATH_V1}/rooms/${roomId}/recording-token`)
|
.post(`${INTERNAL_CONFIG.INTERNAL_API_BASE_PATH_V1}/rooms/${roomId}/recording-token`)
|
||||||
.send({
|
.send({
|
||||||
|
|||||||
60
backend/tests/integration/api/rooms/get-room-roles.test.ts
Normal file
60
backend/tests/integration/api/rooms/get-room-roles.test.ts
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
import { afterAll, beforeAll, describe, expect, it } from '@jest/globals';
|
||||||
|
import { ParticipantRole } from '../../../../src/typings/ce/index.js';
|
||||||
|
import {
|
||||||
|
expectValidRoomRoleAndPermissionsResponse,
|
||||||
|
expectValidRoomRolesAndPermissionsResponse
|
||||||
|
} from '../../../helpers/assertion-helpers.js';
|
||||||
|
import {
|
||||||
|
deleteAllRooms,
|
||||||
|
getRoomRoleBySecret,
|
||||||
|
getRoomRoles,
|
||||||
|
startTestServer
|
||||||
|
} from '../../../helpers/request-helpers.js';
|
||||||
|
import { RoomData, setupSingleRoom } from '../../../helpers/test-scenarios.js';
|
||||||
|
|
||||||
|
describe('Room API Tests', () => {
|
||||||
|
let roomData: RoomData;
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
startTestServer();
|
||||||
|
roomData = await setupSingleRoom();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await deleteAllRooms();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Get Room Roles Tests', () => {
|
||||||
|
it('should retrieve all roles and associated permissions for a room', async () => {
|
||||||
|
const response = await getRoomRoles(roomData.room.roomId);
|
||||||
|
expectValidRoomRolesAndPermissionsResponse(response, roomData.room.roomId);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return a 404 error if the room does not exist', async () => {
|
||||||
|
const response = await getRoomRoles('non-existent-room-id');
|
||||||
|
expect(response.status).toBe(404);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Get Room Role Tests', () => {
|
||||||
|
it('should retrieve moderator role and associated permissions for a room with a valid moderator secret', async () => {
|
||||||
|
const response = await getRoomRoleBySecret(roomData.room.roomId, roomData.moderatorSecret);
|
||||||
|
expectValidRoomRoleAndPermissionsResponse(response, roomData.room.roomId, ParticipantRole.MODERATOR);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should retrieve publisher role and associated permissions for a room with a valid publisher secret', async () => {
|
||||||
|
const response = await getRoomRoleBySecret(roomData.room.roomId, roomData.publisherSecret);
|
||||||
|
expectValidRoomRoleAndPermissionsResponse(response, roomData.room.roomId, ParticipantRole.PUBLISHER);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return a 404 error if the room does not exist', async () => {
|
||||||
|
const response = await getRoomRoleBySecret('non-existent-room-id', roomData.moderatorSecret);
|
||||||
|
expect(response.status).toBe(404);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return a 400 error if the secret is invalid', async () => {
|
||||||
|
const response = await getRoomRoleBySecret(roomData.room.roomId, 'invalid-secret');
|
||||||
|
expect(response.status).toBe(400);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
x
Reference in New Issue
Block a user