From 8dccbd14107bb6bd9c718ecf0b586a9267df64fd Mon Sep 17 00:00:00 2001 From: mgamis-msft Date: Tue, 16 Jul 2024 05:10:40 -0700 Subject: [PATCH 01/19] Automate dominant speaker, pinning, and spotlight tests --- .../src/components/Drawer/DrawerMenu.tsx | 1 + .../tests/browser/VideoGallery.spec.tsx | 160 +++++++++++++++++ .../browser/call/hermetic/Pinning.test.ts | 170 ++++++++++++++++++ 3 files changed, 331 insertions(+) create mode 100644 packages/react-components/tests/browser/VideoGallery.spec.tsx create mode 100644 packages/react-composites/tests/browser/call/hermetic/Pinning.test.ts diff --git a/packages/react-components/src/components/Drawer/DrawerMenu.tsx b/packages/react-components/src/components/Drawer/DrawerMenu.tsx index bc831b39975..ba72c69870b 100644 --- a/packages/react-components/src/components/Drawer/DrawerMenu.tsx +++ b/packages/react-components/src/components/Drawer/DrawerMenu.tsx @@ -107,6 +107,7 @@ export const _DrawerMenu = (props: _DrawerMenuProps): JSX.Element => { styles={props.styles?.drawerSurfaceStyles} onLightDismiss={props.onLightDismiss} heading={props.heading} + data-ui-id="drawer-menu" > {menuItemsToRender?.slice(0, 1).map((item) => diff --git a/packages/react-components/tests/browser/VideoGallery.spec.tsx b/packages/react-components/tests/browser/VideoGallery.spec.tsx new file mode 100644 index 00000000000..30bc9f085d1 --- /dev/null +++ b/packages/react-components/tests/browser/VideoGallery.spec.tsx @@ -0,0 +1,160 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import React from 'react'; +import { test, expect } from '@playwright/experimental-ct-react'; +import { VideoGallery } from '../../src/components/VideoGallery'; +import { VideoGalleryLocalParticipant, VideoGalleryRemoteParticipant } from '../../src'; +import { Stack } from '@fluentui/react'; + +test.describe.only('VGL - VideoGallery tests', () => { + test.beforeEach(async ({ page }) => { + await page.evaluate(() => document.fonts.ready); + }); + + test('VideoGallery with only audio participants and dominant speakers', async ({ mount }) => { + const localParticipant: VideoGalleryLocalParticipant = { userId: 'test' }; + let remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map((i) => ({ + userId: `${i}`, + displayName: `${i}` + })); + const component = await mount( + + + + ); + await expect(component).toHaveScreenshot('VGL-1-1-videogallery-with-audio-only-before-dominant-speakers.png'); + await component.update( + + + + ); + await expect(component).toHaveScreenshot('VGL-1-2-videogallery-with-audio-only-after-dominant-speakers.png'); + }); + + test('VideoGallery with video participants and dominant speakers', async ({ mount }) => { + const localParticipant: VideoGalleryLocalParticipant = { userId: 'test' }; + const remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map( + (i) => ({ + userId: `${i}`, + displayName: `${i}` + }) + ); + // Assign video stream to some participants + remoteParticipants.find((p) => p.userId === '2')!.videoStream = { isAvailable: true }; + remoteParticipants.find((p) => p.userId === '3')!.videoStream = { isAvailable: true }; + remoteParticipants.find((p) => p.userId === '5')!.videoStream = { isAvailable: true }; + remoteParticipants.find((p) => p.userId === '7')!.videoStream = { isAvailable: true }; + remoteParticipants.find((p) => p.userId === '9')!.videoStream = { isAvailable: true }; + + const component = await mount( + + + + ); + await expect(component).toHaveScreenshot('VGL-2-1-videogallery-with-some-video-before-dominant-speakers.png'); + await component.update( + + + + ); + await expect(component).toHaveScreenshot('VGL-2-2-videogallery--with-some-video-after-dominant-speakers.png'); + }); + + test('VideoGallery with screen share on and dominant speakers', async ({ mount }) => { + const localParticipant: VideoGalleryLocalParticipant = { userId: 'test' }; + let remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map((i) => ({ + userId: `${i}`, + displayName: `${i}` + })); + remoteParticipants[5].isScreenSharingOn = true; + remoteParticipants[5].screenShareStream = { isAvailable: true }; + const component = await mount( + + + + ); + await expect(component).toHaveScreenshot('VGL-3-1-videogallery-with-screen-share-before-dominant-speakers.png'); + await component.update( + + + + ); + await expect(component).toHaveScreenshot('VGL-3-2-videogallery-with-screen-share-after-dominant-speakers.png'); + }); + + test('VideoGallery spotlight participant test', async ({ mount }) => { + const localParticipant: VideoGalleryLocalParticipant = { userId: 'test' }; + const remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map( + (i) => ({ userId: `${i}`, displayName: `${i}` }) + ); + const screenSharingParticipant: VideoGalleryRemoteParticipant = { + userId: '11', + displayName: '11' + }; + remoteParticipants.push(screenSharingParticipant); + const component = await mount( + + + + ); + await expect(component).toHaveScreenshot('VGL-4-1-videogallery-before-spotlight.png'); + + remoteParticipants.find((p) => p.userId === '8')!.spotlight = { spotlightedOrderPosition: 1 }; + component.update( + + + + ); + await expect(component).toHaveScreenshot('VGL-4-2-videogallery-after-spotlight.png'); + }); +}); + +const createMockVideoStream = (): HTMLElement => { + const mockVideoElement = document.createElement('div'); + mockVideoElement.style.width = '100%'; + mockVideoElement.style.height = '100%'; + mockVideoElement.style.textAlign = 'center'; + const imageElement = document.createElement('img'); + imageElement.src = 'images/screenshare-example.png'; + imageElement.style.maxWidth = decodeURIComponent('100%25'); + imageElement.style.maxHeight = decodeURIComponent('100%25'); + mockVideoElement.appendChild(imageElement); + return mockVideoElement as HTMLElement; +}; diff --git a/packages/react-composites/tests/browser/call/hermetic/Pinning.test.ts b/packages/react-composites/tests/browser/call/hermetic/Pinning.test.ts new file mode 100644 index 00000000000..0333c4f163c --- /dev/null +++ b/packages/react-composites/tests/browser/call/hermetic/Pinning.test.ts @@ -0,0 +1,170 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { + addVideoStream, + buildUrlWithMockAdapter, + defaultMockCallAdapterState, + defaultMockRemoteParticipant, + test +} from './fixture'; +import { expect } from '@playwright/test'; +import { dataUiId, waitForSelector, stableScreenshot, isTestProfileMobile, pageClick } from '../../common/utils'; +import { IDS } from '../../common/constants'; + +const displayNames = [ + 'Tony Hawk', + 'Marie Curie', + 'Gal Gadot', + 'Margaret Atwood', + 'Kobe Bryant', + "Conan O'Brien", + 'Paul Bridges', + 'Fiona Harper', + 'Reina Takizawa', + 'Vasily Podkolzin', + 'Antonie van Leeuwenhoek', + 'Luciana Rodriguez' +]; + +test.describe.only('PIN - Pinning tests', async () => { + test('Pin and unpin remote participants via video tile', async ({ page, serverUrl }, testInfo) => { + const participants = displayNames.map((name) => defaultMockRemoteParticipant(name)); + addVideoStream(participants[1], true); + const initialState = defaultMockCallAdapterState(participants); + + await page.goto(buildUrlWithMockAdapter(serverUrl, initialState, { newControlBarExperience: 'true' })); + const videoGallery = await waitForSelector(page, dataUiId(IDS.videoGallery)); + + expect(await stableScreenshot(page)).toMatchSnapshot('PIN-1-1-pin-video-tile-before.png'); + + const isMobile = isTestProfileMobile(testInfo); + if (isMobile) { + const videoTile = await videoGallery.waitForSelector(dataUiId(IDS.videoTile) + ` >> nth=2`); + await videoTile.dispatchEvent('touchstart'); + await pageClick(page, 'div[role="menu"] >> text=Pin for me'); + } else { + const videoTile = await videoGallery.waitForSelector(dataUiId(IDS.videoTile) + ` >> nth=2`); + await videoTile.hover(); + const moreButton = await videoTile.waitForSelector(dataUiId(IDS.videoTileMoreOptionsButton)); + await moreButton.hover(); + await moreButton.click(); + await waitForSelector(page, dataUiId('video-tile-pin-participant-button')); + await pageClick(page, dataUiId('video-tile-pin-participant-button')); + } + + expect(await stableScreenshot(page)).toMatchSnapshot('PIN-1-2-pin-video-tile-after.png'); + + if (isMobile) { + const videoTile = await videoGallery.waitForSelector(dataUiId(IDS.videoTile) + ` >> nth=1`); + await videoTile.dispatchEvent('touchstart'); + await page.waitForSelector(dataUiId('drawer-menu')); + } else { + const videoTile = await videoGallery.waitForSelector(dataUiId(IDS.videoTile) + ` >> nth=1`); + await videoTile.hover(); + const moreButton = await videoTile?.waitForSelector(dataUiId(IDS.videoTileMoreOptionsButton)); + await moreButton?.hover(); + await moreButton?.click(); + } + + expect(await stableScreenshot(page)).toMatchSnapshot('PIN-1-3-unpin-video-tile-before.png'); + + if (isMobile) { + await pageClick(page, 'div[role="menu"] >> text=Unpin'); + } else { + await pageClick(page, dataUiId('video-tile-unpin-participant-button')); + } + + expect(await stableScreenshot(page)).toMatchSnapshot('PIN-1-4-unpin-video-tile-after.png'); + }); + + test.only('Pin and unpin remote participants via participant item', async ({ page, serverUrl }, testInfo) => { + const participants = displayNames.map((name) => defaultMockRemoteParticipant(name)); + addVideoStream(participants[1], true); + const initialState = defaultMockCallAdapterState(participants); + + await page.goto(buildUrlWithMockAdapter(serverUrl, initialState, { newControlBarExperience: 'true' })); + + expect(await stableScreenshot(page)).toMatchSnapshot('PIN-2-1-pin-participant-item-before.png'); + + const isMobile = isTestProfileMobile(testInfo); + if (isMobile) { + await pageClick(page, dataUiId('common-call-composite-more-button')); + const drawerPeopleMenuDiv = await page.$('div[role="menu"] >> text=People'); + await drawerPeopleMenuDiv?.click(); + await pageClick(page, dataUiId('participant-item')); + await pageClick(page, 'div[role="menu"] >> text=Pin for me'); + await pageClick(page, 'button[aria-label="Back"]'); + } else { + await pageClick(page, dataUiId('common-call-composite-people-button')); + const participantItem = await page.waitForSelector(dataUiId('participant-item')); + await participantItem.hover(); + await pageClick(page, dataUiId(IDS.participantItemMenuButton)); + await pageClick(page, dataUiId('participant-item-pin-participant-button')); + } + + expect(await stableScreenshot(page)).toMatchSnapshot('PIN-2-2-pin-participant-item-after.png'); + + if (isMobile) { + await pageClick(page, dataUiId('common-call-composite-more-button')); + const drawerPeopleMenuDiv = await page.$('div[role="menu"] >> text=People'); + await drawerPeopleMenuDiv?.click(); + await pageClick(page, dataUiId('participant-item')); + } else { + const participantItem = await page.waitForSelector(dataUiId('participant-item')); + await participantItem.hover(); + await pageClick(page, dataUiId(IDS.participantItemMenuButton)); + } + + expect(await stableScreenshot(page)).toMatchSnapshot('PIN-2-3-unpin-participant-item-before.png'); + + if (isMobile) { + await pageClick(page, 'div[role="menu"] >> text=Unpin'); + await pageClick(page, 'button[aria-label="Back"]'); + } else { + await pageClick(page, dataUiId('participant-item-unpin-participant-button')); + } + + expect(await stableScreenshot(page)).toMatchSnapshot('PIN-2-4-unpin-participant-item-after.png'); + }); + + test('Pin max remote participants', async ({ page, serverUrl }, testInfo) => { + const participants = displayNames.map((name) => defaultMockRemoteParticipant(name)); + addVideoStream(participants[1], true); + const initialState = defaultMockCallAdapterState(participants); + + await page.goto(buildUrlWithMockAdapter(serverUrl, initialState, { newControlBarExperience: 'true' })); + const videoGallery = await waitForSelector(page, dataUiId(IDS.videoGallery)); + + const isMobile = isTestProfileMobile(testInfo); + if (isMobile) { + for (let i = 0; i < 4; i++) { + const videoTile = await videoGallery.waitForSelector(dataUiId(IDS.videoTile) + ` >> nth=-1`); + await videoTile.dispatchEvent('touchstart'); + await pageClick(page, 'div[role="menu"] >> text=Pin for me'); + } + + const videoTile = await videoGallery.waitForSelector(dataUiId(IDS.videoTile) + ` >> nth=-1`); + await videoTile.dispatchEvent('touchstart'); + await page.waitForSelector(dataUiId('drawer-menu')); + } else { + for (let i = 0; i < 4; i++) { + const videoTile = await videoGallery.waitForSelector(dataUiId(IDS.videoTile) + ` >> nth=-1`); + await videoTile.hover(); + const moreButton = await videoTile.waitForSelector(dataUiId(IDS.videoTileMoreOptionsButton)); + await moreButton.hover(); + await moreButton.click(); + await waitForSelector(page, dataUiId('video-tile-pin-participant-button')); + await pageClick(page, dataUiId('video-tile-pin-participant-button')); + } + + const videoTile = await videoGallery.waitForSelector(dataUiId(IDS.videoTile) + ` >> nth=-1`); + await videoTile.hover(); + const moreButton = await videoTile?.waitForSelector(dataUiId(IDS.videoTileMoreOptionsButton)); + await moreButton?.hover(); + await moreButton?.click(); + } + + expect(await stableScreenshot(page)).toMatchSnapshot('PIN-3-1-pin-max-tiles.png'); + }); +}); From 1ca459edffd87b4eb105b0d37742c4f89b7b26f8 Mon Sep 17 00:00:00 2001 From: mgamis-msft Date: Tue, 16 Jul 2024 05:14:15 -0700 Subject: [PATCH 02/19] changelogs --- ...ation-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json | 9 +++++++++ ...ation-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 change-beta/@azure-communication-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json create mode 100644 change/@azure-communication-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json diff --git a/change-beta/@azure-communication-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json b/change-beta/@azure-communication-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json new file mode 100644 index 00000000000..1d0761ddfcf --- /dev/null +++ b/change-beta/@azure-communication-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json @@ -0,0 +1,9 @@ +{ + "type": "patch", + "area": "improvement", + "workstream": "Automated tests", + "comment": "Automate dominant speaker, pinning, and spotlight tests", + "packageName": "@azure/communication-react", + "email": "miguelgamis@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@azure-communication-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json b/change/@azure-communication-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json new file mode 100644 index 00000000000..1d0761ddfcf --- /dev/null +++ b/change/@azure-communication-react-6a26b83a-cf4b-44d0-ac74-87df7146f917.json @@ -0,0 +1,9 @@ +{ + "type": "patch", + "area": "improvement", + "workstream": "Automated tests", + "comment": "Automate dominant speaker, pinning, and spotlight tests", + "packageName": "@azure/communication-react", + "email": "miguelgamis@microsoft.com", + "dependentChangeType": "patch" +} From 59737eb58f71069484aa9adccb05bd9e16d76012 Mon Sep 17 00:00:00 2001 From: mgamis-msft Date: Tue, 16 Jul 2024 05:18:47 -0700 Subject: [PATCH 03/19] lint fix --- packages/react-components/tests/browser/VideoGallery.spec.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-components/tests/browser/VideoGallery.spec.tsx b/packages/react-components/tests/browser/VideoGallery.spec.tsx index 30bc9f085d1..96b9cdb4bc5 100644 --- a/packages/react-components/tests/browser/VideoGallery.spec.tsx +++ b/packages/react-components/tests/browser/VideoGallery.spec.tsx @@ -14,7 +14,7 @@ test.describe.only('VGL - VideoGallery tests', () => { test('VideoGallery with only audio participants and dominant speakers', async ({ mount }) => { const localParticipant: VideoGalleryLocalParticipant = { userId: 'test' }; - let remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map((i) => ({ + const remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map((i) => ({ userId: `${i}`, displayName: `${i}` })); @@ -81,7 +81,7 @@ test.describe.only('VGL - VideoGallery tests', () => { test('VideoGallery with screen share on and dominant speakers', async ({ mount }) => { const localParticipant: VideoGalleryLocalParticipant = { userId: 'test' }; - let remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map((i) => ({ + const remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map((i) => ({ userId: `${i}`, displayName: `${i}` })); From 14b62702e322ec214cfe1b5a3ea49e5250deeb10 Mon Sep 17 00:00:00 2001 From: mgamis-msft Date: Tue, 16 Jul 2024 10:15:43 -0700 Subject: [PATCH 04/19] lint fix --- .../tests/browser/VideoGallery.spec.tsx | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/react-components/tests/browser/VideoGallery.spec.tsx b/packages/react-components/tests/browser/VideoGallery.spec.tsx index 96b9cdb4bc5..22bbec2c5e0 100644 --- a/packages/react-components/tests/browser/VideoGallery.spec.tsx +++ b/packages/react-components/tests/browser/VideoGallery.spec.tsx @@ -14,10 +14,12 @@ test.describe.only('VGL - VideoGallery tests', () => { test('VideoGallery with only audio participants and dominant speakers', async ({ mount }) => { const localParticipant: VideoGalleryLocalParticipant = { userId: 'test' }; - const remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map((i) => ({ - userId: `${i}`, - displayName: `${i}` - })); + const remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map( + (i) => ({ + userId: `${i}`, + displayName: `${i}` + }) + ); const component = await mount( { test('VideoGallery with screen share on and dominant speakers', async ({ mount }) => { const localParticipant: VideoGalleryLocalParticipant = { userId: 'test' }; - const remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map((i) => ({ - userId: `${i}`, - displayName: `${i}` - })); + const remoteParticipants: VideoGalleryRemoteParticipant[] = Array.from({ length: 10 }, (_, i) => i + 1).map( + (i) => ({ + userId: `${i}`, + displayName: `${i}` + }) + ); remoteParticipants[5].isScreenSharingOn = true; remoteParticipants[5].screenShareStream = { isAvailable: true }; const component = await mount( From a76fa9f768b8022a5a569b9b9ad71ddf106fc75c Mon Sep 17 00:00:00 2001 From: mgamis-msft <79475487+mgamis-msft@users.noreply.github.com> Date: Thu, 12 Sep 2024 22:06:14 +0000 Subject: [PATCH 05/19] remove test.only --- packages/react-components/tests/browser/VideoGallery.spec.tsx | 2 +- .../tests/browser/call/hermetic/Pinning.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/react-components/tests/browser/VideoGallery.spec.tsx b/packages/react-components/tests/browser/VideoGallery.spec.tsx index 22bbec2c5e0..f7f66e940c8 100644 --- a/packages/react-components/tests/browser/VideoGallery.spec.tsx +++ b/packages/react-components/tests/browser/VideoGallery.spec.tsx @@ -7,7 +7,7 @@ import { VideoGallery } from '../../src/components/VideoGallery'; import { VideoGalleryLocalParticipant, VideoGalleryRemoteParticipant } from '../../src'; import { Stack } from '@fluentui/react'; -test.describe.only('VGL - VideoGallery tests', () => { +test.describe('VGL - VideoGallery tests', () => { test.beforeEach(async ({ page }) => { await page.evaluate(() => document.fonts.ready); }); diff --git a/packages/react-composites/tests/browser/call/hermetic/Pinning.test.ts b/packages/react-composites/tests/browser/call/hermetic/Pinning.test.ts index 0333c4f163c..72752f92656 100644 --- a/packages/react-composites/tests/browser/call/hermetic/Pinning.test.ts +++ b/packages/react-composites/tests/browser/call/hermetic/Pinning.test.ts @@ -27,7 +27,7 @@ const displayNames = [ 'Luciana Rodriguez' ]; -test.describe.only('PIN - Pinning tests', async () => { +test.describe('PIN - Pinning tests', async () => { test('Pin and unpin remote participants via video tile', async ({ page, serverUrl }, testInfo) => { const participants = displayNames.map((name) => defaultMockRemoteParticipant(name)); addVideoStream(participants[1], true); @@ -78,7 +78,7 @@ test.describe.only('PIN - Pinning tests', async () => { expect(await stableScreenshot(page)).toMatchSnapshot('PIN-1-4-unpin-video-tile-after.png'); }); - test.only('Pin and unpin remote participants via participant item', async ({ page, serverUrl }, testInfo) => { + test('Pin and unpin remote participants via participant item', async ({ page, serverUrl }, testInfo) => { const participants = displayNames.map((name) => defaultMockRemoteParticipant(name)); addVideoStream(participants[1], true); const initialState = defaultMockCallAdapterState(participants); From 9c3fcb59a5be110c8d6c5cb38f1b87efce7ef191 Mon Sep 17 00:00:00 2001 From: mgamis-msft <79475487+mgamis-msft@users.noreply.github.com> Date: Thu, 12 Sep 2024 22:39:02 +0000 Subject: [PATCH 06/19] remove helper unused function --- .../tests/browser/VideoGallery.spec.tsx | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/packages/react-components/tests/browser/VideoGallery.spec.tsx b/packages/react-components/tests/browser/VideoGallery.spec.tsx index f7f66e940c8..6587e763f05 100644 --- a/packages/react-components/tests/browser/VideoGallery.spec.tsx +++ b/packages/react-components/tests/browser/VideoGallery.spec.tsx @@ -149,16 +149,3 @@ test.describe('VGL - VideoGallery tests', () => { await expect(component).toHaveScreenshot('VGL-4-2-videogallery-after-spotlight.png'); }); }); - -const createMockVideoStream = (): HTMLElement => { - const mockVideoElement = document.createElement('div'); - mockVideoElement.style.width = '100%'; - mockVideoElement.style.height = '100%'; - mockVideoElement.style.textAlign = 'center'; - const imageElement = document.createElement('img'); - imageElement.src = 'images/screenshare-example.png'; - imageElement.style.maxWidth = decodeURIComponent('100%25'); - imageElement.style.maxHeight = decodeURIComponent('100%25'); - mockVideoElement.appendChild(imageElement); - return mockVideoElement as HTMLElement; -}; From 5e7a76a4bc65eb4743c16088ab8f3afb2142bc8d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 22:55:36 +0000 Subject: [PATCH 07/19] Update packages/react-components browser test snapshots --- ...e-dominant-speakers-Desktop-Chrome-linux.png | Bin 0 -> 28270 bytes ...-speakers-Mobile-Android-Landscape-linux.png | Bin 0 -> 15133 bytes ...t-speakers-Mobile-Android-Portrait-linux.png | Bin 0 -> 17367 bytes ...r-dominant-speakers-Desktop-Chrome-linux.png | Bin 0 -> 29797 bytes ...-speakers-Mobile-Android-Landscape-linux.png | Bin 0 -> 16161 bytes ...t-speakers-Mobile-Android-Portrait-linux.png | Bin 0 -> 18088 bytes ...e-dominant-speakers-Desktop-Chrome-linux.png | Bin 0 -> 29223 bytes ...-speakers-Mobile-Android-Landscape-linux.png | Bin 0 -> 12168 bytes ...t-speakers-Mobile-Android-Portrait-linux.png | Bin 0 -> 14590 bytes ...r-dominant-speakers-Desktop-Chrome-linux.png | Bin 0 -> 30223 bytes ...-speakers-Mobile-Android-Landscape-linux.png | Bin 0 -> 12324 bytes ...t-speakers-Mobile-Android-Portrait-linux.png | Bin 0 -> 14829 bytes ...e-dominant-speakers-Desktop-Chrome-linux.png | Bin 0 -> 17617 bytes ...-speakers-Mobile-Android-Landscape-linux.png | Bin 0 -> 9787 bytes ...t-speakers-Mobile-Android-Portrait-linux.png | Bin 0 -> 9747 bytes ...r-dominant-speakers-Desktop-Chrome-linux.png | Bin 0 -> 17668 bytes ...-speakers-Mobile-Android-Landscape-linux.png | Bin 0 -> 9711 bytes ...t-speakers-Mobile-Android-Portrait-linux.png | Bin 0 -> 9675 bytes ...ry-before-spotlight-Desktop-Chrome-linux.png | Bin 0 -> 29778 bytes ...spotlight-Mobile-Android-Landscape-linux.png | Bin 0 -> 17235 bytes ...-spotlight-Mobile-Android-Portrait-linux.png | Bin 0 -> 18635 bytes ...ery-after-spotlight-Desktop-Chrome-linux.png | Bin 0 -> 19571 bytes ...spotlight-Mobile-Android-Landscape-linux.png | Bin 0 -> 9963 bytes ...-spotlight-Mobile-Android-Portrait-linux.png | Bin 0 -> 11563 bytes 24 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-1-1-videogallery-with-audio-only-before-dominant-speakers-Desktop-Chrome-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-1-1-videogallery-with-audio-only-before-dominant-speakers-Mobile-Android-Landscape-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-1-1-videogallery-with-audio-only-before-dominant-speakers-Mobile-Android-Portrait-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-1-2-videogallery-with-audio-only-after-dominant-speakers-Desktop-Chrome-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-1-2-videogallery-with-audio-only-after-dominant-speakers-Mobile-Android-Landscape-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-1-2-videogallery-with-audio-only-after-dominant-speakers-Mobile-Android-Portrait-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-2-1-videogallery-with-some-video-before-dominant-speakers-Desktop-Chrome-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-2-1-videogallery-with-some-video-before-dominant-speakers-Mobile-Android-Landscape-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-2-1-videogallery-with-some-video-before-dominant-speakers-Mobile-Android-Portrait-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-2-2-videogallery--with-some-video-after-dominant-speakers-Desktop-Chrome-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-2-2-videogallery--with-some-video-after-dominant-speakers-Mobile-Android-Landscape-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-2-2-videogallery--with-some-video-after-dominant-speakers-Mobile-Android-Portrait-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-3-1-videogallery-with-screen-share-before-dominant-speakers-Desktop-Chrome-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-3-1-videogallery-with-screen-share-before-dominant-speakers-Mobile-Android-Landscape-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-3-1-videogallery-with-screen-share-before-dominant-speakers-Mobile-Android-Portrait-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-3-2-videogallery-with-screen-share-after-dominant-speakers-Desktop-Chrome-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-3-2-videogallery-with-screen-share-after-dominant-speakers-Mobile-Android-Landscape-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-3-2-videogallery-with-screen-share-after-dominant-speakers-Mobile-Android-Portrait-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-4-1-videogallery-before-spotlight-Desktop-Chrome-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-4-1-videogallery-before-spotlight-Mobile-Android-Landscape-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-4-1-videogallery-before-spotlight-Mobile-Android-Portrait-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-4-2-videogallery-after-spotlight-Desktop-Chrome-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-4-2-videogallery-after-spotlight-Mobile-Android-Landscape-linux.png create mode 100644 packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-4-2-videogallery-after-spotlight-Mobile-Android-Portrait-linux.png diff --git a/packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-1-1-videogallery-with-audio-only-before-dominant-speakers-Desktop-Chrome-linux.png b/packages/react-components/tests/snapshots/stable/VideoGallery.spec.tsx-snapshots/VGL-1-1-videogallery-with-audio-only-before-dominant-speakers-Desktop-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..504399031b8e049b1cfb0e59798c3f5aaab0a816 GIT binary patch literal 28270 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