diff --git a/js/util/validation.js b/js/util/validation.js index 9f8f7a9..e2e07bc 100644 --- a/js/util/validation.js +++ b/js/util/validation.js @@ -64,6 +64,26 @@ export const isIn = function(valueC, message = "Value must be one of: %{1}") { return validation; }; +export const isUpper = function(message = "Value contains lower cased characters") { + const validation = (value, ctx) => { + if (value === null) return true; + if (value === "") return true; + if (value === value.toUpperCase()) return true; + throw new ValidationError(message); + }; + return validation; +}; + +export const isLower = function(message = "Value contains upper cased characters") { + const validation = (value, ctx) => { + if (value === null) return true; + if (value === "") return true; + if (value === value.toLowerCase()) return true; + throw new ValidationError(message); + }; + return validation; +}; + export const isSimple = function(message = "Value contains invalid characters") { const validation = (value, ctx) => { if (value === null) return true; @@ -103,3 +123,30 @@ export const isRegex = function(regex, message = "Value has incorrect format") { }; return validation; }; + +export const stringGt = function(valueC, message = "Must be larger than %{1} characters") { + const validation = (value, ctx) => { + if (value === null) return true; + if (value.length > valueC) return true; + throw new ValidationError(message.replace("%{1}", String(valueC))); + }; + return validation; +}; + +export const stringLt = function(valueC, message = "Must be smaller than %{1} characters") { + const validation = (value, ctx) => { + if (value === null) return true; + if (value.length < valueC) return true; + throw new ValidationError(message.replace("%{1}", String(valueC))); + }; + return validation; +}; + +export const stringEq = function(valueC, message = "Must be exactly %{1} characters") { + const validation = (value, ctx) => { + if (value === null) return true; + if (value.length === valueC) return true; + throw new ValidationError(message.replace("%{1}", String(valueC))); + }; + return validation; +}; diff --git a/test/util/validation.js b/test/util/validation.js index 5169cfa..d18f64c 100644 --- a/test/util/validation.js +++ b/test/util/validation.js @@ -124,6 +124,54 @@ describe("#isIn()", function() { }); }); +describe("#isUpper()", function() { + it("should verify basic is simple conditions", () => { + let result; + + result = yonius.isUpper()("HELLO"); + assert.strictEqual(result, true); + + result = yonius.isUpper()("HELLO.WORLD"); + assert.strictEqual(result, true); + + result = yonius.isUpper()(null); + assert.strictEqual(result, true); + + assert.throws( + () => yonius.isUpper()("illegal!"), + err => { + assert.strictEqual(err instanceof yonius.ValidationError, true); + assert.strictEqual(err.message, "Value contains lower cased characters"); + return true; + } + ); + }); +}); + +describe("#isLower()", function() { + it("should verify basic is simple conditions", () => { + let result; + + result = yonius.isLower()("hello"); + assert.strictEqual(result, true); + + result = yonius.isLower()("hello.hello"); + assert.strictEqual(result, true); + + result = yonius.isLower()(null); + assert.strictEqual(result, true); + + assert.throws( + () => yonius.isLower()("ILLEGAL!"), + err => { + assert.strictEqual(err instanceof yonius.ValidationError, true); + assert.strictEqual(err.message, "Value contains upper cased characters"); + return true; + } + ); + }); +}); + describe("#isSimple()", function() { it("should verify basic is simple conditions", () => { let result; @@ -213,3 +261,72 @@ describe("#isRegex()", function() { ); }); }); + +describe("#stringGt()", function() { + it("should verify basic greater than operations", () => { + let result; + + result = yonius.stringGt(2)("xxx"); + assert.strictEqual(result, true); + + result = yonius.stringGt(4)("xxxxx"); + assert.strictEqual(result, true); + + result = yonius.stringGt(4)(null); + assert.strictEqual(result, true); + + assert.throws( + () => yonius.stringGt(4)("xxxx"), + err => { + assert.strictEqual(err instanceof yonius.ValidationError, true); + assert.strictEqual(err.message, "Must be larger than 4 characters"); + return true; + } + ); + }); +}); + +describe("#stringLt()", function() { + it("should verify basic greater than operations", () => { + let result; + + result = yonius.stringLt(2)("x"); + assert.strictEqual(result, true); + + result = yonius.stringLt(4)("xxx"); + assert.strictEqual(result, true); + + result = yonius.stringLt(4)(null); + assert.strictEqual(result, true); + + assert.throws( + () => yonius.stringLt(4)("xxxx"), + err => { + assert.strictEqual(err instanceof yonius.ValidationError, true); + assert.strictEqual(err.message, "Must be smaller than 4 characters"); + return true; + } + ); + }); +}); + +describe("#stringEq()", function() { + it("should verify basic greater than operations", () => { + let result; + + result = yonius.stringEq(2)("xx"); + assert.strictEqual(result, true); + + result = yonius.stringEq(4)(null); + assert.strictEqual(result, true); + + assert.throws( + () => yonius.stringEq(4)("xxx"), + err => { + assert.strictEqual(err instanceof yonius.ValidationError, true); + assert.strictEqual(err.message, "Must be exactly 4 characters"); + return true; + } + ); + }); +});