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+.
81 lines
2.0 KiB
TypeScript
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]);
|
|
});
|
|
});
|