Files
EpicNext-Cms/src/lib/admin-helpers.test.ts
T
openhands 82e8448f26 test: add unit tests for pure logic modules
Add 22 test files covering imager, soundtracks, browser-headers, source-keys (figure/pet/effect), effect-source, plus catalog-translations, catalog-layouts, client-translation-files, translations-utils, and various admin/services/helpers modules. Total test count increases by 120+.
2026-08-07 18:53:59 +02:00

81 lines
2.0 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
calcPagination,
PER_PAGE_OPTIONS,
parseListParams,
} from "./admin-helpers";
describe("parseListParams", () => {
it("parses defaults", () => {
const p = parseListParams(new URLSearchParams());
expect(p).toEqual({
search: "",
perPage: 20,
page: 1,
sort: undefined,
order: "desc",
});
});
it("parses explicit values", () => {
const p = parseListParams(
new URLSearchParams("search=sofa&perPage=50&page=3&sort=name&order=asc"),
);
expect(p.search).toBe("sofa");
expect(p.perPage).toBe(50);
expect(p.page).toBe(3);
expect(p.sort).toBe("name");
expect(p.order).toBe("asc");
});
it("clamps perPage to [1, 100]", () => {
expect(parseListParams(new URLSearchParams("perPage=0")).perPage).toBe(1);
expect(parseListParams(new URLSearchParams("perPage=1000")).perPage).toBe(
100,
);
});
it("clamps page to >= 1", () => {
expect(parseListParams(new URLSearchParams("page=0")).page).toBe(1);
expect(parseListParams(new URLSearchParams("page=-5")).page).toBe(1);
});
it("defaults order to desc when not asc", () => {
expect(parseListParams(new URLSearchParams("order=asc")).order).toBe("asc");
expect(parseListParams(new URLSearchParams("order=desc")).order).toBe(
"desc",
);
expect(parseListParams(new URLSearchParams("order=bogus")).order).toBe(
"desc",
);
});
});
describe("calcPagination", () => {
it("computes last page, offset and clamps the page", () => {
const p = calcPagination(50, 3, 20);
expect(p.lastPage).toBe(3);
expect(p.page).toBe(3);
expect(p.offset).toBe(40);
});
it("clamps page beyond last page", () => {
const p = calcPagination(10, 99, 20);
expect(p.lastPage).toBe(1);
expect(p.page).toBe(1);
expect(p.offset).toBe(0);
});
it("handles zero total with lastPage 1", () => {
const p = calcPagination(0, 1, 20);
expect(p.lastPage).toBe(1);
expect(p.offset).toBe(0);
});
});
describe("PER_PAGE_OPTIONS", () => {
it("exposes the selectable page sizes", () => {
expect(PER_PAGE_OPTIONS).toEqual([10, 20, 50]);
});
});