// @vitest-environment jsdom // // readSelectedId: the Playlists selected-id seed. Backfills the E4 deep-review's deferred ?pl guard // coverage — a ?pl bookmark wins over the stored selection but only when it's a positive integer; // anything else (empty / zero / negative / fractional / non-numeric) falls back to the stored id. import { describe, it, expect, beforeEach, vi } from "vitest"; const { stored } = vi.hoisted(() => ({ stored: { v: null as string | null } })); vi.mock("../lib/storage", async (importOriginal) => { const actual = await importOriginal(); return { ...actual, getAccountRaw: () => stored.v }; }); import { readSelectedId } from "./playlistsInit"; const setUrl = (search: string) => window.history.replaceState(null, "", search || "/"); beforeEach(() => { setUrl("/"); stored.v = null; }); describe("readSelectedId ?pl guard", () => { it("accepts a positive-integer ?pl", () => { setUrl("?pl=5"); expect(readSelectedId()).toBe(5); }); it("a ?pl bookmark wins over the stored selection", () => { setUrl("?pl=5"); stored.v = "7"; expect(readSelectedId()).toBe(5); }); it.each(["", "0", "-2", "1.5", "abc"])("rejects ?pl=%s and falls back to stored", (raw) => { setUrl(`?pl=${raw}`); stored.v = "7"; expect(readSelectedId()).toBe(7); }); it("rejects a bad ?pl and returns null when there is no stored selection", () => { setUrl("?pl=0"); expect(readSelectedId()).toBeNull(); }); it("uses the stored selection when there is no ?pl", () => { stored.v = "9"; expect(readSelectedId()).toBe(9); }); it.each(["", "0", "-2", "1.5", "abc"])( "rejects a non-positive-integer STORED value %s (guarded like the URL)", (raw) => { stored.v = raw; expect(readSelectedId()).toBeNull(); }, ); it("returns null when neither ?pl nor a stored selection is present", () => { expect(readSelectedId()).toBeNull(); }); });