import { afterEach, describe, expect, test, vi } from 'vitest'; vi.mock('./client', () => ({ api: { get: vi.fn() } })); import { listSuggestions } from './suggestions'; import { qk } from './queries'; import { api } from './client'; import type { ArtistSuggestion } from './types'; afterEach(() => vi.clearAllMocks()); describe('suggestions client', () => { test('listSuggestions hits the right URL with default limit', async () => { const fixture: ArtistSuggestion[] = [ { mbid: 'm1', name: 'Outsider', score: 1.5, attribution: [ { artist_id: 'a1', name: 'Seed', contribution: 0.9, is_liked: true, play_count: 0 } ] } ]; (api.get as ReturnType).mockResolvedValueOnce(fixture); const got = await listSuggestions(); expect(api.get).toHaveBeenCalledWith('/api/discover/suggestions?limit=12'); expect(got).toEqual(fixture); }); test('listSuggestions honors a custom limit', async () => { (api.get as ReturnType).mockResolvedValueOnce([]); await listSuggestions(20); expect(api.get).toHaveBeenCalledWith('/api/discover/suggestions?limit=20'); }); test('qk.suggestions key shape', () => { expect(qk.suggestions()).toEqual(['suggestions', { limit: 12 }]); expect(qk.suggestions(20)).toEqual(['suggestions', { limit: 20 }]); }); });