mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
48 lines
1.3 KiB
TypeScript
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/);
|
|
});
|
|
});
|