68 lines
1.7 KiB
JavaScript
68 lines
1.7 KiB
JavaScript
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 } },
|
|
);
|
|
});
|
|
});
|