diff --git a/desktop/tests/e2e/specs/smoke_chat.spec.ts b/desktop/tests/e2e/specs/smoke_chat.spec.ts index 8d3e9bb..c3a402f 100644 --- a/desktop/tests/e2e/specs/smoke_chat.spec.ts +++ b/desktop/tests/e2e/specs/smoke_chat.spec.ts @@ -6,12 +6,53 @@ * * 前提条件: * - Desktop App 运行在 http://localhost:1420 (pnpm tauri dev) + * - SaaS Server 运行在 http://localhost:8080 (浏览器模式需要) * - 后端服务可用 (SaaS 或 Kernel) * * 运行: cd desktop && npx playwright test smoke_chat */ -import { test, expect, type Page } from '@playwright/test'; +import { test as base, expect, type Page } from '@playwright/test'; + +const SaaS_BASE = 'http://localhost:8080/api/v1'; +const ADMIN_USER = 'admin'; +const ADMIN_PASS = 'admin123'; + +// Extend test with SaaS login fixture for browser-mode tests +const test = base.extend<{ + saasAuthenticated: void; +}>({ + saasAuthenticated: [async ({ page }, use) => { + // Check if running in Tauri — if so, no SaaS login needed + const isTauri = await page.evaluate(() => !!(window as any).__TAURI_INTERNALS__).catch(() => false); + + if (!isTauri) { + // Browser mode: need SaaS session before chat can work + // Login via SaaS API and store session in localStorage + try { + const loginRes = await page.request.post(`${SaaS_BASE}/auth/login`, { + data: { username: ADMIN_USER, password: ADMIN_PASS }, + }); + if (loginRes.ok()) { + const loginJson = await loginRes.json(); + // Inject SaaS session into localStorage so the app can connect + await page.evaluate((session) => { + localStorage.setItem('zclaw-saas-session', JSON.stringify({ + saasUrl: 'http://localhost:8080', + token: session.token, + account: session.account, + })); + }, loginJson); + } else { + console.log(`SaaS login failed (${loginRes.status()}), browser chat may not work`); + } + } catch (e) { + console.log('SaaS server not reachable, browser chat will not work:', (e as Error).message); + } + } + await use(); + }, { auto: true }], +}); test.setTimeout(120000);