SubtractExpression_test.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. "use strict";
  2. if (!module.parent) return require.cache[__filename] = 0, (new(require("mocha"))()).addFile(__filename).ui("exports").run(process.exit);
  3. var assert = require("assert"),
  4. SubtractExpression = require("../../../../lib/pipeline/expressions/SubtractExpression"),
  5. Expression = require("../../../../lib/pipeline/expressions/Expression"),
  6. VariablesIdGenerator = require("../../../../lib/pipeline/expressions/VariablesIdGenerator"),
  7. VariablesParseState = require("../../../../lib/pipeline/expressions/VariablesParseState");
  8. exports.SubtractExpression = {
  9. "constructor()": {
  10. "should not throw Error when constructing without args": function() {
  11. assert.doesNotThrow(function() {
  12. new SubtractExpression();
  13. });
  14. },
  15. },
  16. "#getOpName()": {
  17. "should return the correct op name; $subtract": function() {
  18. assert.equal(new SubtractExpression().getOpName(), "$subtract");
  19. },
  20. },
  21. "#evaluateInternal()": {
  22. "should return the result of subtraction between two numbers": function() {
  23. var idGenerator = new VariablesIdGenerator(),
  24. vps = new VariablesParseState(idGenerator),
  25. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  26. result = expr.evaluate({a:2, b:1}),
  27. expected = 1;
  28. assert.strictEqual(result, expected);
  29. },
  30. "should return null if left is null": function() {
  31. var idGenerator = new VariablesIdGenerator(),
  32. vps = new VariablesParseState(idGenerator),
  33. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  34. result = expr.evaluate({a:null, b:1}),
  35. expected = null;
  36. assert.strictEqual(result, expected);
  37. },
  38. "should return null if left is undefined": function() {
  39. var idGenerator = new VariablesIdGenerator(),
  40. vps = new VariablesParseState(idGenerator),
  41. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  42. result = expr.evaluate({a:undefined, b:1}),
  43. expected = null;
  44. assert.strictEqual(result, expected);
  45. },
  46. "should return null if right is null": function() {
  47. var idGenerator = new VariablesIdGenerator(),
  48. vps = new VariablesParseState(idGenerator),
  49. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  50. result = expr.evaluate({a:2, b:null}),
  51. expected = null;
  52. assert.strictEqual(result, expected);
  53. },
  54. "should return null if right is undefined": function() {
  55. var idGenerator = new VariablesIdGenerator(),
  56. vps = new VariablesParseState(idGenerator),
  57. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  58. result = expr.evaluate({a:2, b:undefined}),
  59. expected = null;
  60. assert.strictEqual(result, expected);
  61. },
  62. "should subtract 2 dates": function() {
  63. var idGenerator = new VariablesIdGenerator(),
  64. vps = new VariablesParseState(idGenerator),
  65. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  66. date2 = new Date("Jan 3 1990"),
  67. date1 = new Date("Jan 1 1990"),
  68. result = expr.evaluate({a:date2, b:date1}),
  69. expected = date2 - date1;
  70. assert.strictEqual(result, expected);
  71. },
  72. "should subtract a number of millis from a date": function() {
  73. var idGenerator = new VariablesIdGenerator(),
  74. vps = new VariablesParseState(idGenerator),
  75. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  76. date2 = new Date("Jan 3 1990"),
  77. millis = 24 * 60 * 60 * 1000,
  78. result = expr.evaluate({a:date2, b:millis}),
  79. expected = date2 - millis;
  80. assert.strictEqual(
  81. JSON.stringify(result),
  82. JSON.stringify(expected)
  83. );
  84. },
  85. "should throw if left is not a date or number": function() {
  86. var idGenerator = new VariablesIdGenerator(),
  87. vps = new VariablesParseState(idGenerator),
  88. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  89. date2 = {},
  90. date1 = new Date();
  91. assert.throws(function() {
  92. expr.evaluate({a:date2, b:date1});
  93. });
  94. },
  95. "should throw if right is not a date or number": function() {
  96. var idGenerator = new VariablesIdGenerator(),
  97. vps = new VariablesParseState(idGenerator),
  98. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  99. date2 = new Date(),
  100. date1 = {};
  101. assert.throws(function() {
  102. expr.evaluate({a:date2, b:date1});
  103. });
  104. },
  105. },
  106. };