From 21178e91073d708d43c5833a02518421ee578528 Mon Sep 17 00:00:00 2001 From: HelderSepu Date: Sat, 21 Oct 2017 13:04:21 -0400 Subject: [PATCH 1/6] Remove describe.only --- test/core/plugins/oas3/wrap-auth-selectors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/core/plugins/oas3/wrap-auth-selectors.js b/test/core/plugins/oas3/wrap-auth-selectors.js index 1687d767..5c94417f 100644 --- a/test/core/plugins/oas3/wrap-auth-selectors.js +++ b/test/core/plugins/oas3/wrap-auth-selectors.js @@ -5,7 +5,7 @@ import { definitionsToAuthorize } from "corePlugins/oas3/auth-extensions/wrap-selectors" -describe.only("oas3 plugin - auth extensions - wrapSelectors", function(){ +describe("oas3 plugin - auth extensions - wrapSelectors", function(){ describe("execute", function(){ From ac24f4376bb9444ba40f8719fe0be9477dcedb5e Mon Sep 17 00:00:00 2001 From: HelderSepu Date: Sat, 21 Oct 2017 13:04:53 -0400 Subject: [PATCH 2/6] Add validatePattern & UnitTest --- src/core/utils.js | 14 ++++++++++++++ test/core/utils.js | 32 ++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/core/utils.js b/src/core/utils.js index 0f247b52..e6af2862 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -536,6 +536,13 @@ export const validateMinLength = (val, min) => { } } +export const validatePattern = (val, rxPattern) => { + var patt = new RegExp(rxPattern); + if (!patt.test(val)) { + return "Value must follow pattern " + rxPattern + } +} + // validation of parameters before execute export const validateParam = (param, isXml, isOAS3 = false) => { let errors = [] @@ -549,6 +556,8 @@ export const validateParam = (param, isXml, isOAS3 = false) => { let format = paramDetails.get("format") let maxLength = paramDetails.get("maxLength") let minLength = paramDetails.get("minLength") + let pattern = paramDetails.get("pattern") + /* If the parameter is required OR the parameter has a value (meaning optional, but filled in) @@ -565,6 +574,11 @@ export const validateParam = (param, isXml, isOAS3 = false) => { let numberCheck = type === "number" && !validateNumber(value) // validateNumber returns undefined if the value is a number let integerCheck = type === "integer" && !validateInteger(value) // validateInteger returns undefined if the value is an integer + if (pattern) { + let err = validatePattern(value, pattern) + if (err) errors.push(err) + } + if (maxLength || maxLength === 0) { let err = validateMaxLength(value, maxLength) if (err) errors.push(err) diff --git a/test/core/utils.js b/test/core/utils.js index dd37a518..19705b66 100644 --- a/test/core/utils.js +++ b/test/core/utils.js @@ -3,6 +3,7 @@ import expect from "expect" import { fromJS, OrderedMap } from "immutable" import { mapToList, + validatePattern, validateMinLength, validateMaxLength, validateDateTime, @@ -215,9 +216,9 @@ describe("utils", function() { expect(validateFile(1)).toEqual(errorMessage) expect(validateFile("string")).toEqual(errorMessage) }) - }) + }) - describe("validateDateTime", function() { + describe("validateDateTime", function() { let errorMessage = "Value must be a DateTime" it("doesn't return for valid dates", function() { @@ -228,7 +229,7 @@ describe("utils", function() { expect(validateDateTime(null)).toEqual(errorMessage) expect(validateDateTime("string")).toEqual(errorMessage) }) - }) + }) describe("validateGuid", function() { let errorMessage = "Value must be a Guid" @@ -242,9 +243,9 @@ describe("utils", function() { expect(validateGuid(1)).toEqual(errorMessage) expect(validateGuid("string")).toEqual(errorMessage) }) - }) + }) - describe("validateMaxLength", function() { + describe("validateMaxLength", function() { let errorMessage = "Value must be less than MaxLength" it("doesn't return for valid guid", function() { @@ -257,9 +258,9 @@ describe("utils", function() { expect(validateMaxLength("abc", 1)).toEqual(errorMessage) expect(validateMaxLength("abc", 2)).toEqual(errorMessage) }) - }) + }) - describe("validateMinLength", function() { + describe("validateMinLength", function() { let errorMessage = "Value must be greater than MinLength" it("doesn't return for valid guid", function() { @@ -271,7 +272,22 @@ describe("utils", function() { expect(validateMinLength("abc", 5)).toEqual(errorMessage) expect(validateMinLength("abc", 8)).toEqual(errorMessage) }) - }) + }) + + describe("validatePattern", function() { + let rxPattern = "^(red|blue)" + let errorMessage = "Value must follow pattern " + rxPattern + + it("doesn't return for a match", function() { + expect(validatePattern("red", rxPattern)).toBeFalsy() + expect(validatePattern("blue", rxPattern)).toBeFalsy() + }) + + it("returns a message for invalid pattern'", function() { + expect(validatePattern("pink", rxPattern)).toEqual(errorMessage) + expect(validatePattern("123", rxPattern)).toEqual(errorMessage) + }) + }) describe("validateParam", function() { let param = null From efa468bac528702b5c885401c19912bda9bf381f Mon Sep 17 00:00:00 2001 From: HelderSepu Date: Sat, 21 Oct 2017 13:20:48 -0400 Subject: [PATCH 3/6] remove semicolon --- src/core/utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/utils.js b/src/core/utils.js index e6af2862..435f4cb0 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -537,7 +537,7 @@ export const validateMinLength = (val, min) => { } export const validatePattern = (val, rxPattern) => { - var patt = new RegExp(rxPattern); + var patt = new RegExp(rxPattern) if (!patt.test(val)) { return "Value must follow pattern " + rxPattern } From 87d11f99dd7875f4913e20efa12337bd8b9c4502 Mon Sep 17 00:00:00 2001 From: HelderSepu Date: Tue, 24 Oct 2017 17:49:46 -0400 Subject: [PATCH 4/6] Add objectCheck Squeeze fix for required object on this PR --- src/core/utils.js | 3 ++- test/core/utils.js | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/core/utils.js b/src/core/utils.js index 435f4cb0..c88a7f66 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -568,6 +568,7 @@ export const validateParam = (param, isXml, isOAS3 = false) => { // These checks should evaluate to true if the parameter's value is valid let stringCheck = type === "string" && value && !validateString(value) let arrayCheck = type === "array" && Array.isArray(value) && value.length + let objectCheck = type === "object" && value.length let listCheck = type === "array" && Im.List.isList(value) && value.count() let fileCheck = type === "file" && value instanceof win.File let booleanCheck = type === "boolean" && !validateBoolean(value) @@ -589,7 +590,7 @@ export const validateParam = (param, isXml, isOAS3 = false) => { if (err) errors.push(err) } - if ( required && !(stringCheck || arrayCheck || listCheck || fileCheck || booleanCheck || numberCheck || integerCheck) ) { + if ( required && !(stringCheck || objectCheck || arrayCheck || listCheck || fileCheck || booleanCheck || numberCheck || integerCheck) ) { errors.push("Required field is not provided") return errors } diff --git a/test/core/utils.js b/test/core/utils.js index 19705b66..8f28612a 100644 --- a/test/core/utils.js +++ b/test/core/utils.js @@ -326,6 +326,24 @@ describe("utils", function() { expect( result ).toEqual( [] ) }) + it("validates required objects", function() { + // invalid object + param = { + required: true, + type: "object", + value: "" + } + assertValidateParam(param, ["Required field is not provided"]) + + // valid object + param = { + required: true, + type: "object", + value: "test" + } + assertValidateParam(param, []) + }) + it("validates required strings", function() { // invalid string param = { From 43c5d9a8c98aaa3a5b5ca79f8ca4c3b204d79f53 Mon Sep 17 00:00:00 2001 From: HelderSepu Date: Tue, 24 Oct 2017 18:35:28 -0400 Subject: [PATCH 5/6] Revert "Add objectCheck" This reverts commit 87d11f99dd7875f4913e20efa12337bd8b9c4502. --- src/core/utils.js | 3 +-- test/core/utils.js | 18 ------------------ 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/src/core/utils.js b/src/core/utils.js index c88a7f66..435f4cb0 100644 --- a/src/core/utils.js +++ b/src/core/utils.js @@ -568,7 +568,6 @@ export const validateParam = (param, isXml, isOAS3 = false) => { // These checks should evaluate to true if the parameter's value is valid let stringCheck = type === "string" && value && !validateString(value) let arrayCheck = type === "array" && Array.isArray(value) && value.length - let objectCheck = type === "object" && value.length let listCheck = type === "array" && Im.List.isList(value) && value.count() let fileCheck = type === "file" && value instanceof win.File let booleanCheck = type === "boolean" && !validateBoolean(value) @@ -590,7 +589,7 @@ export const validateParam = (param, isXml, isOAS3 = false) => { if (err) errors.push(err) } - if ( required && !(stringCheck || objectCheck || arrayCheck || listCheck || fileCheck || booleanCheck || numberCheck || integerCheck) ) { + if ( required && !(stringCheck || arrayCheck || listCheck || fileCheck || booleanCheck || numberCheck || integerCheck) ) { errors.push("Required field is not provided") return errors } diff --git a/test/core/utils.js b/test/core/utils.js index 8f28612a..19705b66 100644 --- a/test/core/utils.js +++ b/test/core/utils.js @@ -326,24 +326,6 @@ describe("utils", function() { expect( result ).toEqual( [] ) }) - it("validates required objects", function() { - // invalid object - param = { - required: true, - type: "object", - value: "" - } - assertValidateParam(param, ["Required field is not provided"]) - - // valid object - param = { - required: true, - type: "object", - value: "test" - } - assertValidateParam(param, []) - }) - it("validates required strings", function() { // invalid string param = { From 390f4b17b13bcb3c3343deef26e2458b1c930e3c Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Fri, 3 Nov 2017 17:11:39 -0700 Subject: [PATCH 6/6] Add graceful failure test --- test/core/utils.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/test/core/utils.js b/test/core/utils.js index d6393746..dcfbeea6 100644 --- a/test/core/utils.js +++ b/test/core/utils.js @@ -284,10 +284,17 @@ describe("utils", function() { expect(validatePattern("blue", rxPattern)).toBeFalsy() }) - it("returns a message for invalid pattern'", function() { + it("returns a message for invalid pattern", function() { expect(validatePattern("pink", rxPattern)).toEqual(errorMessage) expect(validatePattern("123", rxPattern)).toEqual(errorMessage) }) + + it("fails gracefully when an invalid regex value is passed", function() { + expect(() => validatePattern("aValue", "---")).toNotThrow() + expect(() => validatePattern("aValue", 1234)).toNotThrow() + expect(() => validatePattern("aValue", null)).toNotThrow() + expect(() => validatePattern("aValue", [])).toNotThrow() + }) }) describe("validateParam", function() {