import { describe, expect, it } from "vitest" ;
import { normalizePollDurationHours, normalizePollInput } from "./polls.js" ;
describe("polls" , () => {
it("normalizes question/options and validates maxSelections" , () => {
expect(
normalizePollInput({
question: " Lunch? " ,
options: [" Pizza " , " " , "Sushi" ],
maxSelections: 2 ,
}),
).toEqual({
question: "Lunch?" ,
options: ["Pizza" , "Sushi" ],
maxSelections: 2 ,
durationSeconds: undefined,
durationHours: undefined,
});
});
it("enforces max option count when configured" , () => {
expect(() =>
normalizePollInput({ question: "Q" , options: ["A" , "B" , "C" ] }, { maxOptions: 2 }),
).toThrow(/at most 2 /);
});
it.each([
{ durationHours: undefined, expected: 24 },
{ durationHours: 999 , expected: 48 },
{ durationHours: 1 , expected: 1 },
])("clamps poll duration for $durationHours hours" , ({ durationHours, expected }) => {
expect(normalizePollDurationHours(durationHours, { defaultHours: 24 , maxHours: 48 })).toBe(
expected,
);
});
it("rejects both durationSeconds and durationHours" , () => {
expect(() =>
normalizePollInput({
question: "Q" ,
options: ["A" , "B" ],
durationSeconds: 60 ,
durationHours: 1 ,
}),
).toThrow(/mutually exclusive/);
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-04)
¤
*© Formatika GbR, Deutschland