| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /* @vitest-environment node */
- import { describe, it, expect } from "vitest";
- import {
- SEARCH_RESULTS_SORT,
- toSearchItemIsoDateKey,
- formatSearchItemDateDe,
- sortSearchItems,
- } from "./resultsSorting.js";
- describe("lib/frontend/search/resultsSorting", () => {
- it("builds ISO date keys (YYYY-MM-DD) with zero padding", () => {
- expect(toSearchItemIsoDateKey({ year: "2025", month: "1", day: "2" })).toBe(
- "2025-01-02"
- );
- });
- it("formats German date strings (DD.MM.YYYY) with zero padding", () => {
- expect(formatSearchItemDateDe({ year: "2025", month: "1", day: "2" })).toBe(
- "02.01.2025"
- );
- });
- it("RELEVANCE keeps backend order (shallow copy)", () => {
- const items = [{ filename: "b.pdf" }, { filename: "a.pdf" }];
- const out = sortSearchItems(items, SEARCH_RESULTS_SORT.RELEVANCE);
- expect(out.map((x) => x.filename)).toEqual(["b.pdf", "a.pdf"]);
- // Ensure we did not return the same array instance (mutation safety).
- expect(out).not.toBe(items);
- });
- it("DATE_DESC sorts newest date first, then branch asc, then filename asc", () => {
- const items = [
- // Same date, different branches
- {
- branch: "NL10",
- year: "2025",
- month: "12",
- day: "18",
- filename: "b.pdf",
- },
- {
- branch: "NL2",
- year: "2025",
- month: "12",
- day: "18",
- filename: "a.pdf",
- },
- // Older date
- {
- branch: "NL01",
- year: "2025",
- month: "01",
- day: "02",
- filename: "z.pdf",
- },
- ];
- const out = sortSearchItems(items, SEARCH_RESULTS_SORT.DATE_DESC);
- expect(
- out.map((x) => `${toSearchItemIsoDateKey(x)}|${x.branch}|${x.filename}`)
- ).toEqual([
- "2025-12-18|NL2|a.pdf", // NL2 before NL10 (numeric)
- "2025-12-18|NL10|b.pdf",
- "2025-01-02|NL01|z.pdf",
- ]);
- });
- it("BRANCH_ASC sorts branch asc (numeric), then newest date first, then filename asc", () => {
- const items = [
- // NL10 should come after NL2
- {
- branch: "NL10",
- year: "2025",
- month: "12",
- day: "18",
- filename: "b.pdf",
- },
- {
- branch: "NL2",
- year: "2025",
- month: "12",
- day: "18",
- filename: "a.pdf",
- },
- // Same branch (NL2), older date + different filename
- {
- branch: "NL2",
- year: "2025",
- month: "01",
- day: "02",
- filename: "z.pdf",
- },
- {
- branch: "NL2",
- year: "2025",
- month: "12",
- day: "18",
- filename: "c.pdf",
- },
- ];
- const out = sortSearchItems(items, SEARCH_RESULTS_SORT.BRANCH_ASC);
- expect(
- out.map((x) => `${x.branch}|${toSearchItemIsoDateKey(x)}|${x.filename}`)
- ).toEqual([
- // NL2 group first
- "NL2|2025-12-18|a.pdf",
- "NL2|2025-12-18|c.pdf", // same date -> filename tie-breaker
- "NL2|2025-01-02|z.pdf",
- // then NL10
- "NL10|2025-12-18|b.pdf",
- ]);
- });
- it("unknown sort mode fails safe to backend order", () => {
- const items = [{ filename: "b.pdf" }, { filename: "a.pdf" }];
- const out = sortSearchItems(items, "unknown");
- expect(out.map((x) => x.filename)).toEqual(["b.pdf", "a.pdf"]);
- });
- });
|