From adcd5d8e8d6839936519b20fe5e3f0b0367ef20c Mon Sep 17 00:00:00 2001 From: juancarmore Date: Tue, 5 Aug 2025 17:41:42 +0200 Subject: [PATCH] e2e: update room creation logic to use roomName instead of roomIdPrefix and use roomId as identifier for elements in room list --- .../tests/e2e/core/events.test.ts | 18 +- .../webcomponent/tests/e2e/core/room.test.ts | 21 +- .../tests/e2e/core/webhooks.test.ts | 18 +- .../tests/e2e/recording-access.test.ts | 30 ++- .../tests/e2e/ui-feature-preferences.test.ts | 184 +++++++++++------- .../tests/helpers/function-helpers.ts | 10 +- testapp/public/views/index.mustache | 14 +- testapp/src/controllers/homeController.ts | 6 +- 8 files changed, 150 insertions(+), 151 deletions(-) diff --git a/frontend/webcomponent/tests/e2e/core/events.test.ts b/frontend/webcomponent/tests/e2e/core/events.test.ts index cd01da0..b3d35cc 100644 --- a/frontend/webcomponent/tests/e2e/core/events.test.ts +++ b/frontend/webcomponent/tests/e2e/core/events.test.ts @@ -1,6 +1,7 @@ import { expect, test } from '@playwright/test'; import { MEET_TESTAPP_URL } from '../../config'; import { + createTestRoom, deleteAllRecordings, deleteAllRooms, joinRoomAs, @@ -11,21 +12,12 @@ import { let subscribedToAppErrors = false; test.describe('Web Component E2E Tests', () => { - const testRoomPrefix = 'test-room'; + let roomId: string; let participantName: string; - test.beforeAll(async ({ browser }) => { + test.beforeAll(async () => { // Create a test room before all tests - const tempContext = await browser.newContext(); - const tempPage = await tempContext.newPage(); - await tempPage.goto(MEET_TESTAPP_URL); - await tempPage.waitForSelector('.create-room'); - await tempPage.fill('#room-id-prefix', testRoomPrefix); - await tempPage.click('.create-room-btn'); - await tempPage.waitForSelector(`#${testRoomPrefix}`); - - await tempPage.close(); - await tempContext.close(); + roomId = await createTestRoom('test-room'); }); test.beforeEach(async ({ page }) => { @@ -38,7 +30,7 @@ test.describe('Web Component E2E Tests', () => { subscribedToAppErrors = true; } - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); participantName = `P-${Math.random().toString(36).substring(2, 9)}`; }); diff --git a/frontend/webcomponent/tests/e2e/core/room.test.ts b/frontend/webcomponent/tests/e2e/core/room.test.ts index 3329cc7..c0e5e70 100644 --- a/frontend/webcomponent/tests/e2e/core/room.test.ts +++ b/frontend/webcomponent/tests/e2e/core/room.test.ts @@ -5,6 +5,7 @@ import { PNG } from 'pngjs'; import { MEET_TESTAPP_URL } from '../../config.js'; import { applyVirtualBackground, + createTestRoom, deleteAllRecordings, deleteAllRooms, interactWithElementInIframe, @@ -22,26 +23,16 @@ let subscribedToAppErrors = false; // Test suite for room functionality in OpenVidu Meet test.describe('Room Functionality Tests', () => { - const testRoomPrefix = 'testing-room'; + let roomId: string; let participantName: string; // ========================================== // SETUP & TEARDOWN // ========================================== - test.beforeAll(async ({ browser }) => { + test.beforeAll(async () => { // Create a test room before all tests - const tempContext = await browser.newContext(); - const tempPage = await tempContext.newPage(); - await tempPage.goto(MEET_TESTAPP_URL); - await tempPage.waitForSelector('.create-room'); - await tempPage.fill('#room-id-prefix', testRoomPrefix); - await tempPage.click('.create-room-btn'); - await tempPage.waitForTimeout(1000); - await tempPage.waitForSelector(`#${testRoomPrefix}`); - - await tempPage.close(); - await tempContext.close(); + roomId = await createTestRoom('test-room'); }); test.beforeEach(async ({ page }) => { @@ -54,7 +45,7 @@ test.describe('Room Functionality Tests', () => { subscribedToAppErrors = true; } - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); participantName = `P-${Math.random().toString(36).substring(2, 9)}`; }); @@ -121,7 +112,7 @@ test.describe('Room Functionality Tests', () => { // Second participant (moderator) joins const context = await browser.newContext(); const moderatorPage = await context.newPage(); - await prepareForJoiningRoom(moderatorPage, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(moderatorPage, MEET_TESTAPP_URL, roomId); await joinRoomAs('moderator', 'moderator', moderatorPage); diff --git a/frontend/webcomponent/tests/e2e/core/webhooks.test.ts b/frontend/webcomponent/tests/e2e/core/webhooks.test.ts index f0c8b97..5f3f9fa 100644 --- a/frontend/webcomponent/tests/e2e/core/webhooks.test.ts +++ b/frontend/webcomponent/tests/e2e/core/webhooks.test.ts @@ -1,6 +1,7 @@ import { expect, test } from '@playwright/test'; import { MEET_TESTAPP_URL } from '../../config.js'; import { + createTestRoom, deleteAllRecordings, deleteAllRooms, joinRoomAs, @@ -11,21 +12,12 @@ import { let subscribedToAppErrors = false; test.describe('Web Component E2E Tests', () => { - const testRoomPrefix = 'test-room'; + let roomId: string; let participantName: string; - test.beforeAll(async ({ browser }) => { + test.beforeAll(async () => { // Create a test room before all tests - const tempContext = await browser.newContext(); - const tempPage = await tempContext.newPage(); - await tempPage.goto(MEET_TESTAPP_URL); - await tempPage.waitForSelector('.create-room'); - await tempPage.fill('#room-id-prefix', testRoomPrefix); - await tempPage.click('.create-room-btn'); - await tempPage.waitForSelector(`#${testRoomPrefix}`); - - await tempPage.close(); - await tempContext.close(); + roomId = await createTestRoom('test-room'); }); test.beforeEach(async ({ page }) => { @@ -38,7 +30,7 @@ test.describe('Web Component E2E Tests', () => { subscribedToAppErrors = true; } - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); participantName = `P-${Math.random().toString(36).substring(2, 9)}`; }); diff --git a/frontend/webcomponent/tests/e2e/recording-access.test.ts b/frontend/webcomponent/tests/e2e/recording-access.test.ts index ad84ed8..954545e 100644 --- a/frontend/webcomponent/tests/e2e/recording-access.test.ts +++ b/frontend/webcomponent/tests/e2e/recording-access.test.ts @@ -20,22 +20,16 @@ let subscribedToAppErrors = false; let recordingCreated = false; test.describe('Recording Access Tests', () => { - const testRoomPrefix = 'recording-access-test'; - let participantName: string; let roomId: string; + let participantName: string; let adminCookie: string; test.beforeAll(async () => { + // Login as admin to get authentication cookie adminCookie = await loginAsAdmin(); - // Ensure the test room is created before running tests - roomId = await createTestRoom(testRoomPrefix, { - chatPreferences: { enabled: true }, - recordingPreferences: { - enabled: true, - allowAccessTo: MeetRecordingAccess.ADMIN - }, - virtualBackgroundPreferences: { enabled: true } - }); + + // Create a test room before all tests + roomId = await createTestRoom('test-room'); }); test.beforeEach(async ({ browser, page }) => { @@ -53,7 +47,7 @@ test.describe('Recording Access Tests', () => { if (!recordingCreated) { const tempContext = await browser.newContext(); const tempPage = await tempContext.newPage(); - await prepareForJoiningRoom(tempPage, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(tempPage, MEET_TESTAPP_URL, roomId); await joinRoomAs('moderator', participantName, tempPage); await startStopRecording(tempPage, 'start'); @@ -92,7 +86,7 @@ test.describe('Recording Access Tests', () => { ); await page.goto(MEET_TESTAPP_URL); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await accessRoomAs('moderator', page); await waitForElementInIframe(page, '#view-recordings-btn', { state: 'hidden' }); @@ -113,7 +107,7 @@ test.describe('Recording Access Tests', () => { ); await page.goto(MEET_TESTAPP_URL); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await accessRoomAs('publisher', page); await waitForElementInIframe(page, '#view-recordings-btn', { state: 'hidden' }); @@ -134,7 +128,7 @@ test.describe('Recording Access Tests', () => { ); await page.goto(MEET_TESTAPP_URL); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await viewRecordingsAs('moderator', page); await waitForElementInIframe(page, 'app-room-recordings', { state: 'visible' }); @@ -155,7 +149,7 @@ test.describe('Recording Access Tests', () => { ); await page.goto(MEET_TESTAPP_URL); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await accessRoomAs('publisher', page); await waitForElementInIframe(page, '#view-recordings-btn', { state: 'hidden' }); @@ -176,7 +170,7 @@ test.describe('Recording Access Tests', () => { ); await page.goto(MEET_TESTAPP_URL); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await viewRecordingsAs('moderator', page); await waitForElementInIframe(page, 'app-room-recordings', { state: 'visible' }); @@ -197,7 +191,7 @@ test.describe('Recording Access Tests', () => { ); await page.goto(MEET_TESTAPP_URL); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await viewRecordingsAs('publisher', page); await waitForElementInIframe(page, 'app-room-recordings', { state: 'visible' }); diff --git a/frontend/webcomponent/tests/e2e/ui-feature-preferences.test.ts b/frontend/webcomponent/tests/e2e/ui-feature-preferences.test.ts index d261fe2..0971d15 100644 --- a/frontend/webcomponent/tests/e2e/ui-feature-preferences.test.ts +++ b/frontend/webcomponent/tests/e2e/ui-feature-preferences.test.ts @@ -22,9 +22,8 @@ import { let subscribedToAppErrors = false; test.describe('UI Feature Preferences Tests', () => { - const testRoomPrefix = 'ui-feature-testing-room'; - let participantName: string; let roomId: string; + let participantName: string; let adminCookie: string; // ========================================== @@ -34,6 +33,9 @@ test.describe('UI Feature Preferences Tests', () => { test.beforeAll(async () => { // Login as admin to get authentication cookie adminCookie = await loginAsAdmin(); + + // Create a test room before all tests + roomId = await createTestRoom('test-room'); }); test.beforeEach(async ({ page }) => { @@ -71,17 +73,21 @@ test.describe('UI Feature Preferences Tests', () => { }); test('should show chat button when chat is enabled', async ({ page }) => { - roomId = await createTestRoom(testRoomPrefix, { - chatPreferences: { enabled: true }, - recordingPreferences: { - enabled: true, - allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + await updateRoomPreferences( + roomId, + { + chatPreferences: { enabled: true }, + recordingPreferences: { + enabled: true, + allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + }, + virtualBackgroundPreferences: { enabled: true } }, - virtualBackgroundPreferences: { enabled: true } - }); + adminCookie + ); - await page.reload(); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await page.goto(MEET_TESTAPP_URL); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await joinRoomAs('publisher', participantName, page); // Check that chat button is visible @@ -91,17 +97,21 @@ test.describe('UI Feature Preferences Tests', () => { test('should hide chat button when chat is disabled', async ({ page }) => { // Disable chat via API - roomId = await createTestRoom(testRoomPrefix, { - chatPreferences: { enabled: false }, - recordingPreferences: { - enabled: true, - allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + await updateRoomPreferences( + roomId, + { + chatPreferences: { enabled: false }, + recordingPreferences: { + enabled: true, + allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + }, + virtualBackgroundPreferences: { enabled: true } }, - virtualBackgroundPreferences: { enabled: true } - }); + adminCookie + ); - await page.reload(); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await page.goto(MEET_TESTAPP_URL); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await joinRoomAs('publisher', participantName, page); // Check that chat button is not visible @@ -116,17 +126,21 @@ test.describe('UI Feature Preferences Tests', () => { test.describe('Recording Feature', () => { test('should show recording button for moderators', async ({ page }) => { - roomId = await createTestRoom(testRoomPrefix, { - chatPreferences: { enabled: true }, - recordingPreferences: { - enabled: true, - allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + await updateRoomPreferences( + roomId, + { + chatPreferences: { enabled: true }, + recordingPreferences: { + enabled: true, + allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + }, + virtualBackgroundPreferences: { enabled: true } }, - virtualBackgroundPreferences: { enabled: true } - }); + adminCookie + ); - await page.reload(); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await page.goto(MEET_TESTAPP_URL); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await joinRoomAs('moderator', participantName, page); await openMoreOptionsMenu(page); @@ -146,17 +160,21 @@ test.describe('UI Feature Preferences Tests', () => { }); test('should not show recording button for publisher', async ({ page }) => { - roomId = await createTestRoom(testRoomPrefix, { - chatPreferences: { enabled: true }, - recordingPreferences: { - enabled: true, - allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + await updateRoomPreferences( + roomId, + { + chatPreferences: { enabled: true }, + recordingPreferences: { + enabled: true, + allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + }, + virtualBackgroundPreferences: { enabled: true } }, - virtualBackgroundPreferences: { enabled: true } - }); + adminCookie + ); - await page.reload(); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await page.goto(MEET_TESTAPP_URL); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await joinRoomAs('publisher', participantName, page); // Check that recording button is not visible for publisher @@ -167,17 +185,21 @@ test.describe('UI Feature Preferences Tests', () => { test('should not show recording button for moderators when recording is disabled', async ({ page }) => { // Disable recording via API - roomId = await createTestRoom(testRoomPrefix, { - chatPreferences: { enabled: true }, - recordingPreferences: { - enabled: false, - allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + await updateRoomPreferences( + roomId, + { + chatPreferences: { enabled: true }, + recordingPreferences: { + enabled: false, + allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + }, + virtualBackgroundPreferences: { enabled: true } }, - virtualBackgroundPreferences: { enabled: true } - }); + adminCookie + ); - await page.reload(); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await page.goto(MEET_TESTAPP_URL); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await joinRoomAs('moderator', participantName, page); // Check that recording button is not visible @@ -204,17 +226,21 @@ test.describe('UI Feature Preferences Tests', () => { }); test('should show virtual background button when enabled', async ({ page }) => { // Ensure virtual backgrounds are enabled - roomId = await createTestRoom(testRoomPrefix, { - chatPreferences: { enabled: true }, - recordingPreferences: { - enabled: true, - allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + await updateRoomPreferences( + roomId, + { + chatPreferences: { enabled: true }, + recordingPreferences: { + enabled: true, + allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + }, + virtualBackgroundPreferences: { enabled: true } }, - virtualBackgroundPreferences: { enabled: true } - }); + adminCookie + ); - await page.reload(); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await page.goto(MEET_TESTAPP_URL); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await joinRoomAs('publisher', participantName, page); // Click more options to reveal virtual background button @@ -229,17 +255,21 @@ test.describe('UI Feature Preferences Tests', () => { test('should hide virtual background button when disabled', async ({ page }) => { // Disable virtual backgrounds via API - roomId = await createTestRoom(testRoomPrefix, { - chatPreferences: { enabled: true }, - recordingPreferences: { - enabled: true, - allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + await updateRoomPreferences( + roomId, + { + chatPreferences: { enabled: true }, + recordingPreferences: { + enabled: true, + allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + }, + virtualBackgroundPreferences: { enabled: false } }, - virtualBackgroundPreferences: { enabled: false } - }); + adminCookie + ); - await page.reload(); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await page.goto(MEET_TESTAPP_URL); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await joinRoomAs('publisher', participantName, page); // Click more options to reveal virtual background button @@ -254,17 +284,21 @@ test.describe('UI Feature Preferences Tests', () => { page }) => { // Ensure virtual backgrounds are enabled - roomId = await createTestRoom(testRoomPrefix, { - chatPreferences: { enabled: true }, - recordingPreferences: { - enabled: true, - allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + await updateRoomPreferences( + roomId, + { + chatPreferences: { enabled: true }, + recordingPreferences: { + enabled: true, + allowAccessTo: MeetRecordingAccess.ADMIN_MODERATOR_PUBLISHER + }, + virtualBackgroundPreferences: { enabled: true } }, - virtualBackgroundPreferences: { enabled: true } - }); + adminCookie + ); - await page.reload(); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await page.goto(MEET_TESTAPP_URL); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await joinRoomAs('publisher', participantName, page); await applyVirtualBackground(page, '2'); @@ -288,7 +322,7 @@ test.describe('UI Feature Preferences Tests', () => { await leaveRoom(page); await page.reload(); - await prepareForJoiningRoom(page, MEET_TESTAPP_URL, testRoomPrefix); + await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); await joinRoomAs('publisher', participantName, page); await page.waitForTimeout(2000); diff --git a/frontend/webcomponent/tests/helpers/function-helpers.ts b/frontend/webcomponent/tests/helpers/function-helpers.ts index f5cd764..08ba9b1 100644 --- a/frontend/webcomponent/tests/helpers/function-helpers.ts +++ b/frontend/webcomponent/tests/helpers/function-helpers.ts @@ -100,7 +100,7 @@ const getDefaultRoomPreferences = (): MeetRoomPreferences => ({ // Helper function to create a room for testing export const createTestRoom = async ( - roomIdPrefix: string, + roomName: string, preferences: MeetRoomPreferences = getDefaultRoomPreferences() ) => { const response = await fetch(`${MEET_API_URL}/api/v1/rooms`, { @@ -110,7 +110,7 @@ export const createTestRoom = async ( 'x-api-key': MEET_API_KEY }, body: JSON.stringify({ - roomIdPrefix, + roomName, autoDeletionDate: new Date(Date.now() + 61 * 60 * 1000).getTime(), // 1 hour from now preferences }) @@ -128,7 +128,7 @@ export const createTestRoom = async ( // Helper function to update room preferences via REST API export const updateRoomPreferences = async (roomId: string, preferences: any, adminCookie: string) => { - const response = await fetch(`${MEET_API_URL}/internal-api/v1/rooms/${roomId}`, { + const response = await fetch(`${MEET_API_URL}/api/v1/rooms/${roomId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', @@ -216,10 +216,10 @@ export const startStopRecording = async (page: Page, action: 'start' | 'stop') = } }; -export const prepareForJoiningRoom = async (page: Page, url: string, roomPrefix: string) => { +export const prepareForJoiningRoom = async (page: Page, url: string, roomId: string) => { await page.goto(url); await page.waitForSelector('.rooms-container'); - await page.waitForSelector(`#${roomPrefix}`); + await page.waitForSelector(`#${roomId}`); await page.click('.dropdown-button'); await page.waitForSelector('#join-as-moderator'); await page.waitForSelector('#join-as-publisher'); diff --git a/testapp/public/views/index.mustache b/testapp/public/views/index.mustache index ba0c20f..a2a024d 100644 --- a/testapp/public/views/index.mustache +++ b/testapp/public/views/index.mustache @@ -50,7 +50,7 @@