import { beforeEach, describe, expect, it, vi } from 'vitest'; const apiRequestMock = vi.fn(); vi.mock('../../src/api/client.js', () => ({ getPath(key) { const paths = { categories: 'kitchen/categories', }; return paths[key]; }, apiRequest: (...args) => apiRequestMock(...args), })); const { listCategories } = await import('../../src/api/categories.js'); describe('api/categories', () => { beforeEach(() => { apiRequestMock.mockReset(); }); it('forwards explicit pagination and filters', async () => { apiRequestMock.mockResolvedValueOnce([]); await listCategories( { config: { database: 'db' } }, { searchName: 'dairy', active: true, limit: 10, offset: 20, orderBy: 'name', orderDir: 'asc' }, ); expect(apiRequestMock).toHaveBeenCalledWith( { config: { database: 'db' } }, 'kitchen/categories', { query: { search_name: 'dairy', active: true, order_by: 'name', order_dir: 'asc', limit: 10, offset: 20, }, }, ); }); it('aggregates category pages by default', async () => { apiRequestMock .mockResolvedValueOnce(Array.from({ length: 100 }, (_, id) => ({ id: id + 1 }))) .mockResolvedValueOnce([{ id: 101 }]); const response = await listCategories({ config: { database: 'db' } }, {}); expect(response).toHaveLength(101); expect(apiRequestMock).toHaveBeenNthCalledWith( 1, { config: { database: 'db' } }, 'kitchen/categories', { query: { limit: 100, offset: 0 } }, ); expect(apiRequestMock).toHaveBeenNthCalledWith( 2, { config: { database: 'db' } }, 'kitchen/categories', { query: { limit: 100, offset: 100 } }, ); }); });