From 659cdcaf73532e94ce480cc5529a715f2f05f418 Mon Sep 17 00:00:00 2001 From: CSantosM <4a.santos@gmail.com> Date: Mon, 26 Jan 2026 13:59:40 +0100 Subject: [PATCH] webcomponent: Updates dependencies and improves end-to-end tests Upgrades Playwright dependency to the latest version. Removes unnecessary test cleanup functions and simplifies test structure. Improves test stability by properly handling browser resources. --- meet-ce/frontend/angular.json | 5 +- meet-ce/frontend/webcomponent/package.json | 4 +- .../webcomponent/tests/e2e/core/room.test.ts | 49 ++++++------------- .../tests/helpers/function-helpers.ts | 2 +- 4 files changed, 21 insertions(+), 39 deletions(-) diff --git a/meet-ce/frontend/angular.json b/meet-ce/frontend/angular.json index 1ab52503..4bbc32f0 100644 --- a/meet-ce/frontend/angular.json +++ b/meet-ce/frontend/angular.json @@ -220,5 +220,8 @@ "@schematics/angular:resolver": { "typeSeparator": "." } - } + }, + "cli": { + "analytics": false + } } diff --git a/meet-ce/frontend/webcomponent/package.json b/meet-ce/frontend/webcomponent/package.json index f4907b37..3557bb45 100644 --- a/meet-ce/frontend/webcomponent/package.json +++ b/meet-ce/frontend/webcomponent/package.json @@ -25,7 +25,7 @@ "@openvidu-meet/typings": "workspace:*" }, "devDependencies": { - "@playwright/test": "1.57.0", + "@playwright/test": "1.58.0", "@rollup/plugin-commonjs": "28.0.2", "@rollup/plugin-node-resolve": "16.0.0", "@rollup/plugin-terser": "0.4.4", @@ -39,7 +39,7 @@ "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "pixelmatch": "7.1.0", - "playwright": "1.57.0", + "playwright": "1.58.0", "pngjs": "7.0.0", "rollup": "4.34.9", "rollup-plugin-postcss": "4.0.2", diff --git a/meet-ce/frontend/webcomponent/tests/e2e/core/room.test.ts b/meet-ce/frontend/webcomponent/tests/e2e/core/room.test.ts index 9bd75dc0..a6199cc6 100644 --- a/meet-ce/frontend/webcomponent/tests/e2e/core/room.test.ts +++ b/meet-ce/frontend/webcomponent/tests/e2e/core/room.test.ts @@ -6,8 +6,6 @@ import { MEET_TESTAPP_URL } from '../../config.js'; import { applyVirtualBackground, createTestRoom, - deleteAllRecordings, - deleteAllRooms, interactWithElementInIframe, joinRoomAs, leaveRoom, @@ -19,8 +17,6 @@ import { waitForElementInIframe } from '../../helpers/function-helpers.js'; -let subscribedToAppErrors = false; - // Test suite for room functionality in OpenVidu Meet test.describe('Room Functionality Tests', () => { let roomId: string; @@ -36,34 +32,17 @@ test.describe('Room Functionality Tests', () => { }); test.beforeEach(async ({ page }) => { - if (!subscribedToAppErrors) { - page.on('console', (msg) => { - const type = msg.type(); - const tag = type === 'error' ? 'ERROR' : type === 'warning' ? 'WARNING' : 'LOG'; - console.log('[' + tag + ']', msg.text()); - }); - subscribedToAppErrors = true; - } + // Subscribe to console logs for this page + page.on('console', (msg) => { + const type = msg.type(); + const tag = type === 'error' ? 'ERROR' : type === 'warning' ? 'WARNING' : 'LOG'; + console.log('[' + tag + ']', msg.text()); + }); await prepareForJoiningRoom(page, MEET_TESTAPP_URL, roomId); participantName = `P-${Math.random().toString(36).substring(2, 9)}`; }); - test.afterEach(async ({ context }) => { - // Save storage state after each test - await context.storageState({ path: 'test_localstorage_state.json' }); - }); - - test.afterAll(async ({ browser }) => { - const tempContext = await browser.newContext(); - const tempPage = await tempContext.newPage(); - await deleteAllRooms(tempPage); - await deleteAllRecordings(tempPage); - - await tempContext.close(); - await tempPage.close(); - }); - // ========================================== // COMPONENT RENDERING TESTS // ========================================== @@ -104,25 +83,25 @@ test.describe('Room Functionality Tests', () => { test('should start a videoconference and display video elements', async ({ page, browser }) => { // First participant (speaker) joins await joinRoomAs('speaker', participantName, page); - - // Check local video element const localVideo = await waitForElementInIframe(page, '.OV_stream.local'); + await expect(localVideo).toBeVisible(); // Second participant (moderator) joins - const context = await browser.newContext(); - const moderatorPage = await context.newPage(); + // const context = await browser.newContext(); + const moderatorPage = await browser.newPage(); await prepareForJoiningRoom(moderatorPage, MEET_TESTAPP_URL, roomId); - await joinRoomAs('moderator', 'moderator', moderatorPage); // Verify session established and remote video appears await waitForElementInIframe(moderatorPage, '.OV_stream.remote'); - // Cleanup - await leaveRoom(page); + // Cleanup - order matters to avoid crashes await leaveRoom(moderatorPage, 'moderator'); - await context.close(); + await moderatorPage.close(); + + // Small delay to ensure browser resources are freed + await leaveRoom(page); }); }); diff --git a/meet-ce/frontend/webcomponent/tests/helpers/function-helpers.ts b/meet-ce/frontend/webcomponent/tests/helpers/function-helpers.ts index dbc8e510..7406480e 100644 --- a/meet-ce/frontend/webcomponent/tests/helpers/function-helpers.ts +++ b/meet-ce/frontend/webcomponent/tests/helpers/function-helpers.ts @@ -469,7 +469,7 @@ export const openMoreOptionsMenu = async (page: Page) => { await waitForElementInIframe(page, '#toolbar', { state: 'visible' }); // Open more options menu await interactWithElementInIframe(page, '#more-options-btn', { action: 'click' }); - await waitForElementInIframe(page, '#more-options-menu', { state: 'visible' }); + await waitForElementInIframe(page, '#more-options-menu', { state: 'attached' }); await page.waitForTimeout(500); // Wait for menu animation };