| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /* @vitest-environment node */
- import { describe, it, expect } from "vitest";
- import { SEARCH_SCOPE } from "@/lib/frontend/search/urlState";
- import {
- buildSearchHref,
- buildSearchKey,
- getScopeLabel,
- needsMultiBranchSelectionHint,
- buildNextStateForScopeChange,
- buildNextStateForToggleBranch,
- buildNextStateForClearAllBranches,
- buildHrefForSingleBranchSwitch,
- } from "./pageHelpers.js";
- describe("lib/frontend/search/pageHelpers", () => {
- it("buildSearchHref builds /:branch/search with query string", () => {
- const href = buildSearchHref({
- routeBranch: "NL01",
- state: { q: "x", scope: SEARCH_SCOPE.SINGLE, limit: 200 },
- });
- expect(href).toBe("/NL01/search?q=x&limit=200");
- });
- it("buildSearchKey includes routeBranch", () => {
- const key = buildSearchKey({
- routeBranch: "NL01",
- urlState: { q: "x", scope: SEARCH_SCOPE.SINGLE, limit: 200 },
- });
- expect(key).toBe("NL01|q=x&limit=200");
- });
- it("getScopeLabel returns correct labels", () => {
- expect(
- getScopeLabel({
- routeBranch: "NL01",
- urlState: { scope: SEARCH_SCOPE.SINGLE },
- })
- ).toBe("Niederlassung NL01");
- expect(
- getScopeLabel({
- routeBranch: "NL01",
- urlState: { scope: SEARCH_SCOPE.ALL },
- })
- ).toBe("Alle Niederlassungen");
- expect(
- getScopeLabel({
- routeBranch: "NL01",
- urlState: { scope: SEARCH_SCOPE.MULTI, branches: ["NL01", "NL02"] },
- })
- ).toBe("2 Niederlassungen");
- });
- it("needsMultiBranchSelectionHint only when q exists and branches empty", () => {
- expect(
- needsMultiBranchSelectionHint({
- isAdminDev: true,
- urlState: { scope: SEARCH_SCOPE.MULTI, q: "x", branches: [] },
- })
- ).toBe(true);
- expect(
- needsMultiBranchSelectionHint({
- isAdminDev: true,
- urlState: { scope: SEARCH_SCOPE.MULTI, q: null, branches: [] },
- })
- ).toBe(false);
- });
- it("buildNextStateForScopeChange keeps branches only for MULTI", () => {
- const base = { q: "x", branches: ["NL01"] };
- expect(
- buildNextStateForScopeChange({
- urlState: base,
- nextScope: SEARCH_SCOPE.ALL,
- })
- ).toMatchObject({ scope: SEARCH_SCOPE.ALL, branches: [] });
- expect(
- buildNextStateForScopeChange({
- urlState: base,
- nextScope: SEARCH_SCOPE.MULTI,
- })
- ).toMatchObject({ scope: SEARCH_SCOPE.MULTI, branches: ["NL01"] });
- });
- it("buildNextStateForToggleBranch toggles membership", () => {
- const s1 = buildNextStateForToggleBranch({
- urlState: { scope: SEARCH_SCOPE.MULTI, branches: ["NL01"] },
- branchId: "NL02",
- });
- expect(s1.branches.sort()).toEqual(["NL01", "NL02"]);
- const s2 = buildNextStateForToggleBranch({
- urlState: { scope: SEARCH_SCOPE.MULTI, branches: ["NL01", "NL02"] },
- branchId: "NL02",
- });
- expect(s2.branches).toEqual(["NL01"]);
- });
- it("buildNextStateForClearAllBranches clears branches", () => {
- const s = buildNextStateForClearAllBranches({
- urlState: { scope: SEARCH_SCOPE.MULTI, branches: ["NL01"] },
- });
- expect(s.branches).toEqual([]);
- expect(s.scope).toBe(SEARCH_SCOPE.MULTI);
- });
- it("buildHrefForSingleBranchSwitch returns null for invalid branch", () => {
- expect(
- buildHrefForSingleBranchSwitch({
- nextBranch: "bad",
- urlState: { q: "x", scope: SEARCH_SCOPE.SINGLE, limit: 100 },
- })
- ).toBe(null);
- });
- });
|