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());
|
||||
|
||||
@@ -21,16 +21,15 @@ import {
|
||||
} from './store.svelte';
|
||||
import { api } from '$lib/api/client';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
function track(id: string, dur = 200): TrackRef {
|
||||
return {
|
||||
id, title: `T ${id}`,
|
||||
album_id: 'a', album_title: 'A',
|
||||
artist_id: 'ar', artist_name: 'Ar',
|
||||
track_number: Number(id), disc_number: 1,
|
||||
return makeTrack({
|
||||
id,
|
||||
title: `T ${id}`,
|
||||
duration_sec: dur,
|
||||
stream_url: `/api/tracks/${id}/stream`
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
|
||||
import { flushSync } from 'svelte';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
function track(id: string): TrackRef {
|
||||
return {
|
||||
id, title: `T ${id}`,
|
||||
album_id: 'a1', album_title: 'A',
|
||||
artist_id: 'ar1', artist_name: 'Ar',
|
||||
track_number: Number(id), disc_number: 1,
|
||||
duration_sec: 180, stream_url: `/api/tracks/${id}/stream`
|
||||
};
|
||||
return makeTrack({
|
||||
id,
|
||||
title: `T ${id}`,
|
||||
stream_url: `/api/tracks/${id}/stream`
|
||||
});
|
||||
}
|
||||
|
||||
type Handler = (details: MediaSessionActionDetails) => void;
|
||||
|
||||
@@ -1,17 +1,8 @@
|
||||
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
||||
import { readPersistedQueue, writePersistedQueue, clearPersistedQueue } from './persisted';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const sampleTrack: TrackRef = {
|
||||
id: 't1',
|
||||
title: 'Foo',
|
||||
album_id: 'al1',
|
||||
album_title: 'Baz',
|
||||
artist_id: 'ar1',
|
||||
artist_name: 'Bar',
|
||||
duration_sec: 200,
|
||||
stream_url: '/stream/t1'
|
||||
};
|
||||
const sampleTrack = makeTrack();
|
||||
|
||||
describe('persisted queue', () => {
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -19,6 +19,7 @@ import {
|
||||
} from './store.svelte';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { writePersistedQueue, clearPersistedQueue } from './persisted';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
vi.mock('$lib/auth/store.svelte', () => ({
|
||||
user: {
|
||||
@@ -29,14 +30,12 @@ vi.mock('$lib/auth/store.svelte', () => ({
|
||||
}));
|
||||
|
||||
function track(id: string, dur = 180): TrackRef {
|
||||
return {
|
||||
id, title: `T ${id}`,
|
||||
album_id: 'a1', album_title: 'A',
|
||||
artist_id: 'ar1', artist_name: 'Ar',
|
||||
track_number: Number(id), disc_number: 1,
|
||||
return makeTrack({
|
||||
id,
|
||||
title: `T ${id}`,
|
||||
duration_sec: dur,
|
||||
stream_url: `/api/tracks/${id}/stream`
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -1,20 +1,11 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { dayBucket, groupByDay } from './dayGroup';
|
||||
import type { HistoryEvent } from '$lib/api/history';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const NOW = new Date('2026-05-04T14:00:00Z');
|
||||
|
||||
const stubTrack: TrackRef = {
|
||||
id: 'track-x',
|
||||
title: 'Song X',
|
||||
album_id: 'al-x',
|
||||
album_title: 'Album X',
|
||||
artist_id: 'ar-x',
|
||||
artist_name: 'Artist X',
|
||||
duration_sec: 200,
|
||||
stream_url: '/stream/x'
|
||||
};
|
||||
const stubTrack = makeTrack();
|
||||
|
||||
const mkEvent = (id: string, playedAt: string): HistoryEvent => ({
|
||||
id,
|
||||
|
||||
@@ -4,6 +4,7 @@ import { flushSync } from 'svelte';
|
||||
import { mockQuery } from '../../../test-utils/query';
|
||||
import { emptyLikesMock } from '../../../test-utils/mocks/likes';
|
||||
import type { AlbumDetail, TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const state = vi.hoisted(() => ({ pageParams: { id: 'xyz' } as Record<string, string> }));
|
||||
|
||||
@@ -25,14 +26,14 @@ import AlbumPage from './+page.svelte';
|
||||
import { createAlbumQuery } from '$lib/api/queries';
|
||||
|
||||
function track(id: string, title: string, number: number, dur: number): TrackRef {
|
||||
return {
|
||||
return makeTrack({
|
||||
id, title,
|
||||
album_id: 'xyz', album_title: 'Kind of Blue',
|
||||
artist_id: 'md', artist_name: 'Miles Davis',
|
||||
track_number: number, disc_number: 1,
|
||||
track_number: number,
|
||||
duration_sec: dur,
|
||||
stream_url: `/api/tracks/${id}/stream`
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
afterEach(() => {
|
||||
|
||||
@@ -2,18 +2,9 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { render, screen } from '@testing-library/svelte';
|
||||
import HistoryPage from './+page.svelte';
|
||||
import type { HistoryEvent, HistoryResponse } from '$lib/api/history';
|
||||
import type { TrackRef } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const mkTrack = (id: string): TrackRef => ({
|
||||
id: `track-${id}`,
|
||||
title: `Song ${id}`,
|
||||
album_id: `album-${id}`,
|
||||
album_title: `Album ${id}`,
|
||||
artist_id: `artist-${id}`,
|
||||
artist_name: `Artist ${id}`,
|
||||
duration_sec: 200,
|
||||
stream_url: `/stream/${id}`
|
||||
});
|
||||
const mkTrack = (id: string) => makeTrack({ id: `track-${id}`, title: `Song ${id}` });
|
||||
|
||||
const mkEvent = (id: string, playedAt: Date): HistoryEvent => ({
|
||||
id: `event-${id}`,
|
||||
|
||||
@@ -3,6 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
|
||||
import { mockInfiniteQuery } from '../../../test-utils/query';
|
||||
import type { ArtistRef, AlbumRef, TrackRef, Page } from '$lib/api/types';
|
||||
import { readable } from 'svelte/store';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
vi.mock('$lib/api/likes', () => ({
|
||||
createLikedIdsQuery: () => readable({
|
||||
@@ -42,12 +43,10 @@ describe('liked library page', () => {
|
||||
id: 'al1', title: 'Y', sort_title: 'Y', artist_id: 'a1', artist_name: 'X',
|
||||
year: 2020, track_count: 1, duration_sec: 100, cover_url: '/x', cover_art_source: null
|
||||
};
|
||||
const tr: TrackRef = {
|
||||
id: 't1', title: 'Z', album_id: 'al1', album_title: 'Y',
|
||||
artist_id: 'a1', artist_name: 'X',
|
||||
track_number: 1, disc_number: 1, duration_sec: 100,
|
||||
stream_url: '/api/tracks/t1/stream'
|
||||
};
|
||||
const tr: TrackRef = makeTrack({
|
||||
title: 'Z', album_id: 'al1', album_title: 'Y',
|
||||
artist_id: 'a1', artist_name: 'X', duration_sec: 100
|
||||
});
|
||||
(createLikedArtistsInfiniteQuery as ReturnType<typeof vi.fn>).mockReturnValue(
|
||||
mockInfiniteQuery({ pages: [page([ar], 1)] })
|
||||
);
|
||||
|
||||
@@ -3,7 +3,8 @@ import { render, screen } from '@testing-library/svelte';
|
||||
import { mockQuery } from '../../test-utils/query';
|
||||
import { emptyLikesMock } from '../../test-utils/mocks/likes';
|
||||
import { pageUrlModule } from '$test-utils/mocks/appState';
|
||||
import type { ArtistRef, AlbumRef, TrackRef, SearchResponse } from '$lib/api/types';
|
||||
import type { ArtistRef, AlbumRef, SearchResponse } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const state = vi.hoisted(() => ({
|
||||
pageUrl: new URL('http://localhost/search')
|
||||
@@ -44,13 +45,12 @@ const album: AlbumRef = {
|
||||
id: 'al1', title: 'Kind of Blue', sort_title: 'Kind of Blue', artist_id: 'a1', artist_name: 'Miles Davis',
|
||||
year: 1959, track_count: 5, duration_sec: 2630, cover_url: '/api/albums/al1/cover', cover_art_source: null
|
||||
};
|
||||
const track: TrackRef = {
|
||||
id: 't1', title: 'So What',
|
||||
const track = makeTrack({
|
||||
title: 'So What',
|
||||
album_id: 'al1', album_title: 'Kind of Blue',
|
||||
artist_id: 'a1', artist_name: 'Miles Davis',
|
||||
track_number: 1, disc_number: 1, duration_sec: 545,
|
||||
stream_url: '/api/tracks/t1/stream'
|
||||
};
|
||||
duration_sec: 545
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks();
|
||||
|
||||
@@ -5,6 +5,7 @@ import { emptyLikesMock } from '../../../test-utils/mocks/likes';
|
||||
import { emptyQuarantineMock } from '../../../test-utils/mocks/quarantine';
|
||||
import { pageUrlModule } from '$test-utils/mocks/appState';
|
||||
import type { TrackRef, Page } from '$lib/api/types';
|
||||
import { makeTrack } from '$test-utils/fixtures/track';
|
||||
|
||||
const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/tracks?q=miles') }));
|
||||
|
||||
@@ -32,13 +33,7 @@ function page<T>(items: T[], total: number, offset = 0, limit = 50): Page<T> {
|
||||
return { items, total, offset, limit };
|
||||
}
|
||||
|
||||
const track: TrackRef = {
|
||||
id: 't1', title: 'So What',
|
||||
album_id: 'al1', album_title: 'Kind of Blue',
|
||||
artist_id: 'a1', artist_name: 'Miles Davis',
|
||||
track_number: 1, disc_number: 1, duration_sec: 545,
|
||||
stream_url: '/api/tracks/t1/stream'
|
||||
};
|
||||
const track = makeTrack({ title: 'So What' });
|
||||
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks();
|
||||
|
||||
Reference in New Issue
Block a user