import { test as base, expect } from '@playwright/test'; import { createPlaykitRuntime, createMailInbox, type PlaykitFixtures, type MailInbox, } from '@levkin/playkit'; import { playkitEnvFromProcess } from './env-defaults'; import { LoginPage } from './pages/LoginPage'; import { AccountMenu } from './pages/AccountMenu'; import { RegisterPage } from './pages/RegisterPage'; import { ManageUsersPanel } from './pages/ManageUsersPanel'; const runtime = createPlaykitRuntime(playkitEnvFromProcess()); type PunimtagFixtures = PlaykitFixtures & { loginPage: LoginPage; accountMenu: AccountMenu; registerPage: RegisterPage; manageUsersPanel: ManageUsersPanel; e2eCredentials: { email: string; password: string } | null; e2eViewerCredentials: { email: string; password: string } | null; mail: MailInbox | null; }; export const test = base.extend({ playkitConfig: async ({}, use) => use(runtime.playkitConfig), playkitLog: async ({}, use) => use(runtime.playkitLog), api: async ({}, use) => use(runtime.api), timings: async ({}, use) => use(runtime.timings), loginPage: async ({ page, playkitConfig }, use) => use(new LoginPage(page, playkitConfig.baseUrl)), accountMenu: async ({ page, playkitConfig }, use) => use(new AccountMenu(page, playkitConfig.baseUrl)), registerPage: async ({ page, playkitConfig }, use) => use(new RegisterPage(page, playkitConfig.baseUrl)), manageUsersPanel: async ({ page, playkitConfig }, use) => use(new ManageUsersPanel(page, playkitConfig.baseUrl)), e2eCredentials: async ({}, use) => { const email = process.env.E2E_ADMIN_EMAIL || process.env.E2E_EMAIL || ''; const password = process.env.E2E_ADMIN_PASSWORD || process.env.E2E_PASSWORD || ''; await use(email && password ? { email, password } : null); }, // NextAuth auth-DB viewer (hasWriteAccess=false) — distinct from // E2E_API_VIEWER_* (FastAPI bearer). See docs/hardening/SECRETS.md (ansible). e2eViewerCredentials: async ({}, use) => { const email = process.env.E2E_VIEWER_EMAIL || ''; const password = process.env.E2E_VIEWER_PASSWORD || ''; await use(email && password ? { email, password } : null); }, mail: async ({ playkitLog }, use) => { await use(createMailInbox(process.env, playkitLog.child({ component: 'mail' }))); }, }); export { expect };