Files
openclaw/src/polls.test.ts
2026-02-18 23:27:50 +00:00

48 lines
1.3 KiB
TypeScript

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/);
});
});