9acad5461e
The DRY pass audit (#375) found two inline mock patterns repeated across the vitest suite: a default empty-playlists mock for $lib/api/playlists (4 exact copies in menu/card tests) and an api-client spy mock for $lib/api/client (9 callers split between get-only and full-RESTy shapes — unified into one helper that always returns all four verb spies). Mirrors the existing test-utils/mocks/likes.ts and test-utils/mocks/quarantine.ts convention. Tests with intentionally divergent shapes (AddToPlaylistMenu's richer createPlaylist payload, PlaylistCard's getPlaylist, route-specific mocks, events.svelte's specific resolved value) stay inline. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
24 lines
854 B
TypeScript
24 lines
854 B
TypeScript
// Default empty-playlists mock for $lib/api/playlists. The
|
|
// dominant shape across the menu / card tests: no playlists for
|
|
// the user, append/create as resolved spies.
|
|
//
|
|
// Usage:
|
|
// vi.mock('$lib/api/playlists', () => emptyPlaylistsMock());
|
|
//
|
|
// Tests that exercise richer return payloads (AddToPlaylistMenu's
|
|
// full PlaylistDetail return, PlaylistCard's getPlaylist, route
|
|
// tests that need owned playlists pre-populated) keep custom
|
|
// mocks inline.
|
|
|
|
import { readable } from 'svelte/store';
|
|
import { vi } from 'vitest';
|
|
|
|
export function emptyPlaylistsMock() {
|
|
return {
|
|
createPlaylistsQuery: () =>
|
|
readable({ data: { owned: [], public: [] }, isPending: false, isError: false }),
|
|
appendTracks: vi.fn().mockResolvedValue({ id: 'p1', tracks: [] }),
|
|
createPlaylist: vi.fn().mockResolvedValue({ id: 'p1', name: 'New' })
|
|
};
|
|
}
|