AddToSetAccumulator.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. var assert = require("assert"),
  2. AddToSetAccumulator = require("../../../../lib/pipeline/accumulators/AddToSetAccumulator"),
  3. ConstantExpression = require("../../../../lib/pipeline/expressions/ConstantExpression"),
  4. FieldPathExpression = require("../../../../lib/pipeline/expressions/FieldPathExpression");
  5. var createAccumulator = function createAccumulator() {
  6. var myAccumulator = new AddToSetAccumulator();
  7. myAccumulator.addOperand(new FieldPathExpression("b") );
  8. return myAccumulator;
  9. };
  10. //TODO: refactor these test cases using Expression.parseOperand() or something because these could be a whole lot cleaner...
  11. module.exports = {
  12. "AddToSetAccumulator": {
  13. "constructor()": {
  14. "should error if called with args": function testArgsGivenToCtor() {
  15. assert.throws(function() {
  16. var acc = new AddToSetAccumulator('arg');
  17. });
  18. },
  19. "should construct object with set property": function testCtorAssignsSet() {
  20. var acc = new AddToSetAccumulator();
  21. assert.notEqual(acc.set, null);
  22. assert.notEqual(acc.set, undefined);
  23. }
  24. },
  25. "#evaluate()" : {
  26. "should error if evaluate is called with no args": function testNoArgs() {
  27. assert.throws(function() {
  28. var acc = new createAccumulator();
  29. acc.evaluate();
  30. });
  31. },
  32. "should error if evaluate is called with more than one arg": function testTooManyArgs() {
  33. assert.throws(function() {
  34. var acc = new createAccumulator();
  35. acc.evaluate({}, {});
  36. });
  37. },
  38. "should throw an error when given a non-array to evaluate": function testArrayValidity() {
  39. assert.throws(function() {
  40. var acc = createAccumulator();
  41. acc.evaluate({b:5});
  42. });
  43. }
  44. },
  45. "#getValue()": {
  46. "should return empty array": function testEmptySet() {
  47. var acc = new createAccumulator();
  48. var value = acc.getValue();
  49. assert.equal((value instanceof Array), true);
  50. assert.equal(value.length, 0);
  51. },
  52. "should return array with one element that equals 5": function test5InSet() {
  53. var acc = createAccumulator();
  54. acc.evaluate({b:[5]});
  55. var value = acc.getValue();
  56. assert.equal((value instanceof Array), true);
  57. assert.equal(value.length, 1);
  58. assert.equal(value[0], 5);
  59. },
  60. "should produce value that is an array of multiple elements": function testMultipleItems() {
  61. var acc = createAccumulator();
  62. acc.evaluate({b:[5, {key: "value"}]});
  63. var value = acc.getValue();
  64. assert.equal((value instanceof Array), true);
  65. assert.equal(value.length, 2);
  66. assert.equal((value[0] instanceof Object || value[1] instanceof Object) && (typeof value[0] == 'number' || typeof value[1] == 'number'), true);
  67. //assert.equal(value[0], 5);
  68. },
  69. "should return array with one element that is an object containing a key/value pair": function testKeyValue() {
  70. var acc = createAccumulator();
  71. acc.evaluate({b:[{key: "value"}]});
  72. var value = acc.getValue();
  73. assert.equal((value instanceof Object), true);
  74. assert.equal(value.length, 1);
  75. assert.equal(value[0].key == "value", true);
  76. }
  77. }
  78. }
  79. };
  80. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);