mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-04-03 22:37:20 +02:00
fix: paginate listRoles, null-guard permissions handler, fix export ordering
- Add limit/offset/total pagination to listRoles matching the groups pattern - Add countRoles data-layer method - Omit permissions from listRoles select (getRole returns full document) - Null-guard re-fetched role in updateRolePermissionsHandler - Move interleaved export below all imports in methods/index.ts
This commit is contained in:
parent
2a4cbfa41a
commit
2506644d58
5 changed files with 62 additions and 11 deletions
|
|
@ -58,6 +58,7 @@ function createReqRes(
|
|||
function createDeps(overrides: Partial<AdminRolesDeps> = {}): AdminRolesDeps {
|
||||
return {
|
||||
listRoles: jest.fn().mockResolvedValue([]),
|
||||
countRoles: jest.fn().mockResolvedValue(0),
|
||||
getRoleByName: jest.fn().mockResolvedValue(null),
|
||||
createRoleByName: jest.fn().mockResolvedValue(mockRole()),
|
||||
updateRoleByName: jest.fn().mockResolvedValue(mockRole()),
|
||||
|
|
@ -74,16 +75,46 @@ function createDeps(overrides: Partial<AdminRolesDeps> = {}): AdminRolesDeps {
|
|||
|
||||
describe('createAdminRolesHandlers', () => {
|
||||
describe('listRoles', () => {
|
||||
it('returns roles with 200', async () => {
|
||||
it('returns paginated roles with 200', async () => {
|
||||
const roles = [mockRole()];
|
||||
const deps = createDeps({ listRoles: jest.fn().mockResolvedValue(roles) });
|
||||
const deps = createDeps({
|
||||
listRoles: jest.fn().mockResolvedValue(roles),
|
||||
countRoles: jest.fn().mockResolvedValue(1),
|
||||
});
|
||||
const handlers = createAdminRolesHandlers(deps);
|
||||
const { req, res, status, json } = createReqRes();
|
||||
|
||||
await handlers.listRoles(req, res);
|
||||
|
||||
expect(status).toHaveBeenCalledWith(200);
|
||||
expect(json).toHaveBeenCalledWith({ roles });
|
||||
expect(json).toHaveBeenCalledWith({ roles, total: 1, limit: 50, offset: 0 });
|
||||
expect(deps.listRoles).toHaveBeenCalledWith({ limit: 50, offset: 0 });
|
||||
});
|
||||
|
||||
it('passes custom limit and offset from query', async () => {
|
||||
const deps = createDeps({
|
||||
countRoles: jest.fn().mockResolvedValue(100),
|
||||
});
|
||||
const handlers = createAdminRolesHandlers(deps);
|
||||
const { req, res, status, json } = createReqRes({
|
||||
query: { limit: '25', offset: '50' },
|
||||
});
|
||||
|
||||
await handlers.listRoles(req, res);
|
||||
|
||||
expect(status).toHaveBeenCalledWith(200);
|
||||
expect(json).toHaveBeenCalledWith({ roles: [], total: 100, limit: 25, offset: 50 });
|
||||
expect(deps.listRoles).toHaveBeenCalledWith({ limit: 25, offset: 50 });
|
||||
});
|
||||
|
||||
it('clamps limit to 200', async () => {
|
||||
const deps = createDeps();
|
||||
const handlers = createAdminRolesHandlers(deps);
|
||||
const { req, res } = createReqRes({ query: { limit: '999' } });
|
||||
|
||||
await handlers.listRoles(req, res);
|
||||
|
||||
expect(deps.listRoles).toHaveBeenCalledWith({ limit: 200, offset: 0 });
|
||||
});
|
||||
|
||||
it('returns 500 on error', async () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue