- music landing: diverse per-genre album sliders (online counts / offline wide-probe fallback) and home-screen library shortcuts - add ArtistLinks component and shared navigation/genreDiversity utils - player/playback-mode refinements across Rust and frontend
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
import { render, screen, fireEvent } from "@testing-library/svelte";
|
|
import ArtistLinks from "./ArtistLinks.svelte";
|
|
|
|
const goto = vi.fn();
|
|
vi.mock("$app/navigation", () => ({
|
|
goto: (...args: unknown[]) => goto(...args),
|
|
}));
|
|
|
|
describe("ArtistLinks", () => {
|
|
beforeEach(() => goto.mockClear());
|
|
|
|
it("renders a clickable link per artist that navigates to its detail page", async () => {
|
|
render(ArtistLinks, {
|
|
artistItems: [
|
|
{ id: "a1", name: "Radiohead" },
|
|
{ id: "a2", name: "Thom Yorke" },
|
|
],
|
|
});
|
|
|
|
const link = screen.getByRole("button", { name: "Radiohead" });
|
|
await fireEvent.click(link);
|
|
|
|
expect(goto).toHaveBeenCalledWith("/library/a1");
|
|
expect(screen.getByRole("button", { name: "Thom Yorke" })).toBeTruthy();
|
|
});
|
|
|
|
it("falls back to plain text when only names (no ids) are available", () => {
|
|
render(ArtistLinks, { artists: ["Unknown Artist"] });
|
|
|
|
expect(screen.queryByRole("button")).toBeNull();
|
|
expect(screen.getByText("Unknown Artist")).toBeTruthy();
|
|
});
|
|
|
|
it("ignores artistItems with blank ids and uses the names fallback", () => {
|
|
render(ArtistLinks, {
|
|
artistItems: [{ id: " ", name: "No Id Artist" }],
|
|
artists: ["No Id Artist"],
|
|
});
|
|
|
|
expect(screen.queryByRole("button")).toBeNull();
|
|
expect(screen.getByText("No Id Artist")).toBeTruthy();
|
|
});
|
|
|
|
it("calls onNavigate before navigating (e.g. to close a player)", async () => {
|
|
const onNavigate = vi.fn();
|
|
render(ArtistLinks, {
|
|
artistItems: [{ id: "a1", name: "Radiohead" }],
|
|
onNavigate,
|
|
});
|
|
|
|
await fireEvent.click(screen.getByRole("button", { name: "Radiohead" }));
|
|
|
|
expect(onNavigate).toHaveBeenCalledOnce();
|
|
expect(goto).toHaveBeenCalledWith("/library/a1");
|
|
});
|
|
});
|