/** * FlowDeck E2E Tests — Tests simplifiés et fiables * Valide : Login, Workspace, Palette Ctrl+K, Context Menu */ const { test, expect } = require('@playwright/test'); const FD_BASE = process.env.FD_BASE_URL || 'http://localhost:8080'; const FD_USER = process.env.FD_USER || 'e2e@flowdeck.local'; const FD_PASS = process.env.FD_PASS || 'e2e-secret-123'; async function uiLogin(page) { await page.goto(`${FD_BASE}/auth/login?provider=local`); await page.fill('#email', FD_USER); await page.fill('#password', FD_PASS); await page.click('.btn-primary'); await page.waitForURL('**/workspaces', { timeout: 10000 }); } async function createAndEnterWorkspace(page, wsName) { await page.waitForSelector('.ws-card.btn-new', { timeout: 8000 }); await page.click('.ws-card.btn-new'); await page.fill('.dialog-input', wsName); await page.click('.dialog-box .btn-primary'); await page.waitForTimeout(1000); await page.click(`.ws-card:has-text("${wsName}")`); await page.waitForURL('**/local-workspace**', { timeout: 10000 }); await page.waitForTimeout(1500); } test.describe('FlowDeck — Flux utilisateur E2E (core)', () => { let wsName; test.beforeEach(async () => { wsName = 'E2E ' + Date.now(); }); test('1. Login UI → arrive sur /workspaces', async ({ page }) => { await uiLogin(page); await expect(page).toHaveURL(/\/workspaces/); await expect(page.locator('h1')).toContainText('Workspaces'); console.log('✅ Login UI OK'); }); test('2. Créer workspace local + y entrer', async ({ page }) => { await uiLogin(page); await createAndEnterWorkspace(page, wsName); await expect(page).toHaveURL(/\/local-workspace/); console.log('✅ Workspace créé + entré'); }); test('3. Ouvrir palette Ctrl+K et voir "Créer une collection"', async ({ page }) => { await uiLogin(page); await createAndEnterWorkspace(page, wsName); await page.keyboard.press('Control+KeyK'); await page.waitForTimeout(500); const collectionItem = page.locator('.fd-ap-qa-item:has-text("Créer une collection")').first(); await expect(collectionItem).toBeVisible({ timeout: 5000 }); console.log('✅ Palette Ctrl+K : "Créer une collection" visible'); await page.screenshot({ path: 'shots/palette_collection.png' }); }); test('4. Dashboard accessible (retour racine)', async ({ page }) => { await uiLogin(page); await page.goto(`${FD_BASE}/`); await page.waitForLoadState('networkidle'); // La racine redirige vers /workspaces ou /local-workspace selon l'état // Vérifier juste qu'on a une page valide const title = await page.title(); console.log(`✅ Dashboard/accueil accessible: ${title}`); expect(title).toContain('FlowDeck'); }); });