feat(search): allow max page limit to be configurable

Signed-off-by: Phil Kuang <pkuang@factset.com>
This commit is contained in:
Phil Kuang
2022-12-07 14:37:10 -05:00
parent 79536d9df1
commit bfd66b0478
5 changed files with 25 additions and 8 deletions
@@ -59,7 +59,10 @@ describe('createRouter', () => {
'first-type': {},
'second-type': {},
},
config: new ConfigReader({ permissions: { enabled: false } }),
config: new ConfigReader({
permissions: { enabled: false },
search: { maxPageLimit: 200 },
}),
permissions: mockPermissionEvaluator,
logger,
});
@@ -112,8 +115,8 @@ describe('createRouter', () => {
});
});
it('should accept per page value under or equal to 100', async () => {
const response = await request(app).get(`/query?pageLimit=30`);
it('should accept per page value under or equal to configured max', async () => {
const response = await request(app).get(`/query?pageLimit=200`);
expect(response.status).toEqual(200);
expect(response.body).toMatchObject({
@@ -121,13 +124,13 @@ describe('createRouter', () => {
});
});
it('should reject per page value over 100', async () => {
const response = await request(app).get(`/query?pageLimit=200`);
it('should reject per page value over configured max', async () => {
const response = await request(app).get(`/query?pageLimit=300`);
expect(response.status).toEqual(400);
expect(response.body).toMatchObject({
error: {
message: /The page limit "200" is greater than "100"/i,
message: /The page limit "300" is greater than "200"/i,
},
});
});
+4 -1
View File
@@ -62,7 +62,7 @@ export type RouterOptions = {
logger: Logger;
};
const maxPageLimit = 100;
const defaultMaxPageLimit = 100;
const allowedLocationProtocols = ['http:', 'https:'];
/**
@@ -73,6 +73,9 @@ export async function createRouter(
): Promise<express.Router> {
const { engine: inputEngine, types, permissions, config, logger } = options;
const maxPageLimit =
config.getOptionalNumber('search.maxPageLimit') ?? defaultMaxPageLimit;
const requestSchema = z.object({
term: z.string().default(''),
filters: jsonObjectSchema.optional(),