Applique .gitattributes sur tous les fichiers existants. Élimine les différences fantômes entre WSL et Windows. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
107 lines
4.3 KiB
TypeScript
Executable File
107 lines
4.3 KiB
TypeScript
Executable File
/**
|
|
* 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();
|
|
});
|
|
});
|