forked from yvv/decision
L'inertie se lit en crans, « 3 / 5 · moyenne » (très basse, basse, moyenne, haute, très haute ; fr, en, es). Le sélecteur offre les cinq crans, l'actuel marqué ; le changement se vote au cran de l'article. L'article dit le passé de son inertie (vote ou réglage de départ). « Réglages de la formule », en lecture seule, depuis l'en-tête du doc et depuis le vote d'un article (onglet « Réglages » du panneau, dans l'URL) : W et sa source, C, B, la participation habituelle (médiane ou référence, sur combien de propositions, quand), et les cinq crans : M, G, part exigée, voix pour exigées à la participation de la version regardée (ou habituelle depuis l'en-tête). Composants à part (InertiaPicker, FormulaSettings), branchés par quelques lignes dans VoteView. La formule dépliée ne fait plus déborder le panneau. e2e : C4 (cran de l'article dans la formule), C20 (réglages et cinq crans), M1 (réglages lisibles sur mobile). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 lines
1.8 KiB
TypeScript
28 lines
1.8 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
|
import { DOC, signIn } from './helpers';
|
|
|
|
test('M1 — mobile : logo dans la barre, menu en tiroir, actions visibles, panneau en feuille, réglages lisibles', async ({ page }) => {
|
|
await signIn(page, 'Chiara');
|
|
await page.goto('/');
|
|
const brand = page.locator('header.topbar a.brand');
|
|
await expect(brand).toHaveAccessibleName('libreDecision');
|
|
await expect(brand.locator('svg')).toBeVisible();
|
|
await expect(page.locator('a.root')).toContainText('Monnaie libre');
|
|
await page.goto(DOC);
|
|
await page.getByRole('button', { name: 'Menu' }).click();
|
|
const drawer = page.getByRole('dialog', { name: 'Boîte à outils' });
|
|
await expect(drawer.locator('.tool', { hasText: 'Protocoles' })).toBeVisible();
|
|
await expect(drawer.locator('.tool', { hasText: 'Docs de référence' }).locator('.count')).toHaveText('1');
|
|
await expect(drawer.getByRole('radiogroup', { name: 'Ambiance' }).getByRole('radio')).toHaveCount(4);
|
|
await drawer.getByRole('button', { name: 'Fermer' }).first().click();
|
|
const first = page.locator('section.text article.unit').first();
|
|
await first.getByRole('button', { name: 'Le vote' }).click();
|
|
await expect(page.locator('aside.panel').getByText('Seuil : 50 voix pour')).toBeVisible();
|
|
// The settings of the formula read on a phone: the table of the five levels holds in the sheet.
|
|
await page.locator('aside.panel').getByRole('button', { name: 'Réglages de la formule' }).click();
|
|
await expect(page.locator('aside.panel').getByRole('tab', { name: 'Réglages' })).toBeInViewport();
|
|
await expect(page.locator('aside.panel table tbody tr')).toHaveCount(5);
|
|
const fits = await page.locator('aside.panel .scroll').evaluate((el) => el.scrollWidth <= el.clientWidth + 1);
|
|
expect(fits).toBe(true);
|
|
});
|