AddToSetAccumulator.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. },
  39. "#getValue()": {
  40. "should return empty array": function testEmptySet() {
  41. var acc = new createAccumulator();
  42. var value = acc.getValue();
  43. assert.equal((value instanceof Array), true);
  44. assert.equal(value.length, 0);
  45. },
  46. "should return array with one element that equals 5": function test5InSet() {
  47. var acc = createAccumulator();
  48. acc.evaluate({b:5});
  49. acc.evaluate({b:5});
  50. var value = acc.getValue();
  51. assert.deepEqual(value, [5]);
  52. },
  53. "should produce value that is an array of multiple elements": function testMultipleItems() {
  54. var acc = createAccumulator();
  55. acc.evaluate({b:5});
  56. acc.evaluate({b:{key: "value"}});
  57. var value = acc.getValue();
  58. assert.deepEqual(value, [5, {key: "value"}]);
  59. },
  60. "should return array with one element that is an object containing a key/value pair": function testKeyValue() {
  61. var acc = createAccumulator();
  62. acc.evaluate({b:{key: "value"}});
  63. var value = acc.getValue();
  64. assert.deepEqual(value, [{key: "value"}]);
  65. },
  66. "should ignore undefined values": function testKeyValue() {
  67. var acc = createAccumulator();
  68. acc.evaluate({b:{key: "value"}});
  69. acc.evaluate({a:5});
  70. var value = acc.getValue();
  71. assert.deepEqual(value, [{key: "value"}]);
  72. }
  73. }
  74. }
  75. };
  76. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);