import { describe, expect, it, } from 'vitest'; import { fontKeys } from './queryKeys'; describe('fontKeys', () => { describe('Hierarchy', () => { it('should generate base keys', () => { expect(fontKeys.all).toEqual(['fonts']); expect(fontKeys.lists()).toEqual(['fonts', 'list']); expect(fontKeys.batches()).toEqual(['fonts', 'batch']); expect(fontKeys.details()).toEqual(['fonts', 'detail']); }); }); describe('Batch Keys (Stability & Sorting)', () => { it('should sort IDs for stable serialization', () => { const key1 = fontKeys.batch(['b', 'a', 'c']); const key2 = fontKeys.batch(['c', 'b', 'a']); const expected = ['fonts', 'batch', ['a', 'b', 'c']]; expect(key1).toEqual(expected); expect(key2).toEqual(expected); }); it('should handle empty ID arrays', () => { expect(fontKeys.batch([])).toEqual(['fonts', 'batch', []]); }); it('should not mutate the input array when sorting', () => { const ids = ['c', 'b', 'a']; fontKeys.batch(ids); expect(ids).toEqual(['c', 'b', 'a']); }); it('batch key should be rooted in batches() base', () => { const key = fontKeys.batch(['a']); expect(key.slice(0, 2)).toEqual(fontKeys.batches()); }); }); describe('List Keys (Parameters)', () => { it('should include parameters in list keys', () => { const params = { provider: 'google' }; expect(fontKeys.list(params)).toEqual(['fonts', 'list', params]); }); it('should handle empty parameters', () => { expect(fontKeys.list({})).toEqual(['fonts', 'list', {}]); }); it('list key should be rooted in lists() base', () => { const key = fontKeys.list({ provider: 'google' }); expect(key.slice(0, 2)).toEqual(fontKeys.lists()); }); }); describe('Detail Keys', () => { it('should generate unique detail keys per ID', () => { expect(fontKeys.detail('roboto')).toEqual(['fonts', 'detail', 'roboto']); }); it('should generate different keys for different IDs', () => { expect(fontKeys.detail('roboto')).not.toEqual(fontKeys.detail('open-sans')); }); it('detail key should be rooted in details() base', () => { const key = fontKeys.detail('roboto'); expect(key.slice(0, 2)).toEqual(fontKeys.details()); }); }); });