fix(home): shelf honours the Plex gate; hero unpins its origin; palette asks for a surprise
- A13: with Plex off, the Home shelf and the hero's comfort tier go YouTube-only like the rails beside them (owner's call: hide the tiles). The pins are kept; GET /pins still lists them. - Reorder deals the listed pins into the slots they already hold, so a partial list (hidden Plex pins, a stale tab) no longer puts two pins on one position; repeats are ignored. - A21: a comfort hero carries `pinned_from`, the shelf entry it was resolved from; its menu acts on that pin, so a pinned show's next episode offers "Unpin" instead of creating a second pin. - B12: the palette's "Meglepetés" asks for the surprise tier (the next press leading with it); the rotation carries on from there. - B13: the surprise token names the history entry it was requested for (minted by setPage's new `then`, after the push) and is dropped on any other entry, so a navigation that never mounted Home cannot replay it later.
This commit is contained in:
@@ -156,6 +156,23 @@ describe("NavigationProvider · never under an open overlay", () => {
|
||||
expect(window.history.state).toMatchObject({ sfPage: "plex" });
|
||||
});
|
||||
|
||||
// `then` belongs to the NEW entry (the palette's "Meglepetés" token names it — lib/homeIntent), so
|
||||
// over an open player it must wait for the push, and with nothing to push it still runs.
|
||||
it("runs setPage's `then` after the push, on the entry the push made", async () => {
|
||||
const { result } = render();
|
||||
await openOverlay();
|
||||
const seen: unknown[] = [];
|
||||
expect(result.current.page).not.toBe("plex");
|
||||
act(() => result.current.setPage("plex", () => seen.push(window.history.state?.sfPage)));
|
||||
expect(seen).toEqual([]);
|
||||
await settle();
|
||||
await settle();
|
||||
expect(seen).toEqual(["plex"]);
|
||||
|
||||
act(() => result.current.setPage("plex", () => seen.push("again")));
|
||||
expect(seen).toEqual(["plex", "again"]);
|
||||
});
|
||||
|
||||
// Shift+W on Home with the player open (owner decision 2026-09-09): nothing to push, but the player
|
||||
// closes, and its entry is reclaimed rather than orphaned under a push that never happened.
|
||||
it("setPage to the current page closes the overlay and pushes nothing", async () => {
|
||||
|
||||
Reference in New Issue
Block a user