import { describe, it, expect } from "vitest"; import { pickDefaultToSeed, preferSticky } from "./savedViews"; const v = (id: number) => ({ id, name: `v${id}` }); describe("preferSticky", () => { it("returns null when nothing matches", () => { expect(preferSticky([], 3)).toBeNull(); expect(preferSticky([], null)).toBeNull(); }); it("returns the only match regardless of stickyId", () => { expect(preferSticky([v(5)], null)?.id).toBe(5); expect(preferSticky([v(5)], 99)?.id).toBe(5); }); it("prefers the sticky view among several identical-filter matches", () => { // A (id 1) is earlier in the list, B (id 2) was explicitly applied (sticky). expect(preferSticky([v(1), v(2)], 2)?.id).toBe(2); }); it("without a sticky match, prefers the starred default over an earlier twin", () => { // The first-load seed applies the default's filters and leaves the name to this tie-break: an // earlier view with the same filters must not take the default's name. const d = (id: number, is_default = false) => ({ id, name: `v${id}`, is_default }); expect(preferSticky([d(1), d(2, true)], null)?.id).toBe(2); expect(preferSticky([d(1), d(2, true)], 99)?.id).toBe(2); expect(preferSticky([d(1), d(2, true)], 1)?.id).toBe(1); }); it("falls back to the first match when the sticky id isn't among the matches", () => { expect(preferSticky([v(1), v(2)], 99)?.id).toBe(1); expect(preferSticky([v(1), v(2)], null)?.id).toBe(1); }); }); describe("pickDefaultToSeed", () => { const dv = (id: number, is_default = false) => ({ id, name: `v${id}`, is_default }); it("returns the starred default when the module is a fresh start", () => { expect(pickDefaultToSeed([dv(1), dv(2, true)], true)?.id).toBe(2); }); it("returns null when the module already has stored filters / a URL override (canSeed=false)", () => { expect(pickDefaultToSeed([dv(1), dv(2, true)], false)).toBeNull(); }); it("returns null when there is no starred default, even on a fresh start", () => { expect(pickDefaultToSeed([dv(1), dv(2)], true)).toBeNull(); expect(pickDefaultToSeed([], true)).toBeNull(); }); it("picks the first default deterministically if several are somehow flagged", () => { expect(pickDefaultToSeed([dv(1, true), dv(2, true)], true)?.id).toBe(1); }); });