SetUnionExpression.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. "use strict";
  2. var assert = require("assert"),
  3. SetUnionExpression = require("../../../../lib/pipeline/expressions/SetUnionExpression"),
  4. Expression = require("../../../../lib/pipeline/expressions/Expression");
  5. module.exports = {
  6. "SetUnionExpression": {
  7. "constructor()": {
  8. "should throw Error when constructing without args": function testConstructor() {
  9. assert.throws(function() {
  10. new SetUnionExpression();
  11. });
  12. }
  13. },
  14. "#getOpName()": {
  15. "should return the correct op name; $setunion": function testOpName() {
  16. assert.equal(new SetUnionExpression([1, 2, 3], [4, 5, 6]).getOpName(), "$setunion");
  17. }
  18. },
  19. "#evaluateInternal()": {
  20. "Should fail if array1 is not an array": function testArg1() {
  21. var array1 = "not an array",
  22. array2 = [6, 7, 8, 9];
  23. assert.throws(function() {
  24. Expression.parseOperand({
  25. $setunion: ["$array1", "$array2"]
  26. }).evaluateInternal({
  27. array1: array1,
  28. array2: array2
  29. });
  30. });
  31. },
  32. "Should fail if array2 is not an array": function testArg2() {
  33. var array1 = [1, 2, 3, 4],
  34. array2 = "not an array";
  35. assert.throws(function() {
  36. Expression.parseOperand({
  37. $setunion: ["$array1", "$array2"]
  38. }).evaluateInternal({
  39. array1: array1,
  40. array2: array2
  41. });
  42. });
  43. },
  44. "Should fail if both are not an array": function testArg1andArg2() {
  45. var array1 = "not an array",
  46. array2 = "not an array";
  47. assert.throws(function() {
  48. Expression.parseOperand({
  49. $setunion: ["$array1", "$array2"]
  50. }).evaluateInternal({
  51. array1: array1,
  52. array2: array2
  53. });
  54. });
  55. },
  56. "Should pass and return a unioned set1": function testBasicAssignment() {
  57. var array1 = {
  58. "a": "3",
  59. "c": "4"
  60. },
  61. array2 = {
  62. "a": "3",
  63. "b": "3"
  64. };
  65. assert.strictEqual(Expression.parseOperand({
  66. $setunion: ["$array1", "$array2"]
  67. }).evaluateInternal({
  68. array1: array1,
  69. array2: array2
  70. }), {
  71. "a": "3",
  72. "c": "4",
  73. "b": "3"
  74. });
  75. },
  76. "Should pass and return a unioned set": function testBasicAssignment() {
  77. var array1 = [1, 2, 3, 4, 5],
  78. array2 = [2, 3, 6, 7, 8];
  79. assert.strictEqual(Expression.parseOperand({
  80. $setunion: ["$array1", "$array2"]
  81. }).evaluateInternal({
  82. array1: array1,
  83. array2: array2
  84. }), [1, 2, 3, 4, 5, 6, 7, 8]);
  85. },
  86. "Should pass and return unioned set": function testBasicAssignment() {
  87. var array1 = [1, 2, 3, 4, 5],
  88. array2 = [7, 8, 9];
  89. assert.strictEqual(Expression.parseOperand({
  90. $setunion: ["$array1", "$array2"]
  91. }).evaluateInternal({
  92. array1: array1,
  93. array2: array2
  94. }), [1, 2, 3, 4, 5, 7, 8, 9]);
  95. },
  96. }
  97. }
  98. };
  99. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);