From d2e8e10f3a44c4d16a05082e293dd73aab8f6cac Mon Sep 17 00:00:00 2001 From: Federico Morreale Date: Thu, 5 Oct 2023 17:42:02 +0200 Subject: [PATCH] add tests Signed-off-by: Federico Morreale --- plugins/search-backend/src/service/router.test.ts | 15 ++++++++++++++- plugins/search-backend/src/service/router.ts | 10 +++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/plugins/search-backend/src/service/router.test.ts b/plugins/search-backend/src/service/router.test.ts index 7ec8603307..73523f2b62 100644 --- a/plugins/search-backend/src/service/router.test.ts +++ b/plugins/search-backend/src/service/router.test.ts @@ -60,7 +60,7 @@ describe('createRouter', () => { }, config: new ConfigReader({ permissions: { enabled: false }, - search: { maxPageLimit: 200 }, + search: { maxPageLimit: 200, maxTermLength: 20 }, }), permissions: mockPermissionEvaluator, logger, @@ -162,6 +162,19 @@ describe('createRouter', () => { }); }); + it('should reject term length over configured max', async () => { + const response = await request(app).get( + `/query?term=HelloWorld1234567890!`, + ); + + expect(response.status).toEqual(400); + expect(response.body).toMatchObject({ + error: { + message: /The term length "21" is greater than "20"/i, + }, + }); + }); + it('removes backend-only properties from search documents', async () => { mockSearchEngine.query.mockResolvedValue({ results: [ diff --git a/plugins/search-backend/src/service/router.ts b/plugins/search-backend/src/service/router.ts index 54ac49f724..876cb5d103 100644 --- a/plugins/search-backend/src/service/router.ts +++ b/plugins/search-backend/src/service/router.ts @@ -82,7 +82,15 @@ export async function createRouter( config.getOptionalNumber('search.maxTermLength') ?? defaultMaxTermLength; const requestSchema = z.object({ - term: z.string().max(maxTermLength).default(''), + term: z + .string() + .refine( + term => term.length <= maxTermLength, + term => ({ + message: `The term length "${term.length}" is greater than "${maxTermLength}"`, + }), + ) + .default(''), filters: jsonObjectSchema.optional(), types: z .array(z.string().refine(type => Object.keys(types).includes(type)))