|
@@ -0,0 +1,119 @@
|
|
|
|
|
+"use strict";
|
|
|
|
|
+var assert = require("assert"),
|
|
|
|
|
+ SetUnionExpression = require("../../../../lib/pipeline/expressions/SetUnionExpression"),
|
|
|
|
|
+ Expression = require("../../../../lib/pipeline/expressions/Expression");
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+module.exports = {
|
|
|
|
|
+
|
|
|
|
|
+ "SetUnionExpression": {
|
|
|
|
|
+
|
|
|
|
|
+ "constructor()": {
|
|
|
|
|
+
|
|
|
|
|
+ "should throw Error when constructing without args": function testConstructor() {
|
|
|
|
|
+ assert.throws(function() {
|
|
|
|
|
+ new SetUnionExpression();
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ "#getOpName()": {
|
|
|
|
|
+
|
|
|
|
|
+ "should return the correct op name; $setunion": function testOpName() {
|
|
|
|
|
+ assert.equal(new SetUnionExpression([1, 2, 3], [4, 5, 6]).getOpName(), "$setunion");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ "#evaluateInternal()": {
|
|
|
|
|
+
|
|
|
|
|
+ "Should fail if array1 is not an array": function testArg1() {
|
|
|
|
|
+ var array1 = "not an array",
|
|
|
|
|
+ array2 = [6, 7, 8, 9];
|
|
|
|
|
+ assert.throws(function() {
|
|
|
|
|
+ Expression.parseOperand({
|
|
|
|
|
+ $setunion: ["$array1", "$array2"]
|
|
|
|
|
+ }).evaluateInternal({
|
|
|
|
|
+ array1: array1,
|
|
|
|
|
+ array2: array2
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ "Should fail if array2 is not an array": function testArg2() {
|
|
|
|
|
+ var array1 = [1, 2, 3, 4],
|
|
|
|
|
+ array2 = "not an array";
|
|
|
|
|
+ assert.throws(function() {
|
|
|
|
|
+ Expression.parseOperand({
|
|
|
|
|
+ $setunion: ["$array1", "$array2"]
|
|
|
|
|
+ }).evaluateInternal({
|
|
|
|
|
+ array1: array1,
|
|
|
|
|
+ array2: array2
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ "Should fail if both are not an array": function testArg1andArg2() {
|
|
|
|
|
+ var array1 = "not an array",
|
|
|
|
|
+ array2 = "not an array";
|
|
|
|
|
+ assert.throws(function() {
|
|
|
|
|
+ Expression.parseOperand({
|
|
|
|
|
+ $setunion: ["$array1", "$array2"]
|
|
|
|
|
+ }).evaluateInternal({
|
|
|
|
|
+ array1: array1,
|
|
|
|
|
+ array2: array2
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ "Should pass and return a unioned set1": function testBasicAssignment() {
|
|
|
|
|
+ var array1 = {
|
|
|
|
|
+ "a": "3",
|
|
|
|
|
+ "c": "4"
|
|
|
|
|
+ },
|
|
|
|
|
+ array2 = {
|
|
|
|
|
+ "a": "3",
|
|
|
|
|
+ "b": "3"
|
|
|
|
|
+ };
|
|
|
|
|
+ assert.strictEqual(Expression.parseOperand({
|
|
|
|
|
+ $setunion: ["$array1", "$array2"]
|
|
|
|
|
+ }).evaluateInternal({
|
|
|
|
|
+ array1: array1,
|
|
|
|
|
+ array2: array2
|
|
|
|
|
+ }), {
|
|
|
|
|
+ "a": "3",
|
|
|
|
|
+ "c": "4",
|
|
|
|
|
+ "b": "3"
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ "Should pass and return a unioned set": function testBasicAssignment() {
|
|
|
|
|
+ var array1 = [1, 2, 3, 4, 5],
|
|
|
|
|
+ array2 = [2, 3, 6, 7, 8];
|
|
|
|
|
+ assert.strictEqual(Expression.parseOperand({
|
|
|
|
|
+ $setunion: ["$array1", "$array2"]
|
|
|
|
|
+ }).evaluateInternal({
|
|
|
|
|
+ array1: array1,
|
|
|
|
|
+ array2: array2
|
|
|
|
|
+ }), [1, 2, 3, 4, 5, 6, 7, 8]);
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ "Should pass and return unioned set": function testBasicAssignment() {
|
|
|
|
|
+ var array1 = [1, 2, 3, 4, 5],
|
|
|
|
|
+ array2 = [7, 8, 9];
|
|
|
|
|
+ assert.strictEqual(Expression.parseOperand({
|
|
|
|
|
+ $setunion: ["$array1", "$array2"]
|
|
|
|
|
+ }).evaluateInternal({
|
|
|
|
|
+ array1: array1,
|
|
|
|
|
+ array2: array2
|
|
|
|
|
+ }), [1, 2, 3, 4, 5, 7, 8, 9]);
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);
|