From 7d40d7228117af9d2f0b81fac37fd86798ea0579 Mon Sep 17 00:00:00 2001 From: HelderSepu Date: Sun, 24 Sep 2017 11:43:47 -0400 Subject: [PATCH 1/3] Add validateMaximum & validateMinimum This address some of the validation requested on Issue #993 --- src/core/utils.js | 24 ++++++++++++++++++++++++ test/core/utils.js | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/core/utils.js b/src/core/utils.js index ac633c34ce1..305a5f69908 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -470,6 +470,18 @@ export const propChecker = (props, nextProps, objectList=[], ignoreList=[]) => { || objectList.some( objectPropName => !eq(props[objectPropName], nextProps[objectPropName]))) } +export const validateMaximum = ( val, max ) => { + if (val > max) { + return "Value must be less than Maximum" + } +} + +export const validateMinimum = ( val, min ) => { + if (val < min) { + return "Value must be greater than Minimum" + } +} + export const validateNumber = ( val ) => { if (!/^-?\d+(\.?\d+)?$/.test(val)) { return "Value must be a number" @@ -517,6 +529,8 @@ export const validateParam = (param, isXml) => { let errors = [] let value = isXml && param.get("in") === "body" ? param.get("value_xml") : param.get("value") let required = param.get("required") + let maximum = param.get("maximum") + let minimum = param.get("minimum") let type = param.get("type") let format = param.get("format") @@ -539,6 +553,16 @@ export const validateParam = (param, isXml) => { errors.push("Required field is not provided") return errors } + + if (maximum) { + let err = validateMaximum(value, maximum) + if (err) errors.push(err) + } + + if (minimum) { + let err = validateMinimum(value, minimum) + if (err) errors.push(err) + } if ( type === "string" ) { let err diff --git a/test/core/utils.js b/test/core/utils.js index dfe5c1ee62e..4740e35d72c 100644 --- a/test/core/utils.js +++ b/test/core/utils.js @@ -2,6 +2,7 @@ import expect from "expect" import { fromJS, OrderedMap } from "immutable" import { mapToList, validateDateTime, validateGuid, validateNumber, validateInteger, validateParam, validateFile, fromJSOrdered, getAcceptControllingResponse, createDeepLinkPath, escapeDeepLinkPath } from "core/utils" +import { validateMaximum, validateMinimum } from "core/utils" import win from "core/window" describe("utils", function() { @@ -72,6 +73,34 @@ describe("utils", function() { }) + describe("validateMaximum", function() { + let errorMessage = "Value must be less than Maximum" + + it("doesn't return for valid input", function() { + expect(validateMaximum(9, 10)).toBeFalsy() + expect(validateMaximum(19, 20)).toBeFalsy() + }) + + it("returns a message for invalid input", function() { + expect(validateMaximum(10, 9)).toEqual(errorMessage) + expect(validateMaximum(20, 19)).toEqual(errorMessage) + }) + }) + + describe("validateMinimum", function() { + let errorMessage = "Value must be greater than Minimum" + + it("doesn't return for valid input", function() { + expect(validateMinimum(2, 1)).toBeFalsy() + expect(validateMinimum(20, 10)).toBeFalsy() + }) + + it("returns a message for invalid input", function() { + expect(validateMinimum(1, 2)).toEqual(errorMessage) + expect(validateMinimum(10, 20)).toEqual(errorMessage) + }) + }) + describe("validateNumber", function() { let errorMessage = "Value must be a number" @@ -485,11 +514,13 @@ describe("utils", function() { result = validateParam( param, false ) expect( result ).toEqual( ["Required field is not provided"] ) - // valid number + // valid number with min and max param = fromJS({ required: true, type: "number", - value: 10 + value: 10, + minimum: 5, + maximum: 99 }) result = validateParam( param, false ) expect( result ).toEqual( [] ) From 515726b3865aa8574d3950b7e4b80a8cc937a69f Mon Sep 17 00:00:00 2001 From: HelderSepu Date: Sun, 24 Sep 2017 15:45:42 -0400 Subject: [PATCH 2/3] Add test for negative num Testing valid negative number with min and max --- test/core/utils.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/core/utils.js b/test/core/utils.js index 4740e35d72c..2056fb290d3 100644 --- a/test/core/utils.js +++ b/test/core/utils.js @@ -524,6 +524,17 @@ describe("utils", function() { }) result = validateParam( param, false ) expect( result ).toEqual( [] ) + + // valid negative number with min and max + param = fromJS({ + required: true, + type: "number", + value: -10, + minimum: -50, + maximum: -5 + }) + result = validateParam( param, false ) + expect( result ).toEqual( [] ) }) it("validates optional numbers", function() { From 012313e236e4f35254ed297cf50d8137119b8a28 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Thu, 28 Sep 2017 17:59:07 -0700 Subject: [PATCH 3/3] Handle cases where maximum and minimum are 0 --- src/core/utils.js | 6 +++--- test/core/utils.js | 34 ++++++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/core/utils.js b/src/core/utils.js index edd7bc8112e..8cd8eff6a5a 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -577,13 +577,13 @@ export const validateParam = (param, isXml) => { errors.push("Required field is not provided") return errors } - - if (maximum) { + + if (maximum || maximum === 0) { let err = validateMaximum(value, maximum) if (err) errors.push(err) } - if (minimum) { + if (minimum || minimum === 0) { let err = validateMinimum(value, minimum) if (err) errors.push(err) } diff --git a/test/core/utils.js b/test/core/utils.js index 65aeb9f6c94..e506ef2949f 100644 --- a/test/core/utils.js +++ b/test/core/utils.js @@ -1,7 +1,7 @@ /* eslint-env mocha */ import expect from "expect" import { fromJS, OrderedMap } from "immutable" -import { +import { mapToList, validateMinLength, validateMaxLength, @@ -11,7 +11,7 @@ import { validateInteger, validateParam, validateFile, - validateMaximum, + validateMaximum, validateMinimum, fromJSOrdered, getAcceptControllingResponse, @@ -97,11 +97,12 @@ describe("utils", function() { }) it("returns a message for invalid input", function() { + expect(validateMaximum(1, 0)).toEqual(errorMessage) expect(validateMaximum(10, 9)).toEqual(errorMessage) expect(validateMaximum(20, 19)).toEqual(errorMessage) }) }) - + describe("validateMinimum", function() { let errorMessage = "Value must be greater than Minimum" @@ -111,6 +112,7 @@ describe("utils", function() { }) it("returns a message for invalid input", function() { + expect(validateMinimum(-1, 0)).toEqual(errorMessage) expect(validateMinimum(1, 2)).toEqual(errorMessage) expect(validateMinimum(10, 20)).toEqual(errorMessage) }) @@ -316,7 +318,7 @@ describe("utils", function() { result = validateParam( param, false ) expect( result ).toEqual( [] ) }) - + it("validates required strings with min and max length", function() { // invalid string with max length param = fromJS({ @@ -606,7 +608,7 @@ describe("utils", function() { param = fromJS({ required: true, type: "number", - value: 10, + value: 10, minimum: 5, maximum: 99 }) @@ -617,12 +619,32 @@ describe("utils", function() { param = fromJS({ required: true, type: "number", - value: -10, + value: -10, minimum: -50, maximum: -5 }) result = validateParam( param, false ) expect( result ).toEqual( [] ) + + // invalid number with maximum:0 + param = fromJS({ + required: true, + type: "number", + value: 1, + maximum: 0 + }) + result = validateParam( param, false ) + expect( result ).toEqual( ["Value must be less than Maximum"] ) + + // invalid number with minimum:0 + param = fromJS({ + required: true, + type: "number", + value: -10, + minimum: 0 + }) + result = validateParam( param, false ) + expect( result ).toEqual( ["Value must be greater than Minimum"] ) }) it("validates optional numbers", function() {