Files
jellytau/src/lib/services/playerEvents.test.ts
T

109 lines
2.8 KiB
TypeScript

/**
* Player Events Service tests
*
* TRACES: UR-005, UR-019, UR-023, UR-026 | DR-001, DR-028, DR-047
*/
import { describe, it, expect, vi, beforeEach } from "vitest";
import { isPlayerEventsInitialized, cleanupPlayerEvents } from "./playerEvents";
// Mock Tauri
vi.mock("@tauri-apps/api/event", () => ({
listen: vi.fn(async (event, handler) => {
return () => {}; // Return unlisten function
}),
}));
vi.mock("@tauri-apps/api/core", () => ({
invoke: vi.fn(),
}));
// Mock stores
vi.mock("$lib/stores/player", () => ({
player: {
updatePosition: vi.fn(),
setPlaying: vi.fn(),
setPaused: vi.fn(),
setLoading: vi.fn(),
setIdle: vi.fn(),
setError: vi.fn(),
setVolume: vi.fn(),
setMuted: vi.fn(),
},
playbackPosition: { subscribe: vi.fn() },
}));
vi.mock("$lib/stores/queue", () => ({
queue: { subscribe: vi.fn() },
currentQueueItem: { subscribe: vi.fn() },
}));
vi.mock("$lib/stores/playbackMode", () => ({
playbackMode: { setMode: vi.fn(), initializeSessionMonitoring: vi.fn() },
}));
vi.mock("$lib/stores/sleepTimer", () => ({
sleepTimer: { set: vi.fn() },
}));
vi.mock("$lib/stores/nextEpisode", () => ({
nextEpisode: {
showPopup: vi.fn(),
updateCountdown: vi.fn(),
},
}));
vi.mock("$lib/services/preload", () => ({
preloadUpcomingTracks: vi.fn(),
}));
describe("Player Events Service", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("should initialize player event listener", async () => {
const { initPlayerEvents } = await import("./playerEvents");
await initPlayerEvents();
expect(isPlayerEventsInitialized()).toBe(true);
});
it("should prevent duplicate initialization", async () => {
const { initPlayerEvents } = await import("./playerEvents");
await initPlayerEvents();
const consoleSpy = vi.spyOn(console, "warn");
await initPlayerEvents();
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("already initialized"));
});
it("should cleanup event listeners", async () => {
const { initPlayerEvents } = await import("./playerEvents");
await initPlayerEvents();
expect(isPlayerEventsInitialized()).toBe(true);
cleanupPlayerEvents();
expect(isPlayerEventsInitialized()).toBe(false);
});
it("should handle player event initialization errors", async () => {
const { listen } = await import("@tauri-apps/api/event");
(listen as any).mockRejectedValueOnce(new Error("Event setup failed"));
const { initPlayerEvents } = await import("./playerEvents");
const consoleSpy = vi.spyOn(console, "error");
await initPlayerEvents();
// console.error is called with: ("Failed to initialize player events:", Error)
expect(consoleSpy).toHaveBeenCalledWith(
expect.stringContaining("Failed to initialize player events"),
expect.any(Error)
);
});
});