Files
minstrel/web/src/lib/api/queries.test.ts
T
bvandeusenandClaude Opus 4.7 b1f2227d62 feat(web): extend ArtistRef/AlbumRef + add HomePayload + new query keys
Adds sort_name/cover_url to ArtistRef, sort_title to AlbumRef (matching
backend Task 5 wire shape), HomePayload type, and qk.home/albumsAlpha/
artistTracks query keys. Updates existing test fixtures to satisfy the
new required fields.

Verified clean via 'npm run check' (0 errors, only pre-existing warnings).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 20:12:25 -04:00

41 lines
1.3 KiB
TypeScript

import { describe, expect, test } from 'vitest';
import { qk } from './queries';
describe('qk key generators', () => {
test('artists key includes sort discriminator', () => {
expect(qk.artists('alpha')).toEqual(['artists', { sort: 'alpha' }]);
expect(qk.artists('newest')).toEqual(['artists', { sort: 'newest' }]);
});
test('artist key tuple', () => {
expect(qk.artist('abc')).toEqual(['artist', 'abc']);
});
test('album key tuple', () => {
expect(qk.album('xyz')).toEqual(['album', 'xyz']);
});
});
describe('qk search keys', () => {
test('search summary key includes q', () => {
expect(qk.search('foo')).toEqual(['search', { q: 'foo' }]);
});
test('searchArtists key includes q', () => {
expect(qk.searchArtists('foo')).toEqual(['searchArtists', { q: 'foo' }]);
});
test('searchAlbums key includes q', () => {
expect(qk.searchAlbums('foo')).toEqual(['searchAlbums', { q: 'foo' }]);
});
test('searchTracks key includes q', () => {
expect(qk.searchTracks('foo')).toEqual(['searchTracks', { q: 'foo' }]);
});
});
describe('qk M6a keys', () => {
test('M6a query keys are stable', () => {
expect(qk.home()).toEqual(['home']);
expect(qk.albumsAlpha()).toEqual(['albumsAlpha']);
expect(qk.artistTracks('a1')).toEqual(['artistTracks', 'a1']);
});
});