From 54e28e223cc305ca29ad5c2bc28112f9323ae57e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BC=D1=8F=D0=BD=20=D0=9C=D0=B8=D0=BD=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Wed, 12 Nov 2025 11:42:43 -0600 Subject: [PATCH] fix(tests): Split participants presence. (#16642) * fix(tests): Split participants presence. * squash: Drop unused listener. --- tests/specs/iframe/kick.spec.ts | 136 ++++++++++++++++++ .../specs/iframe/participantsPresence.spec.ts | 107 -------------- 2 files changed, 136 insertions(+), 107 deletions(-) create mode 100644 tests/specs/iframe/kick.spec.ts diff --git a/tests/specs/iframe/kick.spec.ts b/tests/specs/iframe/kick.spec.ts new file mode 100644 index 0000000000..180bf33f76 --- /dev/null +++ b/tests/specs/iframe/kick.spec.ts @@ -0,0 +1,136 @@ +import { isEqual } from 'lodash-es'; + +import { setTestProperties } from '../../helpers/TestProperties'; +import { ensureTwoParticipants } from '../../helpers/participants'; + +setTestProperties(__filename, { + usesBrowsers: [ 'p1', 'p2' ] +}); + +describe('Kick participants', () => { + it('joining the meeting', async () => { + await ensureTwoParticipants({}, { name: 'p1', iFrameApi: true }); + + const { p1, p2 } = ctx; + + if (await p1.execute(() => config.disableIframeAPI)) { + ctx.skipSuiteTests = 'The environment has the iFrame API disabled.'; + + return; + } + + await Promise.all([ + p1.switchToMainFrame(), + p2.switchToMainFrame() + ]); + + expect(await p1.getIframeAPI().getEventResult('isModerator')).toBe(true); + + expect(await p1.getIframeAPI().getEventResult('videoConferenceJoined')).toBeDefined(); + expect(await p2.getIframeAPI().getEventResult('videoConferenceJoined')).toBeDefined(); + }); + + it('kick participant', async () => { + await ctx.p2.getIframeAPI().clearEventResults('videoConferenceLeft'); + await ctx.p2.getIframeAPI().addEventListener('videoConferenceLeft'); + await ctx.p2.switchToMainFrame(); + await ctx.p2.getIframeAPI().executeCommand('hangup'); + await ctx.p2.driver.waitUntil(() => + ctx.p2.getIframeAPI().getEventResult('videoConferenceLeft'), { + timeout: 4000, + timeoutMsg: 'videoConferenceLeft not received' + }); + + await ensureTwoParticipants({}, { name: 'p1', iFrameApi: true }); + + const { p1, p2, roomName } = ctx; + + const p1EpId = await p1.getEndpointId(); + const p2EpId = await p2.getEndpointId(); + + const p1DisplayName = await p1.getLocalDisplayName(); + const p2DisplayName = await p2.getLocalDisplayName(); + + await p1.switchToMainFrame(); + await p2.switchToMainFrame(); + + await p1.getIframeAPI().addEventListener('participantKickedOut'); + await p2.getIframeAPI().addEventListener('participantKickedOut'); + + await p2.getIframeAPI().clearEventResults('videoConferenceLeft'); + await p2.getIframeAPI().addEventListener('videoConferenceLeft'); + + await p1.getIframeAPI().executeCommand('kickParticipant', p2EpId); + + const eventP1 = await p1.driver.waitUntil(() => p1.getIframeAPI().getEventResult('participantKickedOut'), { + timeout: 2000, + timeoutMsg: 'participantKickedOut event not received on p1 side' + }); + const eventP2 = await p2.driver.waitUntil(() => p2.getIframeAPI().getEventResult('participantKickedOut'), { + timeout: 2000, + timeoutMsg: 'participantKickedOut event not received on p2 side' + }); + + expect(eventP1).toBeDefined(); + expect(eventP2).toBeDefined(); + + expect(isEqual(eventP1, { + kicked: { + id: p2EpId, + local: false, + name: p2DisplayName + }, + kicker: { + id: p1EpId, + local: true, + name: p1DisplayName + } + })).toBe(true); + + expect(isEqual(eventP2, { + kicked: { + id: 'local', + local: true, + name: p2DisplayName + }, + kicker: { + id: p1EpId, + name: p1DisplayName + } + })).toBe(true); + + const eventConferenceLeftP2 = await p2.driver.waitUntil(() => + p2.getIframeAPI().getEventResult('videoConferenceLeft'), { + timeout: 4000, + timeoutMsg: 'videoConferenceLeft not received' + }); + + expect(eventConferenceLeftP2).toBeDefined(); + expect(eventConferenceLeftP2.roomName).toBe(roomName); + }); + + it('join after kick', async () => { + const { p1 } = ctx; + + await p1.getIframeAPI().addEventListener('participantJoined'); + + // join again + await ensureTwoParticipants({}, { name: 'p1', iFrameApi: true }); + const { p2 } = ctx; + + await p1.switchToMainFrame(); + + const event = await p1.driver.waitUntil(() => p1.getIframeAPI().getEventResult('participantJoined'), { + timeout: 2000, + timeoutMsg: 'participantJoined not received' + }); + + const p2DisplayName = await p2.getLocalDisplayName(); + + expect(event).toBeDefined(); + expect(event.id).toBe(await p2.getEndpointId()); + expect(event.displayName).toBe(p2DisplayName); + expect(event.formattedDisplayName).toBe(p2DisplayName); + + }); +}); diff --git a/tests/specs/iframe/participantsPresence.spec.ts b/tests/specs/iframe/participantsPresence.spec.ts index af78299813..8d7ba1d772 100644 --- a/tests/specs/iframe/participantsPresence.spec.ts +++ b/tests/specs/iframe/participantsPresence.spec.ts @@ -1,5 +1,3 @@ -import { isEqual } from 'lodash-es'; - import { P1, P2 } from '../../helpers/Participant'; import { setTestProperties } from '../../helpers/TestProperties'; import { ensureTwoParticipants, parseJid } from '../../helpers/participants'; @@ -71,111 +69,6 @@ describe('Participants presence', () => { expect((await p1.getIframeAPI().getEventResult('participantsPaneToggled'))?.open).toBe(false); }); - it('kick participant', async () => { - await ctx.p2.getIframeAPI().clearEventResults('videoConferenceLeft'); - await ctx.p2.getIframeAPI().addEventListener('videoConferenceLeft'); - await ctx.p2.switchToMainFrame(); - await ctx.p2.getIframeAPI().executeCommand('hangup'); - await ctx.p2.driver.waitUntil(() => - ctx.p2.getIframeAPI().getEventResult('videoConferenceLeft'), { - timeout: 4000, - timeoutMsg: 'videoConferenceLeft not received' - }); - - await ensureTwoParticipants({}, { name: 'p1', iFrameApi: true }); - - const { p1, p2, roomName } = ctx; - - const p1EpId = await p1.getEndpointId(); - const p2EpId = await p2.getEndpointId(); - - const p1DisplayName = await p1.getLocalDisplayName(); - const p2DisplayName = await p2.getLocalDisplayName(); - - await p1.switchToMainFrame(); - await p2.switchToMainFrame(); - - await p1.getIframeAPI().addEventListener('participantKickedOut'); - await p2.getIframeAPI().addEventListener('participantKickedOut'); - - await p2.getIframeAPI().clearEventResults('videoConferenceLeft'); - await p2.getIframeAPI().addEventListener('videoConferenceLeft'); - - await p1.getIframeAPI().executeCommand('kickParticipant', p2EpId); - - const eventP1 = await p1.driver.waitUntil(() => p1.getIframeAPI().getEventResult('participantKickedOut'), { - timeout: 2000, - timeoutMsg: 'participantKickedOut event not received on p1 side' - }); - const eventP2 = await p2.driver.waitUntil(() => p2.getIframeAPI().getEventResult('participantKickedOut'), { - timeout: 2000, - timeoutMsg: 'participantKickedOut event not received on p2 side' - }); - - expect(eventP1).toBeDefined(); - expect(eventP2).toBeDefined(); - - expect(isEqual(eventP1, { - kicked: { - id: p2EpId, - local: false, - name: p2DisplayName - }, - kicker: { - id: p1EpId, - local: true, - name: p1DisplayName - } - })).toBe(true); - - expect(isEqual(eventP2, { - kicked: { - id: 'local', - local: true, - name: p2DisplayName - }, - kicker: { - id: p1EpId, - name: p1DisplayName - } - })).toBe(true); - - const eventConferenceLeftP2 = await p2.driver.waitUntil(() => - p2.getIframeAPI().getEventResult('videoConferenceLeft'), { - timeout: 4000, - timeoutMsg: 'videoConferenceLeft not received' - }); - - expect(eventConferenceLeftP2).toBeDefined(); - expect(eventConferenceLeftP2.roomName).toBe(roomName); - }); - - it('join after kick', async () => { - const { p1 } = ctx; - - await p1.getIframeAPI().addEventListener('participantJoined'); - await p1.getIframeAPI().addEventListener('participantMenuButtonClick'); - - // join again - await ensureTwoParticipants({}, { name: 'p1', iFrameApi: true }); - const { p2 } = ctx; - - await p1.switchToMainFrame(); - - const event = await p1.driver.waitUntil(() => p1.getIframeAPI().getEventResult('participantJoined'), { - timeout: 2000, - timeoutMsg: 'participantJoined not received' - }); - - const p2DisplayName = await p2.getLocalDisplayName(); - - expect(event).toBeDefined(); - expect(event.id).toBe(await p2.getEndpointId()); - expect(event.displayName).toBe(p2DisplayName); - expect(event.formattedDisplayName).toBe(p2DisplayName); - - }); - it('overwrite names', async () => { const { p1, p2 } = ctx;