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'],