dd-timer/tests/e2e/breeding.spec.ts
POL Mickaël 203c423f19 test: 302 tests unitaires + 20 E2E Playwright (couverture 94%)
- Unit : domain (GaugeCalculator, Enclos, Dragodinde, XpTable, Race, Tier...)
- Unit : application (commands, queries, CommandBus)
- Fonctionnel : breeding-workflow, enclos-management, timer-workflow
- Régression : gauge-tier, gauge-recharge, xp-timer, level-target, breeding
- E2E Playwright + Electron : navigation, timer, recharge jauge,
  accouplement, persistance des données

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 05:43:29 +02:00

107 lines
4.3 KiB
TypeScript

/**
* 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();
});
});