forked from yvv/decision
- Accueil : le titre, le leitmotiv en trois lignes (contexte et cadrage · processus et modalités · boîte à outils), puis directement le choix du groupe ; sans session, la connexion à sa place. /groupes redirige vers /, « Mes groupes » et le retour après connexion mènent à /. - Logo « Clé de voûte » du DA (signe en currentColor, clé en --cle, libre Literata italique, Decision romain), droit, dans le menu et la barre mobile ; Stamp retiré, le sceau 井 ne bouge pas. Favicon, icônes 16/32/48, apple-touch, 192/512, manifeste. - Quatre ambiances : pierre et calcaire (claires), nuit et ardoise (sombres), --cle par ambiance ; quatre pastilles à la place du soleil / lune ; première visite selon l'appareil (pierre / nuit). Calcaire et ardoise : textes, accent, mousse et avertissement à 4,5:1 au moins. - Page d'un groupe : les quatre piliers, puis « En cours ». - Menu : nombre de docs en cours à côté de « Docs de référence », surligné seulement dedans, seul Docs réagit au survol ; les trois autres éteints mais ouvrent leur page ; hors d'un groupe, le dernier groupe ouvert. - /g/[group]/docs « En cours » + « À venir » ; /mandats et /protocoles du groupe : « À venir » éteints ; /g/[group]/decisions : une ligne par doc, « N modules à voter », « dont N sans ton vote ». Anciennes adresses /decisions, /mandats, /protocoles : vers le groupe courant, sinon /. - e2e : C1, C2, C11, C12, M1 mis à jour ; C13–C17 pour L1–L6 ; CONTROLES.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 lines
1.2 KiB
TypeScript
22 lines
1.2 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', 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();
|
|
});
|