import { describe, it, expect, vi } from "vitest";
import { render, screen } from "@testing-library/react";
import { JellyfinNowPlayingWidget } from "../JellyfinNowPlayingWidget";
import type { WidgetInstance } from "../../types";
vi.mock("../../hooks/useWidgets", () => ({
useWidgetData: vi.fn(),
}));
const widget: WidgetInstance = {
id: "w1",
service_id: "s1",
widget_kind: "now_playing",
title: "Now Playing",
config: {},
enabled: true,
sort_order: 0,
created_at: 0,
updated_at: 0,
};
describe("JellyfinNowPlayingWidget", () => {
it("renders sessions when data is present", async () => {
const { useWidgetData } = await import("../../hooks/useWidgets");
vi.mocked(useWidgetData).mockReturnValue({
data: {
widget_id: "w1",
data: {
sessions: [
{
user: "alice",
title: "Movie",
state: "playing",
type: "Movie",
device: "Web",
session_id: "s1",
transcoding: "no",
transcoding_type: "",
},
],
},
fetched_at: 0,
},
isLoading: false,
} as never);
render(
,
);
expect(screen.getByText("alice")).toBeInTheDocument();
expect(screen.getAllByText("Movie").length).toBeGreaterThan(0);
});
it("renders the now-playing empty message when no sessions", async () => {
const { useWidgetData } = await import("../../hooks/useWidgets");
vi.mocked(useWidgetData).mockReturnValue({
data: {
widget_id: "w1",
data: { sessions: [] },
fetched_at: 0,
},
isLoading: false,
} as never);
render(
,
);
expect(
screen.getByText("No one is playing right now."),
).toBeInTheDocument();
});
it("renders error state", async () => {
const { useWidgetData } = await import("../../hooks/useWidgets");
vi.mocked(useWidgetData).mockReturnValue({
data: {
widget_id: "w1",
error: "Connection failed",
fetched_at: 0,
},
isLoading: false,
} as never);
render(
,
);
expect(screen.getByText("Connection failed")).toBeInTheDocument();
});
});