| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /* @vitest-environment node */
- import { describe, it, expect } from "vitest";
- import {
- readRouteBranchFromPathname,
- isSearchRoutePathname,
- replaceBranchInPathnameOrFallback,
- buildNextSearchQueryString,
- buildNextUrlForBranchSwitch,
- } from "./branchSwitch.js";
- describe("lib/frontend/quickNav/branchSwitch", () => {
- it("readRouteBranchFromPathname returns the first segment when valid", () => {
- expect(readRouteBranchFromPathname("/NL01")).toBe("NL01");
- expect(readRouteBranchFromPathname("/NL01/2025/12/31")).toBe("NL01");
- expect(readRouteBranchFromPathname("/search")).toBe(null);
- expect(readRouteBranchFromPathname("/nl01")).toBe(null);
- });
- it("isSearchRoutePathname detects /:branch/search", () => {
- expect(isSearchRoutePathname("/NL01/search")).toBe(true);
- expect(isSearchRoutePathname("/NL01/search/extra")).toBe(true);
- expect(isSearchRoutePathname("/NL01")).toBe(false);
- expect(isSearchRoutePathname("/search")).toBe(false);
- });
- it("replaceBranchInPathnameOrFallback replaces only the first segment", () => {
- expect(replaceBranchInPathnameOrFallback("/NL01/2025/12/31", "NL20")).toBe(
- "/NL20/2025/12/31"
- );
- // No valid branch -> fallback to branch root
- expect(replaceBranchInPathnameOrFallback("/search", "NL20")).toBe("/NL20");
- });
- it("buildNextSearchQueryString drops legacy SINGLE branch= and keeps other params", () => {
- const qs = buildNextSearchQueryString({
- currentSearch: "?q=x&branch=NL01&limit=200",
- currentRouteBranch: "NL01",
- nextBranch: "NL20",
- });
- expect(qs).toBe("?q=x&limit=200");
- });
- it("buildNextSearchQueryString keeps MULTI branches (sorted deterministically)", () => {
- const qs = buildNextSearchQueryString({
- currentSearch: "?q=x&scope=multi&branches=NL20,NL06",
- currentRouteBranch: "NL01",
- nextBranch: "NL02",
- });
- expect(qs).toBe("?q=x&scope=multi&branches=NL06%2CNL20");
- });
- it("buildNextUrlForBranchSwitch preserves deep path and normalizes Search URLs", () => {
- expect(
- buildNextUrlForBranchSwitch({
- pathname: "/NL01/2025/12/31",
- search: "",
- nextBranch: "NL20",
- })
- ).toBe("/NL20/2025/12/31");
- expect(
- buildNextUrlForBranchSwitch({
- pathname: "/NL01/search",
- search: "?q=x&branch=NL01&limit=200",
- nextBranch: "NL20",
- })
- ).toBe("/NL20/search?q=x&limit=200");
- });
- });
|