lofi-app/frontend/src/__tests__/audioStore.test.ts
2026-05-09 08:57:54 -05:00

76 lines
2.4 KiB
TypeScript

import { describe, expect, it, vi } from "vitest"
import { useAudioStore } from "../store/audioStore"
vi.mock("../services/api", () => ({
fetchChannels: vi.fn(),
fetchStream: vi.fn(),
}))
describe("audioStore", () => {
it("initializes with default state", () => {
const state = useAudioStore.getState()
expect(state.channels).toEqual([])
expect(state.currentChannel).toBeNull()
expect(state.streamUrl).toBeNull()
expect(state.isPlaying).toBe(false)
expect(state.volume).toBe(0.7)
expect(state.isLoading).toBe(false)
expect(state.error).toBeNull()
expect(state.favorites).toEqual([])
})
it("sets channels", () => {
useAudioStore.getState().setChannels([
{ id: "UC1", name: "Test", handle: "", description: "", isLive: true, videoId: "v1" },
])
expect(useAudioStore.getState().channels).toHaveLength(1)
})
it("sets current channel and clears stream URL", () => {
useAudioStore.getState().setStreamUrl("https://old.m3u8")
useAudioStore.getState().setCurrentChannel({
id: "UC1",
name: "Test",
handle: "",
description: "",
isLive: true,
videoId: "v1",
})
expect(useAudioStore.getState().currentChannel).not.toBeNull()
expect(useAudioStore.getState().streamUrl).toBeNull()
})
it("manages favorites", () => {
useAudioStore.getState().addFavorite("UC1")
expect(useAudioStore.getState().isFavorite("UC1")).toBe(true)
useAudioStore.getState().removeFavorite("UC1")
expect(useAudioStore.getState().isFavorite("UC1")).toBe(false)
})
it("does not duplicate favorites", () => {
useAudioStore.getState().addFavorite("UC1")
useAudioStore.getState().addFavorite("UC1")
expect(useAudioStore.getState().favorites.filter((f) => f === "UC1")).toHaveLength(1)
})
it("sets volume", () => {
useAudioStore.getState().setVolume(0.5)
expect(useAudioStore.getState().volume).toBe(0.5)
})
it("sets loading state", () => {
useAudioStore.getState().setLoading(true)
expect(useAudioStore.getState().isLoading).toBe(true)
useAudioStore.getState().setLoading(false)
expect(useAudioStore.getState().isLoading).toBe(false)
})
it("sets error", () => {
useAudioStore.getState().setError("Test error")
expect(useAudioStore.getState().error).toBe("Test error")
useAudioStore.getState().setError(null)
expect(useAudioStore.getState().error).toBeNull()
})
})