import { test, expect, _electron as electron } from '@playwright/test'; test.describe('History Page E2E', () => { let electronApp: any; let window: any; test.beforeAll(async () => { electronApp = await electron.launch({ args: ['out/main/index.js'], env: { ...process.env, NODE_ENV: 'test', }, recordVideo: { dir: 'test-results/videos/', size: { width: 1280, height: 720 } } }); // Wait for the main window to be ready let found = false; for (const w of electronApp.windows()) { await w.waitForLoadState('domcontentloaded'); const t = await w.title(); if (t === 'D3RO Voice' || t === 'd3ro-voice') { window = w; found = true; break; } } if (!found) { window = await electronApp.waitForEvent('window', { predicate: async (page) => { await page.waitForLoadState('domcontentloaded'); const t = await page.title(); return t === 'D3RO Voice' || t === 'd3ro-voice'; } }); } // Bypass onboarding using the injected IPC API await window.evaluate(async () => { if ((window as any).electronAPI) { await (window as any).electronAPI.config.set({ key: 'onboardingCompleted', value: true }); await (window as any).electronAPI.config.set({ key: 'system.startupBackend', value: 'online' }); } }); // Reload to apply the bypassed config await window.reload(); await window.waitForLoadState('domcontentloaded'); }); test.afterAll(async () => { if (electronApp) { await electronApp.close(); } }); test('should clear all history', async () => { // Navigate to Records (sidebar label "기록"/"Records") await window.locator('text=/^(Records|기록)$/').first().click(); await expect(window.getByRole('heading', { level: 1, name: /^(Records|기록)$/ })).toBeVisible(); // 전체 삭제는 더보기 메뉴 안의 위험 행동 → 확인 대화상자를 거친다 await window.getByTestId('records-more-button').click(); const clearButton = window.getByTestId('clear-all-history-button'); await expect(clearButton).toBeVisible(); await clearButton.click(); // 기록이 있으면 확인 대화상자가 뜬다 — "모두 삭제"로 확정 const confirm = window.getByRole('button', { name: /^(Delete all|모두 삭제)$/ }); await confirm .waitFor({ state: 'visible', timeout: 3000 }) .then(() => confirm.click()) .catch(() => undefined); // Expect empty state to appear await expect(window.getByTestId('empty-state-card')).toBeVisible(); }); });