From f47035656e12d459ef5a9e1e4052fd7a025a5699 Mon Sep 17 00:00:00 2001 From: "privilegedescalation-engineer[bot]" <269729446+privilegedescalation-engineer[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 14:55:56 +0000 Subject: [PATCH] Add e2e/auth.setup.ts --- e2e/auth.setup.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 e2e/auth.setup.ts diff --git a/e2e/auth.setup.ts b/e2e/auth.setup.ts new file mode 100644 index 0000000..aa56492 --- /dev/null +++ b/e2e/auth.setup.ts @@ -0,0 +1,34 @@ +import { test as setup, expect, Page } from '@playwright/test'; + +const AUTH_STATE_PATH = 'e2e/.auth/state.json'; + +async function authenticateWithToken(page: Page, token: string): Promise { + await page.goto('/'); + await page.waitForURL(/\/(login|token)$/); + + if (page.url().includes('/login')) { + const useTokenBtn = page.getByRole('button', { name: /use a token/i }); + await useTokenBtn.waitFor({ state: 'visible', timeout: 15_000 }); + await useTokenBtn.click(); + await page.waitForURL('**/token'); + } + + await page.getByRole('textbox', { name: /id token/i }).fill(token); + await page.getByRole('button', { name: /authenticate/i }).click(); + + await expect(page.getByRole('navigation', { name: 'Navigation' })).toBeVisible({ + timeout: 15_000, + }); +} + +setup('authenticate with Headlamp', async ({ page }) => { + const token = process.env.HEADLAMP_TOKEN; + + if (!token) { + throw new Error('Set HEADLAMP_TOKEN for token auth'); + } + + await authenticateWithToken(page, token); + + await page.context().storageState({ path: AUTH_STATE_PATH }); +}); \ No newline at end of file