diff --git a/web/src/pages/ItemPage.tsx b/web/src/pages/ItemPage.tsx index b7f6842..2ed4ae7 100644 --- a/web/src/pages/ItemPage.tsx +++ b/web/src/pages/ItemPage.tsx @@ -25,7 +25,10 @@ export default function ItemPage() { function searchAlbums() { void api .searchAlbums(albumQuery) - .then((res) => setAlbums(res.albums)) + .then((res) => { + setAlbums(res.albums) + setPickedAlbum(null) + }) .catch(() => setAlbums([])) } diff --git a/web/test/item.test.tsx b/web/test/item.test.tsx index 5646538..25e67c2 100644 --- a/web/test/item.test.tsx +++ b/web/test/item.test.tsx @@ -110,4 +110,21 @@ describe('ItemPage', () => { await waitFor(() => expect(api.deleteItem).toHaveBeenCalledWith(1)) await waitFor(() => expect(screen.getByText('library')).toBeTruthy()) }) + + it('re-match clears the picked album when searching again', async () => { + vi.mocked(api.searchAlbums) + .mockResolvedValueOnce({ + albums: [{ id: 77, subsonicId: 'a1', title: 'Motion (Remaster)', artist: 'The Cinematic Orchestra' }], + } as never) + .mockResolvedValueOnce({ + albums: [{ id: 88, subsonicId: 'a2', title: 'Something Else', artist: 'Other Artist' }], + } as never) + renderItem() + await userEvent.click(await screen.findByRole('button', { name: /re-match/i })) + await userEvent.click(screen.getByRole('button', { name: /^search$/i })) + await userEvent.click(await screen.findByRole('radio', { name: /motion \(remaster\)/i })) + await userEvent.click(screen.getByRole('button', { name: /^search$/i })) + const linkBtn = await screen.findByRole('button', { name: /^link$/i }) + expect(linkBtn).toHaveProperty('disabled', true) + }) })