--- /dev/null
+/**
+ * @filedescription Merge Strategy Tests
+ */
+/* global it, describe, beforeEach */
+
+"use strict";
+
+//-----------------------------------------------------------------------------
+// Requirements
+//-----------------------------------------------------------------------------
+
+const assert = require("chai").assert;
+const { ValidationStrategy } = require("../src/");
+
+//-----------------------------------------------------------------------------
+// Class
+//-----------------------------------------------------------------------------
+
+describe("ValidationStrategy", () => {
+
+ describe("boolean", () => {
+ it("should not throw an error when the value is a boolean", () => {
+ ValidationStrategy.boolean(true);
+ });
+
+ it("should throw an error when the value is null", () => {
+ assert.throws(() => {
+ ValidationStrategy.boolean(null);
+ }, /Expected a Boolean/);
+ });
+
+ it("should throw an error when the value is a string", () => {
+ assert.throws(() => {
+ ValidationStrategy.boolean("foo");
+ }, /Expected a Boolean/);
+ });
+
+ it("should throw an error when the value is a number", () => {
+ assert.throws(() => {
+ ValidationStrategy.boolean(123);
+ }, /Expected a Boolean/);
+ });
+
+ it("should throw an error when the value is an object", () => {
+ assert.throws(() => {
+ ValidationStrategy.boolean({});
+ }, /Expected a Boolean/);
+ });
+ });
+
+ describe("number", () => {
+ it("should not throw an error when the value is a number", () => {
+ ValidationStrategy.number(25);
+ });
+
+ it("should throw an error when the value is null", () => {
+ assert.throws(() => {
+ ValidationStrategy.number(null);
+ }, /Expected a number/);
+ });
+
+ it("should throw an error when the value is a string", () => {
+ assert.throws(() => {
+ ValidationStrategy.number("foo");
+ }, /Expected a number/);
+ });
+
+ it("should throw an error when the value is a boolean", () => {
+ assert.throws(() => {
+ ValidationStrategy.number(true);
+ }, /Expected a number/);
+ });
+
+ it("should throw an error when the value is an object", () => {
+ assert.throws(() => {
+ ValidationStrategy.number({});
+ }, /Expected a number/);
+ });
+ });
+
+ describe("object", () => {
+ it("should not throw an error when the value is an object", () => {
+ ValidationStrategy.object({});
+ });
+
+ it("should throw an error when the value is null", () => {
+ assert.throws(() => {
+ ValidationStrategy.object(null);
+ }, /Expected an object/);
+ });
+
+ it("should throw an error when the value is a string", () => {
+ assert.throws(() => {
+ ValidationStrategy.object("");
+ }, /Expected an object/);
+ });
+ });
+
+ describe("array", () => {
+ it("should not throw an error when the value is an array", () => {
+ ValidationStrategy.array([]);
+ });
+
+ it("should throw an error when the value is null", () => {
+ assert.throws(() => {
+ ValidationStrategy.array(null);
+ }, /Expected an array/);
+ });
+
+ it("should throw an error when the value is a string", () => {
+ assert.throws(() => {
+ ValidationStrategy.array("");
+ }, /Expected an array/);
+ });
+
+ it("should throw an error when the value is an object", () => {
+ assert.throws(() => {
+ ValidationStrategy.array({});
+ }, /Expected an array/);
+ });
+ });
+
+ describe("object?", () => {
+ it("should not throw an error when the value is an object", () => {
+ ValidationStrategy["object?"]({});
+ });
+
+ it("should not throw an error when the value is null", () => {
+ ValidationStrategy["object?"](null);
+ });
+
+ it("should throw an error when the value is a string", () => {
+ assert.throws(() => {
+ ValidationStrategy["object?"]("");
+ }, /Expected an object/);
+ });
+ });
+
+ describe("string", () => {
+ it("should not throw an error when the value is a string", () => {
+ ValidationStrategy.string("foo");
+ });
+
+ it("should not throw an error when the value is an empty string", () => {
+ ValidationStrategy.string("");
+ });
+
+ it("should throw an error when the value is null", () => {
+ assert.throws(() => {
+ ValidationStrategy.string(null);
+ }, /Expected a string/);
+ });
+
+ it("should throw an error when the value is an object", () => {
+ assert.throws(() => {
+ ValidationStrategy.string({});
+ }, /Expected a string/);
+ });
+ });
+
+ describe("string!", () => {
+ it("should not throw an error when the value is an string", () => {
+ ValidationStrategy["string!"]("foo");
+ });
+
+ it("should throw an error when the value is an empty string", () => {
+ assert.throws(() => {
+ ValidationStrategy["string!"]("");
+ }, /Expected a non-empty string/);
+ });
+
+ it("should throw an error when the value is null", () => {
+ assert.throws(() => {
+ ValidationStrategy["string!"](null);
+ }, /Expected a non-empty string/);
+ });
+
+ it("should throw an error when the value is an object", () => {
+ assert.throws(() => {
+ ValidationStrategy["string!"]({});
+ }, /Expected a non-empty string/);
+ });
+ });
+
+
+});