From 28fe1b243fa9de95ce6d6bef4a0b197a85d568ea Mon Sep 17 00:00:00 2001 From: ian Date: Mon, 11 Apr 2022 21:50:07 +0800 Subject: [PATCH] Cast to number for joi between (#12666) * Cast to number for joi between * Fix between range as inclusive * Update unit test --- packages/shared/src/utils/generate-joi.test.ts | 4 ++-- packages/shared/src/utils/generate-joi.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/shared/src/utils/generate-joi.test.ts b/packages/shared/src/utils/generate-joi.test.ts index 7e4eeeb89a..0b206e47a8 100644 --- a/packages/shared/src/utils/generate-joi.test.ts +++ b/packages/shared/src/utils/generate-joi.test.ts @@ -365,7 +365,7 @@ describe(`generateJoi`, () => { it(`returns the correct schema for an _between number match`, () => { const mockFieldFilter = { field: { _between: [1, 3] } } as FieldFilter; const mockSchema = Joi.object({ - field: Joi.number().greater(1).less(3), + field: Joi.number().min(1).max(3), }) .unknown() .describe(); @@ -375,7 +375,7 @@ describe(`generateJoi`, () => { it(`returns the correct schema for an _between date match`, () => { const mockFieldFilter = { field: { _between: [date, compareDate] } } as FieldFilter; const mockSchema = Joi.object({ - field: Joi.date().greater(date).less(compareDate), + field: Joi.date().min(date).max(compareDate), }) .unknown() .describe(); diff --git a/packages/shared/src/utils/generate-joi.ts b/packages/shared/src/utils/generate-joi.ts index d83ceef98c..b74cb9384e 100644 --- a/packages/shared/src/utils/generate-joi.ts +++ b/packages/shared/src/utils/generate-joi.ts @@ -217,17 +217,17 @@ export function generateJoi(filter: FieldFilter, options?: JoiOptions): AnySchem if (operator === '_between') { if (compareValue.every((value: any) => Number.isSafeInteger(Number(value instanceof Date ? NaN : value)))) { const values = compareValue as [number, number]; - schema[key] = getNumberSchema().greater(values[0]).less(values[1]); + schema[key] = getNumberSchema().min(Number(values[0])).max(Number(values[1])); } else { const values = compareValue as [string, string]; - schema[key] = getDateSchema().greater(values[0]).less(values[1]); + schema[key] = getDateSchema().min(values[0]).max(values[1]); } } if (operator === '_nbetween') { if (compareValue.every((value: any) => Number.isSafeInteger(Number(value instanceof Date ? NaN : value)))) { const values = compareValue as [number, number]; - schema[key] = getNumberSchema().less(values[0]).greater(values[1]); + schema[key] = getNumberSchema().less(Number(values[0])).greater(Number(values[1])); } else { const values = compareValue as [string, string]; schema[key] = getDateSchema().less(values[0]).greater(values[1]);