From 572972d915a20338d9a4a59742233f855e3720c8 Mon Sep 17 00:00:00 2001 From: bchu1 <151689101+bchu1@users.noreply.github.com> Date: Tue, 13 Aug 2024 16:59:57 -0700 Subject: [PATCH] chore: Add e2e test for errors on Neuroglancer site (#1027) #1025 Had to add some startup flags to chromium so that WebGL is enabled (and the Neuroglancer site actually loads). Tried with firefox and webkit as well and both worked without any extra flags. --- .../e2e/pageObjects/neuroglancerPage.ts | 14 ++++++++ .../e2e/pageObjects/singleRunPage.ts | 15 ++++++++ .../data-portal/e2e/singleRun.test.ts | 36 +++++++++++++++++++ .../packages/data-portal/playwright.config.ts | 3 ++ 4 files changed, 68 insertions(+) create mode 100644 frontend/packages/data-portal/e2e/pageObjects/neuroglancerPage.ts create mode 100644 frontend/packages/data-portal/e2e/pageObjects/singleRunPage.ts create mode 100644 frontend/packages/data-portal/e2e/singleRun.test.ts diff --git a/frontend/packages/data-portal/e2e/pageObjects/neuroglancerPage.ts b/frontend/packages/data-portal/e2e/pageObjects/neuroglancerPage.ts new file mode 100644 index 000000000..1094d14b2 --- /dev/null +++ b/frontend/packages/data-portal/e2e/pageObjects/neuroglancerPage.ts @@ -0,0 +1,14 @@ +import { Locator } from '@playwright/test' + +import { BasePage } from './basePage' + +/** neuroglancer-demo.appspot.com */ +export class NeuroglancerPage extends BasePage { + findViewer(): Locator { + return this.page.locator('.neuroglancer-viewer') + } + + findErrorText(): Locator { + return this.page.getByText('Error') + } +} diff --git a/frontend/packages/data-portal/e2e/pageObjects/singleRunPage.ts b/frontend/packages/data-portal/e2e/pageObjects/singleRunPage.ts new file mode 100644 index 000000000..e65219961 --- /dev/null +++ b/frontend/packages/data-portal/e2e/pageObjects/singleRunPage.ts @@ -0,0 +1,15 @@ +import { Locator } from '@playwright/test' +import { SINGLE_RUN_URL } from 'e2e/constants' + +import { BasePage } from './basePage' + +/** /runs/$id */ +export class SingleRunPage extends BasePage { + async goToPage() { + await this.goTo(SINGLE_RUN_URL) + } + + getPrimaryViewTomogramButton(): Locator { + return this.page.locator('a:has-text("View Tomogram")') + } +} diff --git a/frontend/packages/data-portal/e2e/singleRun.test.ts b/frontend/packages/data-portal/e2e/singleRun.test.ts new file mode 100644 index 000000000..9b0889569 --- /dev/null +++ b/frontend/packages/data-portal/e2e/singleRun.test.ts @@ -0,0 +1,36 @@ +import { expect, test } from '@playwright/test' + +import { NeuroglancerPage } from './pageObjects/neuroglancerPage' +import { SingleRunPage } from './pageObjects/singleRunPage' + +test.describe('Single run page: ', () => { + let page: SingleRunPage + let neuroglancerPage: NeuroglancerPage + test.beforeEach(async ({ page: playwrightPage }) => { + page = new SingleRunPage(playwrightPage) + neuroglancerPage = new NeuroglancerPage(playwrightPage) + await page.goToPage() + }) + + /** This test ensures that the test after it is not a false negative. */ + test('Invalid Neuroglancer URL results in error on Neuroglancer page', async () => { + await page.goTo( + (await page.getPrimaryViewTomogramButton().getAttribute('href'))!.replace( + '#!', + "#!'", + ), + ) + + await expect(neuroglancerPage.findViewer()).toBeVisible() + await expect(neuroglancerPage.findErrorText()).toHaveCount(1) + }) + + test('Neuroglancer URL does not result in error on Neuroglancer page', async () => { + await page.goTo( + (await page.getPrimaryViewTomogramButton().getAttribute('href'))!, + ) + + await expect(neuroglancerPage.findViewer()).toBeVisible() + await expect(neuroglancerPage.findErrorText()).toHaveCount(0) + }) +}) diff --git a/frontend/packages/data-portal/playwright.config.ts b/frontend/packages/data-portal/playwright.config.ts index e30739243..cd06aa403 100644 --- a/frontend/packages/data-portal/playwright.config.ts +++ b/frontend/packages/data-portal/playwright.config.ts @@ -38,6 +38,9 @@ export default defineConfig({ name: 'chromium', use: { ...devices['Desktop Chrome'], + launchOptions: { + args: ['--ignore-gpu-blocklist', '--use-gl=angle'], + }, contextOptions: { permissions: ['clipboard-read', 'clipboard-write'],