Web UI: Most Played hover fix, narrower seek bar, Android-parity track kebab #99
@@ -33,11 +33,12 @@ vi.mock('$lib/api/playlists', () => emptyPlaylistsMock());
|
|||||||
|
|
||||||
vi.mock('$lib/player/store.svelte', () => ({
|
vi.mock('$lib/player/store.svelte', () => ({
|
||||||
playNext: vi.fn(),
|
playNext: vi.fn(),
|
||||||
enqueueTrack: vi.fn()
|
enqueueTrack: vi.fn(),
|
||||||
|
playRadio: vi.fn()
|
||||||
}));
|
}));
|
||||||
|
|
||||||
import TrackMenu from './TrackMenu.svelte';
|
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' });
|
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: /add to queue/i })).toBeInTheDocument();
|
||||||
expect(screen.getByRole('menuitem', { name: /^like$/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: /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 album/i })).toBeInTheDocument();
|
||||||
expect(screen.getByRole('menuitem', { name: /go to artist/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: /^hide$/i })).toBeInTheDocument();
|
||||||
expect(screen.getByRole('menuitem', { name: /remove from library/i })).toBeInTheDocument();
|
expect(screen.getByRole('menuitem', { name: /remove from library/i })).toBeInTheDocument();
|
||||||
|
|
||||||
@@ -113,10 +114,17 @@ describe('TrackMenu', () => {
|
|||||||
expect(screen.queryByRole('menu')).not.toBeInTheDocument();
|
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 } });
|
render(TrackMenu, { props: { track } });
|
||||||
await fireEvent.click(screen.getByRole('button', { name: /track actions/i }));
|
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.queryByRole('menu')).not.toBeInTheDocument();
|
||||||
expect(
|
expect(
|
||||||
screen.getByRole('dialog', { name: /flag this track as broken/i })
|
screen.getByRole('dialog', { name: /flag this track as broken/i })
|
||||||
|
|||||||
Reference in New Issue
Block a user