diff --git a/ui/src/audioplayer/AudioTitle.jsx b/ui/src/audioplayer/AudioTitle.jsx index aebd37170..093bb53fb 100644 --- a/ui/src/audioplayer/AudioTitle.jsx +++ b/ui/src/audioplayer/AudioTitle.jsx @@ -38,16 +38,14 @@ const AudioTitle = React.memo(({ audioInfo, gainInfo, isMobile }) => { const subtitle = song.tags?.['subtitle'] const title = song.title + (subtitle ? ` (${subtitle})` : '') + const linkTo = audioInfo.isRadio + ? `/radio/${audioInfo.trackId}/show` + : song.playlistId + ? `/playlist/${song.playlistId}/show` + : `/album/${song.albumId}/show` + return ( - + {title} {isDesktop && ( diff --git a/ui/src/audioplayer/AudioTitle.test.jsx b/ui/src/audioplayer/AudioTitle.test.jsx new file mode 100644 index 000000000..c3f566f6b --- /dev/null +++ b/ui/src/audioplayer/AudioTitle.test.jsx @@ -0,0 +1,57 @@ +import React from 'react' +import { render, screen } from '@testing-library/react' +import { describe, it, expect, beforeEach, vi } from 'vitest' +import AudioTitle from './AudioTitle' + +vi.mock('@material-ui/core', async () => { + const actual = await import('@material-ui/core') + return { + ...actual, + useMediaQuery: vi.fn(), + } +}) + +vi.mock('react-router-dom', () => ({ + Link: ({ to, children, ...props }) => ( + + {children} + + ), +})) + +vi.mock('react-dnd', () => ({ + useDrag: vi.fn(() => [null, () => {}]), +})) + +describe('', () => { + const baseSong = { + id: 'song-1', + albumId: 'album-1', + playlistId: 'playlist-1', + title: 'Test Song', + artist: 'Artist', + album: 'Album', + year: '2020', + } + + beforeEach(() => { + vi.clearAllMocks() + }) + + it('links to playlist when playlistId is provided', () => { + const audioInfo = { trackId: 'track-1', song: baseSong } + render() + const link = screen.getByRole('link') + expect(link.getAttribute('href')).toBe('/playlist/playlist-1/show') + }) + + it('falls back to album link when no playlistId', () => { + const audioInfo = { + trackId: 'track-1', + song: { ...baseSong, playlistId: undefined }, + } + render() + const link = screen.getByRole('link') + expect(link.getAttribute('href')).toBe('/album/album-1/show') + }) +})