/** * Tests E2E — Workflow d'accouplement * * Navigue vers la vue Accouplement, selectionne deux parents, * verifie la deduction du bebe, et enregistre l'accouplement. */ import { test, expect } from './electron-app'; test.describe('Workflow d\'accouplement', () => { test.beforeEach(async ({ page }) => { // Naviguer vers Accouplement via la sidebar await page.click('.sb-item[data-view="accouplement"]'); await expect(page.locator('.accoup-view')).toBeVisible({ timeout: 5000 }); }); test('Selectionner Parent 1 en cliquant sur une race', async ({ page }) => { // Cliquer sur la premiere race disponible dans la grille const firstRaceCard = page.locator('.accoup-race-card').first(); const raceName = await firstRaceCard.locator('.accoup-race-card-name').textContent(); await firstRaceCard.click(); // Verifier que Parent 1 affiche la race selectionnee const selectedParent = page.locator('.accoup-selected-parent-name').first(); await expect(selectedParent).toHaveText(raceName!.trim(), { timeout: 3000 }); }); test('Selectionner les deux parents et voir le resultat', async ({ page }) => { // Selectionner "Rousse" comme Parent 1 const rousseCard = page.locator('.accoup-race-card[data-race="Rousse"]'); await rousseCard.click(); await expect(page.locator('.accoup-selected-parent-name').first()).toHaveText('Rousse', { timeout: 3000 }); // Apres P1 selectionne, la grille filtre les partenaires compatibles // Selectionner le premier partenaire disponible comme Parent 2 const partnerCard = page.locator('.accoup-race-card').first(); await partnerCard.click(); // Verifier qu'un resultat (bebe) est affiche // Le resultat apparait dans la zone centrale avec le texte "Resultat" await page.waitForTimeout(500); const parentNames = page.locator('.accoup-selected-parent-name'); await expect(parentNames).toHaveCount(2, { timeout: 3000 }); }); test('Definir nombre de couples et bebes puis enregistrer', async ({ page }) => { // Selectionner P1 : Rousse await page.click('.accoup-race-card[data-race="Rousse"]'); await expect(page.locator('.accoup-selected-parent-name').first()).toHaveText('Rousse', { timeout: 3000 }); // Selectionner P2 : premier partenaire compatible const partnerCard = page.locator('.accoup-race-card').first(); await partnerCard.click(); await page.waitForTimeout(500); // Remplir le nombre de couples const couplesInput = page.locator('#accoup-couples'); await couplesInput.click(); await couplesInput.fill('3'); // Remplir les bebes obtenus const babiesInput = page.locator('#accoup-babies'); await babiesInput.click(); await babiesInput.fill('2'); // Le bouton Enregistrer devrait etre actif const registerBtn = page.locator('#accoup-register'); await expect(registerBtn).toBeEnabled({ timeout: 3000 }); // Cliquer sur Enregistrer await registerBtn.click(); // Verifier que le toast success apparait await expect(page.locator('.toast-success')).toBeVisible({ timeout: 3000 }); await expect(page.locator('.toast-msg')).toContainText('Accouplement enregistré'); // Apres l'enregistrement, les parents sont reinitialises // On devrait voir les placeholders "Cliquer ou glisser" a nouveau await expect(page.locator('.accoup-placeholder')).toHaveCount(2, { timeout: 3000 }); }); test('Filtrer les races par generation', async ({ page }) => { // Cliquer sur le chip "Gen 1" await page.click('.accoup-gen-chip[data-gen="1"]'); await page.waitForTimeout(300); // Verifier que le chip est actif await expect(page.locator('.accoup-gen-chip[data-gen="1"].active')).toBeVisible(); // Toutes les races affichees devraient etre de Gen 1 const genBadges = page.locator('.accoup-race-card-gen'); const count = await genBadges.count(); for (let i = 0; i < count; i++) { await expect(genBadges.nth(i)).toContainText('GEN 1'); } }); test('Rechercher une race par nom', async ({ page }) => { const searchInput = page.locator('#accoup-search-input'); await searchInput.fill('Rousse'); await page.waitForTimeout(300); // La grille devrait contenir "Rousse" await expect(page.locator('.accoup-race-card[data-race="Rousse"]')).toBeVisible(); }); });