refactor(web): sweep 24 test files to use makeTrack/makeTracks fixtures (#375)
Replaces inline TrackRef literal redefinitions with calls to the test-utils helper. Tests that asserted on default field values (e.g. track titles, artist names rendered in the DOM) keep explicit overrides; tests that only need a stub for shape now use makeTrack() with no overrides. PlaylistCard.test.ts, PlaylistTrackRow.test.ts, and playlist.test.ts SKIPPED — they use PlaylistTrack (with track_id/added_at), not TrackRef. ArtistCard.svelte and +page.svelte route files (matched by initial grep) SKIPPED — live code, not test files. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { describe, expect, test, vi } from 'vitest';
|
||||
import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
|
||||
import { readable } from 'svelte/store';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const playlistsData = vi.hoisted(() => ({
|
||||
owned: [
|
||||
@@ -69,16 +69,7 @@ vi.mock('$lib/api/playlists', () => ({
|
||||
|
||||
import AddToPlaylistMenu from './AddToPlaylistMenu.svelte';
|
||||
|
||||
const track: TrackRef = {
|
||||
id: 't1',
|
||||
title: 'Roygbiv',
|
||||
album_id: 'a1',
|
||||
album_title: 'MHTRTC',
|
||||
artist_id: 'ar1',
|
||||
artist_name: 'BoC',
|
||||
duration_sec: 137,
|
||||
stream_url: '/api/tracks/t1/stream'
|
||||
};
|
||||
const track = makeTrack();
|
||||
|
||||
describe('AddToPlaylistMenu', () => {
|
||||
test('lists own playlists alphabetically followed by "New playlist…"', () => {
|
||||
|
||||
@@ -3,6 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
|
||||
import type { AlbumRef, AlbumDetail, TrackRef } from '$lib/api/types';
|
||||
import { FALLBACK_COVER } from '$lib/media/covers';
|
||||
import { emptyLikesMock } from '../../test-utils/mocks/likes';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
vi.mock('$lib/api/client', () => ({
|
||||
api: { get: vi.fn() }
|
||||
@@ -80,13 +81,12 @@ describe('AlbumCard', () => {
|
||||
|
||||
test('+ queue button fetches album detail and calls enqueueTracks', async () => {
|
||||
const tracks: TrackRef[] = [
|
||||
{
|
||||
id: 't1', title: 'So What',
|
||||
makeTrack({
|
||||
title: 'So What',
|
||||
album_id: 'xyz', album_title: 'Kind of Blue',
|
||||
artist_id: 'm-davis', artist_name: 'Miles Davis',
|
||||
track_number: 1, disc_number: 1, duration_sec: 545,
|
||||
stream_url: '/api/tracks/t1/stream'
|
||||
}
|
||||
duration_sec: 545
|
||||
})
|
||||
];
|
||||
const detail: AlbumDetail = { ...album, tracks };
|
||||
(api.get as ReturnType<typeof vi.fn>).mockResolvedValueOnce(detail);
|
||||
@@ -102,11 +102,12 @@ describe('AlbumCard', () => {
|
||||
|
||||
test('play overlay click fetches album detail and calls playQueue at index 0', async () => {
|
||||
const tracks: TrackRef[] = [
|
||||
{ id: 't1', title: 'So What',
|
||||
makeTrack({
|
||||
title: 'So What',
|
||||
album_id: 'xyz', album_title: 'Kind of Blue',
|
||||
artist_id: 'm-davis', artist_name: 'Miles Davis',
|
||||
track_number: 1, disc_number: 1, duration_sec: 545,
|
||||
stream_url: '/api/tracks/t1/stream' }
|
||||
duration_sec: 545
|
||||
})
|
||||
];
|
||||
const detail: AlbumDetail = { ...album, tracks };
|
||||
(api.get as ReturnType<typeof vi.fn>).mockResolvedValueOnce(detail);
|
||||
|
||||
@@ -3,6 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
|
||||
import { readable } from 'svelte/store';
|
||||
import { emptyLikesMock } from '../../test-utils/mocks/likes';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTracks } from '$test-utils/fixtures/track';
|
||||
|
||||
vi.mock('$app/navigation', () => ({ goto: vi.fn() }));
|
||||
|
||||
@@ -30,10 +31,9 @@ import { listAlbumTracks } from '$lib/api/albums';
|
||||
import { likeEntity } from '$lib/api/likes';
|
||||
import { goto } from '$app/navigation';
|
||||
|
||||
const TRACKS: TrackRef[] = [
|
||||
{ id: 't1', title: 'A', album_id: 'al1', album_title: 'Disc', artist_id: 'a1', artist_name: 'Test', duration_sec: 100, stream_url: '/s/t1' },
|
||||
{ id: 't2', title: 'B', album_id: 'al1', album_title: 'Disc', artist_id: 'a1', artist_name: 'Test', duration_sec: 100, stream_url: '/s/t2' }
|
||||
];
|
||||
const TRACKS: TrackRef[] = makeTracks(2, {
|
||||
album_id: 'al1', album_title: 'Disc', artist_id: 'a1', artist_name: 'Test'
|
||||
});
|
||||
|
||||
const PROPS = { albumId: 'al1', albumTitle: 'Disc', artistId: 'a1', artistName: 'Test' };
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { afterEach, describe, expect, test, vi } from 'vitest';
|
||||
import { render, screen, fireEvent } from '@testing-library/svelte';
|
||||
import { emptyLikesMock } from '../../test-utils/mocks/likes';
|
||||
import type { ArtistRef, TrackRef } from '$lib/api/types';
|
||||
import { makeTrack, makeTracks } from '$test-utils/fixtures/track';
|
||||
|
||||
vi.mock('$lib/api/client', () => ({
|
||||
api: { get: vi.fn() }
|
||||
@@ -46,14 +47,11 @@ describe('ArtistCard', () => {
|
||||
});
|
||||
|
||||
test('play overlay fetches tracks, shuffles, calls playQueue', async () => {
|
||||
const tracks: TrackRef[] = [
|
||||
{ id: 't1', title: 'A', album_id: 'al-1', album_title: 'X',
|
||||
artist_id: 'art-1', artist_name: 'BoC',
|
||||
track_number: 1, disc_number: 1, duration_sec: 1, stream_url: '/x' },
|
||||
{ id: 't2', title: 'B', album_id: 'al-1', album_title: 'X',
|
||||
artist_id: 'art-1', artist_name: 'BoC',
|
||||
track_number: 2, disc_number: 1, duration_sec: 1, stream_url: '/x' }
|
||||
];
|
||||
const tracks: TrackRef[] = makeTracks(2, {
|
||||
album_id: 'al-1', album_title: 'X',
|
||||
artist_id: 'art-1', artist_name: 'BoC',
|
||||
duration_sec: 1
|
||||
});
|
||||
(api.get as ReturnType<typeof vi.fn>).mockResolvedValueOnce(tracks);
|
||||
|
||||
render(ArtistCard, { props: { artist } });
|
||||
@@ -83,7 +81,7 @@ describe('ArtistCard', () => {
|
||||
|
||||
test('+queue button calls listArtistTracks then enqueueTracks', async () => {
|
||||
const fakeTracks = [
|
||||
{ id: 't1', title: 'A', album_id: 'al1', album_title: 'X', artist_id: 'art-1', artist_name: 'BoC', duration_sec: 60, stream_url: '/s/t1' }
|
||||
makeTrack({ artist_id: 'art-1', artist_name: 'BoC' })
|
||||
];
|
||||
const { listArtistTracks } = await import('$lib/api/artists');
|
||||
(listArtistTracks as unknown as ReturnType<typeof vi.fn>).mockResolvedValueOnce(fakeTracks);
|
||||
|
||||
@@ -3,6 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
|
||||
import { readable } from 'svelte/store';
|
||||
import { emptyLikesMock } from '../../test-utils/mocks/likes';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTracks } from '$test-utils/fixtures/track';
|
||||
|
||||
vi.mock('$app/navigation', () => ({ goto: vi.fn() }));
|
||||
|
||||
@@ -28,10 +29,9 @@ import { enqueueTracks } from '$lib/player/store.svelte';
|
||||
import { listArtistTracks } from '$lib/api/artists';
|
||||
import { likeEntity, unlikeEntity } from '$lib/api/likes';
|
||||
|
||||
const TRACKS: TrackRef[] = [
|
||||
{ id: 't1', title: 'A', album_id: 'al1', album_title: 'X', artist_id: 'a1', artist_name: 'Test', duration_sec: 100, stream_url: '/s/t1' },
|
||||
{ id: 't2', title: 'B', album_id: 'al1', album_title: 'X', artist_id: 'a1', artist_name: 'Test', duration_sec: 100, stream_url: '/s/t2' }
|
||||
];
|
||||
const TRACKS: TrackRef[] = makeTracks(2, {
|
||||
album_id: 'al1', artist_id: 'a1', artist_name: 'Test'
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks();
|
||||
|
||||
@@ -4,6 +4,7 @@ import type { TrackRef } from '$lib/api/types';
|
||||
import { readable } from 'svelte/store';
|
||||
import { emptyLikesMock } from '../../test-utils/mocks/likes';
|
||||
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
|
||||
import { makeTracks } from '$test-utils/fixtures/track';
|
||||
|
||||
vi.mock('$lib/api/likes', () => emptyLikesMock());
|
||||
|
||||
@@ -35,17 +36,11 @@ vi.mock('$lib/player/store.svelte', () => ({
|
||||
import CompactTrackCard from './CompactTrackCard.svelte';
|
||||
import { playQueue, enqueueTrack } from '$lib/player/store.svelte';
|
||||
|
||||
const tracks: TrackRef[] = [
|
||||
{ id: 't1', title: 'First', album_id: 'a1', album_title: 'A',
|
||||
artist_id: 'art-1', artist_name: 'Artist',
|
||||
track_number: 1, disc_number: 1, duration_sec: 1, stream_url: '/a' },
|
||||
{ id: 't2', title: 'Second', album_id: 'a1', album_title: 'A',
|
||||
artist_id: 'art-1', artist_name: 'Artist',
|
||||
track_number: 2, disc_number: 1, duration_sec: 1, stream_url: '/b' },
|
||||
{ id: 't3', title: 'Third', album_id: 'a1', album_title: 'A',
|
||||
artist_id: 'art-1', artist_name: 'Artist',
|
||||
track_number: 3, disc_number: 1, duration_sec: 1, stream_url: '/c' }
|
||||
];
|
||||
const titles = ['First', 'Second', 'Third'];
|
||||
const tracks: TrackRef[] = makeTracks(3, { artist_name: 'Artist' }).map((t, i) => ({
|
||||
...t,
|
||||
title: titles[i]
|
||||
}));
|
||||
|
||||
afterEach(() => vi.clearAllMocks());
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { afterEach, describe, expect, test, vi } from 'vitest';
|
||||
import { render, screen, fireEvent } from '@testing-library/svelte';
|
||||
import FlagPopover from './FlagPopover.svelte';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const invalidateMock = vi.fn();
|
||||
vi.mock('@tanstack/svelte-query', async (orig) => {
|
||||
@@ -18,16 +18,7 @@ vi.mock('$lib/api/quarantine', () => ({
|
||||
|
||||
import { flagTrack } from '$lib/api/quarantine';
|
||||
|
||||
const track: TrackRef = {
|
||||
id: 't1',
|
||||
title: 'Roygbiv',
|
||||
album_id: 'a1',
|
||||
album_title: 'Geogaddi',
|
||||
artist_id: 'ar1',
|
||||
artist_name: 'Boards of Canada',
|
||||
duration_sec: 240,
|
||||
stream_url: '/api/tracks/t1/stream'
|
||||
};
|
||||
const track = makeTrack();
|
||||
|
||||
afterEach(() => vi.clearAllMocks());
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { render, screen, fireEvent } from '@testing-library/svelte';
|
||||
import HistoryRow from './HistoryRow.svelte';
|
||||
import type { HistoryEvent } from '$lib/api/history';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const playQueue = vi.fn();
|
||||
|
||||
@@ -10,16 +10,11 @@ vi.mock('$lib/player/store.svelte', () => ({
|
||||
playQueue: (...args: unknown[]) => playQueue(...args)
|
||||
}));
|
||||
|
||||
const sampleTrack: TrackRef = {
|
||||
id: 'track-1',
|
||||
const sampleTrack = makeTrack({
|
||||
title: 'Song Title',
|
||||
album_id: 'album-1',
|
||||
album_title: 'Album',
|
||||
artist_id: 'artist-1',
|
||||
artist_name: 'Artist Name',
|
||||
duration_sec: 200,
|
||||
stream_url: '/stream/track-1'
|
||||
};
|
||||
artist_name: 'Artist Name'
|
||||
});
|
||||
|
||||
const sampleEvent: HistoryEvent = {
|
||||
id: 'event-1',
|
||||
|
||||
@@ -3,6 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { emptyLikesMock } from '../../test-utils/mocks/likes';
|
||||
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
// Mutable state the mocked store reads from.
|
||||
const state = vi.hoisted(() => ({
|
||||
@@ -57,13 +58,12 @@ import {
|
||||
} from '$lib/player/store.svelte';
|
||||
|
||||
function track(): TrackRef {
|
||||
return {
|
||||
id: 't1', title: 'So What',
|
||||
return makeTrack({
|
||||
title: 'So What',
|
||||
album_id: 'xyz', album_title: 'Kind of Blue',
|
||||
artist_id: 'md', artist_name: 'Miles Davis',
|
||||
track_number: 1, disc_number: 1,
|
||||
duration_sec: 545, stream_url: '/api/tracks/t1/stream'
|
||||
};
|
||||
duration_sec: 545
|
||||
});
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -2,6 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { render, screen, fireEvent } from '@testing-library/svelte';
|
||||
import QueueDrawer from './QueueDrawer.svelte';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const closeQueueDrawer = vi.fn();
|
||||
let queueValue: TrackRef[] = [];
|
||||
@@ -22,16 +23,7 @@ vi.mock('$lib/player/store.svelte', () => ({
|
||||
moveQueueItem: vi.fn()
|
||||
}));
|
||||
|
||||
const t = (id: string): TrackRef => ({
|
||||
id,
|
||||
title: `Song ${id}`,
|
||||
album_id: `al-${id}`,
|
||||
album_title: 'A',
|
||||
artist_id: `ar-${id}`,
|
||||
artist_name: `Artist ${id}`,
|
||||
duration_sec: 200,
|
||||
stream_url: `/stream/${id}`
|
||||
});
|
||||
const t = (id: string): TrackRef => makeTrack({ id, title: `Song ${id}` });
|
||||
|
||||
describe('QueueDrawer', () => {
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { render, screen, fireEvent } from '@testing-library/svelte';
|
||||
import QueueTrackRow from './QueueTrackRow.svelte';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const playFromQueueIndex = vi.fn();
|
||||
const removeFromQueue = vi.fn();
|
||||
@@ -13,16 +13,10 @@ vi.mock('$lib/player/store.svelte', () => ({
|
||||
moveQueueItem: (...args: unknown[]) => moveQueueItem(...args)
|
||||
}));
|
||||
|
||||
const sampleTrack: TrackRef = {
|
||||
id: 't1',
|
||||
const sampleTrack = makeTrack({
|
||||
title: 'Song Title',
|
||||
album_id: 'al1',
|
||||
album_title: 'Album',
|
||||
artist_id: 'ar1',
|
||||
artist_name: 'Artist Name',
|
||||
duration_sec: 200,
|
||||
stream_url: '/stream/t1'
|
||||
};
|
||||
artist_name: 'Artist Name'
|
||||
});
|
||||
|
||||
describe('QueueTrackRow', () => {
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { afterEach, describe, expect, test, vi } from 'vitest';
|
||||
import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const invalidateMock = vi.fn();
|
||||
vi.mock('@tanstack/svelte-query', async (orig) => {
|
||||
@@ -18,16 +18,7 @@ vi.mock('$lib/api/admin/tracks', () => ({
|
||||
import RemoveTrackPopover from './RemoveTrackPopover.svelte';
|
||||
import { removeTrack } from '$lib/api/admin/tracks';
|
||||
|
||||
const track: TrackRef = {
|
||||
id: 't1',
|
||||
title: 'Roygbiv',
|
||||
album_id: 'a1',
|
||||
album_title: 'Geogaddi',
|
||||
artist_id: 'ar1',
|
||||
artist_name: 'Boards of Canada',
|
||||
duration_sec: 240,
|
||||
stream_url: '/api/tracks/t1/stream'
|
||||
};
|
||||
const track = makeTrack({ title: 'Roygbiv' });
|
||||
|
||||
afterEach(() => vi.clearAllMocks());
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
|
||||
import { readable } from 'svelte/store';
|
||||
import { emptyLikesMock } from '../../test-utils/mocks/likes';
|
||||
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
// Mutable mock-user handle so individual tests can flip is_admin / null
|
||||
// without re-importing the module under test.
|
||||
@@ -44,16 +44,7 @@ vi.mock('$lib/player/store.svelte', () => ({
|
||||
import TrackMenu from './TrackMenu.svelte';
|
||||
import { playNext, enqueueTrack } from '$lib/player/store.svelte';
|
||||
|
||||
const track: TrackRef = {
|
||||
id: 't1',
|
||||
title: 'Roygbiv',
|
||||
album_id: 'a1',
|
||||
album_title: 'Geogaddi',
|
||||
artist_id: 'ar1',
|
||||
artist_name: 'Boards of Canada',
|
||||
duration_sec: 240,
|
||||
stream_url: '/api/tracks/t1/stream'
|
||||
};
|
||||
const track = makeTrack({ title: 'Roygbiv' });
|
||||
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks();
|
||||
|
||||
@@ -3,6 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { emptyLikesMock } from '../../test-utils/mocks/likes';
|
||||
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
vi.mock('$lib/player/store.svelte', () => ({
|
||||
playQueue: vi.fn(),
|
||||
@@ -18,20 +19,8 @@ import TrackRow from './TrackRow.svelte';
|
||||
import { playQueue, enqueueTrack, playRadio } from '$lib/player/store.svelte';
|
||||
|
||||
const tracks: TrackRef[] = [
|
||||
{
|
||||
id: 't1', title: 'So What',
|
||||
album_id: 'xyz', album_title: 'Kind of Blue',
|
||||
artist_id: 'm-davis', artist_name: 'Miles Davis',
|
||||
track_number: 1, disc_number: 1,
|
||||
duration_sec: 545, stream_url: '/api/tracks/t1/stream'
|
||||
},
|
||||
{
|
||||
id: 't2', title: 'Freddie Freeloader',
|
||||
album_id: 'xyz', album_title: 'Kind of Blue',
|
||||
artist_id: 'm-davis', artist_name: 'Miles Davis',
|
||||
track_number: 2, disc_number: 1,
|
||||
duration_sec: 565, stream_url: '/api/tracks/t2/stream'
|
||||
}
|
||||
makeTrack({ title: 'So What', duration_sec: 545 }),
|
||||
makeTrack({ id: 't2', title: 'Freddie Freeloader', track_number: 2, duration_sec: 565, stream_url: '/api/tracks/t2/stream' })
|
||||
];
|
||||
|
||||
afterEach(() => vi.clearAllMocks());
|
||||
|
||||
Reference in New Issue
Block a user