diff --git a/web/src/lib/components/TrackMenu.test.ts b/web/src/lib/components/TrackMenu.test.ts index 6e359649..79c58e57 100644 --- a/web/src/lib/components/TrackMenu.test.ts +++ b/web/src/lib/components/TrackMenu.test.ts @@ -33,11 +33,12 @@ vi.mock('$lib/api/playlists', () => emptyPlaylistsMock()); vi.mock('$lib/player/store.svelte', () => ({ playNext: vi.fn(), - enqueueTrack: vi.fn() + enqueueTrack: vi.fn(), + playRadio: vi.fn() })); import TrackMenu from './TrackMenu.svelte'; -import { playNext, enqueueTrack } from '$lib/player/store.svelte'; +import { playNext, enqueueTrack, playRadio } from '$lib/player/store.svelte'; const track = makeTrack({ title: 'Roygbiv' }); @@ -63,9 +64,9 @@ describe('TrackMenu', () => { expect(screen.getByRole('menuitem', { name: /add to queue/i })).toBeInTheDocument(); expect(screen.getByRole('menuitem', { name: /^like$/i })).toBeInTheDocument(); expect(screen.getByRole('menuitem', { name: /add to playlist/i })).toBeInTheDocument(); + expect(screen.getByRole('menuitem', { name: /start radio/i })).toBeInTheDocument(); expect(screen.getByRole('menuitem', { name: /go to album/i })).toBeInTheDocument(); expect(screen.getByRole('menuitem', { name: /go to artist/i })).toBeInTheDocument(); - expect(screen.getByRole('menuitem', { name: /flag this track/i })).toBeInTheDocument(); expect(screen.getByRole('menuitem', { name: /^hide$/i })).toBeInTheDocument(); expect(screen.getByRole('menuitem', { name: /remove from library/i })).toBeInTheDocument(); @@ -113,10 +114,17 @@ describe('TrackMenu', () => { expect(screen.queryByRole('menu')).not.toBeInTheDocument(); }); - test('clicking "Flag this track…" opens FlagPopover and closes menu', async () => { + test('"Start radio" dispatches playRadio(track.id)', async () => { render(TrackMenu, { props: { track } }); await fireEvent.click(screen.getByRole('button', { name: /track actions/i })); - await fireEvent.click(screen.getByRole('menuitem', { name: /flag this track/i })); + await fireEvent.click(screen.getByRole('menuitem', { name: /start radio/i })); + expect(playRadio).toHaveBeenCalledWith(track.id); + }); + + test('clicking "Hide" opens the flag/quarantine popover and closes menu', async () => { + render(TrackMenu, { props: { track } }); + await fireEvent.click(screen.getByRole('button', { name: /track actions/i })); + await fireEvent.click(screen.getByRole('menuitem', { name: /^hide$/i })); expect(screen.queryByRole('menu')).not.toBeInTheDocument(); expect( screen.getByRole('dialog', { name: /flag this track as broken/i })