46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import {
|
|
parseOptionalInt,
|
|
parsePositiveInt,
|
|
parseTimestampRange,
|
|
} from "./api-params";
|
|
|
|
describe("API parameter parsing", () => {
|
|
test("uses defaults and clamps positive integer ranges", () => {
|
|
expect(parsePositiveInt(null, { field: "limit", defaultValue: 50, min: 1, max: 100 })).toEqual({
|
|
ok: true,
|
|
value: 50,
|
|
});
|
|
expect(parsePositiveInt("500", { field: "limit", defaultValue: 50, min: 1, max: 100 })).toEqual({
|
|
ok: true,
|
|
value: 100,
|
|
});
|
|
expect(parsePositiveInt("0", { field: "page", defaultValue: 1, min: 1 })).toEqual({
|
|
ok: true,
|
|
value: 1,
|
|
});
|
|
});
|
|
|
|
test("rejects NaN, decimals, and negative values", () => {
|
|
expect(parseOptionalInt("abc", "start")).toEqual({
|
|
ok: false,
|
|
field: "start",
|
|
});
|
|
expect(parsePositiveInt("1.5", { field: "page", defaultValue: 1, min: 1 })).toEqual({
|
|
ok: false,
|
|
field: "page",
|
|
});
|
|
expect(parsePositiveInt("-2", { field: "page", defaultValue: 1, min: 1 })).toEqual({
|
|
ok: false,
|
|
field: "page",
|
|
});
|
|
});
|
|
|
|
test("rejects reversed timestamp ranges", () => {
|
|
expect(parseTimestampRange(new URLSearchParams("start=200&end=100"))).toEqual({
|
|
ok: false,
|
|
field: "range",
|
|
});
|
|
});
|
|
});
|