/** * E2E test: Sources CRUD. * * Validates: * 1. Adding a single source * 2. Bulk-importing a source via textarea * 3. Deleting a source (two-click confirm) */ import { test, expect } from '@playwright/test'; import { loginAsUser } from '../helpers/auth'; test.describe('Sources management', () => { test('should add, bulk-import, and delete sources', async ({ page }) => { // Step 1: Login as regular user via cookie injection await loginAsUser(page); // Step 2: Navigate to sources await page.goto('/sources'); // Wait for the sources page to load await expect( page.locator('h1', { hasText: 'Sources Personnalisees' }), ).toBeVisible({ timeout: 10_000 }); // Step 3: Add a single source await page.locator('#source-title').fill('Test Blog'); await page.locator('#source-url').fill('https://test.example.com/blog'); // Click the "Ajouter" submit button await page.locator('button[type="submit"]', { hasText: 'Ajouter' }).click(); // Wait for the source to appear in the list await expect(page.getByText('Test Blog')).toBeVisible({ timeout: 5_000 }); await expect( page.getByText('https://test.example.com/blog'), ).toBeVisible(); // Step 4: Bulk import another source via textarea const bulkTextarea = page.locator('#bulk-import'); await bulkTextarea.fill('News Site;https://news.example.com'); // Click the bulk import button await page .locator('button[type="submit"]', { hasText: 'Importer les sources' }) .click(); // Wait for the second source to appear await expect(page.getByText('News Site')).toBeVisible({ timeout: 5_000 }); // Verify we have 2 sources in the list // Each source is an