forked from yvv/decision
- types.ts : evaluation.quorum / yesNeeded / noNeeded, levels[].quorum, l'unité quorum / quorumDefault / canSetQuorum, doc.quorums (optionnels) ; publication « suspended » (ADR 0011) ; - Réglages de la formule : la colonne « Quorum » des cinq crans et sa note, la participation de référence « deux fois 50, le quorum de référence » ; plus de ligne C ; sur téléphone, les six colonnes tiennent dans la feuille ; - La formule du seuil : T' = max(T, Q), R = B^W + ratio(T')·T', la ligne Q (le quorum de la version) au lieu de C ; - textes : deep.note, formula.reading, settings.* parlent du quorum, plus de C (test vu rouge puis vert, tests/unit/inertia.test.ts) ; - e2e : Seuil 9 (cran 2) et 39 (cran 3) dans Monnaie libre, les quorums 12 · 12 · 50 · 50 · 50, voix pour à 100 votants 60 · 67 · 75 · 83 · 90, à 0 votant 8 · 9 · 39 · 43 · 46. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
37 lines
2.0 KiB
TypeScript
37 lines
2.0 KiB
TypeScript
// The five levels of inertia, as the screen names them (ADR 0007).
|
|
import { describe, expect, it } from 'vitest';
|
|
import { en } from '../../src/lib/i18n/en';
|
|
import { es } from '../../src/lib/i18n/es';
|
|
import { fr } from '../../src/lib/i18n/fr';
|
|
import { INERTIA_LEVELS } from '../../src/lib/types';
|
|
|
|
describe('five levels of inertia', () => {
|
|
it('go from 1 to 5, 3 in the middle', () => {
|
|
expect(INERTIA_LEVELS).toEqual([1, 2, 3, 4, 5]);
|
|
});
|
|
it('each level has its own short name, in the three languages', () => {
|
|
expect(INERTIA_LEVELS.map((k) => fr[`inertia.name.${k}`])).toEqual(['très basse', 'basse', 'moyenne', 'haute', 'très haute']);
|
|
expect(INERTIA_LEVELS.map((k) => en[`inertia.name.${k}`])).toEqual(['very low', 'low', 'medium', 'high', 'very high']);
|
|
expect(INERTIA_LEVELS.map((k) => es[`inertia.name.${k}`])).toEqual(['muy baja', 'baja', 'media', 'alta', 'muy alta']);
|
|
});
|
|
it('the threshold is told with the quorum, no longer with C (ADR 0013)', () => {
|
|
const told = [
|
|
'deep.note', 'formula.reading', 'settings.reading', 'settings.share.note.one', 'settings.share.note.other',
|
|
'settings.usual.reference.one', 'settings.usual.reference.other',
|
|
] as const;
|
|
for (const cat of [fr, en, es]) {
|
|
for (const k of told) expect(cat[k], k).not.toMatch(/\bC\b/);
|
|
expect(cat['deep.note']).not.toContain('{floor}');
|
|
expect(cat['formula.Q']).toContain('{n}');
|
|
expect(cat['settings.usual.reference.other']).toContain('{q}');
|
|
}
|
|
expect(fr['formula.reading']).toContain('les votants qui manquent comptent comme « non »');
|
|
expect(fr['settings.quorum.note']).toContain('avant le premier vote');
|
|
});
|
|
it('a change of inertia is said to be voted at the level of the article, no longer one above', () => {
|
|
for (const cat of [fr, en, es]) expect(cat['inertia.change.note']).toContain('{level}');
|
|
expect(fr['inertia.change.note']).toContain("à l'inertie de l'article");
|
|
expect(fr['inertia.change.note']).not.toContain('au-dessus');
|
|
});
|
|
});
|