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+.
This commit is contained in:
1 parent
11e8b06bf8
commit
82e8448f26
25 files changed
+1400
-304
No files matched your search
@@ -0,0 +1,80 @@
|
||||
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]);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user