Add category management: list API, UI integration, and search updates
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
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 } },
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user