d3ro-voice/apps/desktop/tests/e2e/history.spec.ts
2026-08-29 18:33:45 +09:00

79 lines
2.4 KiB
TypeScript

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 () => {
// Wait for Dashboard to load first
await expect(window.locator('text=/^(Dashboard|대시보드)$/').first()).toBeVisible({ timeout: 10000 });
// Navigate to History Tab
await window.locator('text=/^(History|히스토리|기록)$/').first().click();
await expect(window.locator('text=/^(History|히스토리|변환 기록)$/').first()).toBeVisible();
// Look for a Clear All button (this should fail in TDD RED)
const clearButton = window.getByTestId('clear-all-history-button');
await expect(clearButton).toBeVisible();
// Click it and confirm
await clearButton.click();
// Expect empty state to appear
await expect(window.getByTestId('empty-state-card')).toBeVisible();
});
});