FieldRangeExpression.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. "use strict";
  2. var assert = require("assert"),
  3. FieldPathExpression = require("../../../../lib/pipeline/expressions/FieldPathExpression"),
  4. FieldRangeExpression = require("../../../../lib/pipeline/expressions/FieldRangeExpression");
  5. module.exports = {
  6. "FieldRangeExpression": {
  7. "constructor()": {
  8. "should throw Error if no args": function testInvalid(){
  9. assert.throws(function() {
  10. new FieldRangeExpression();
  11. });
  12. }
  13. },
  14. "#evaluate()": {
  15. "$eq": {
  16. "should return false if documentValue < rangeValue": function testEqLt() {
  17. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$eq", 1).evaluate({a:0}), false);
  18. },
  19. "should return true if documentValue == rangeValue": function testEqEq() {
  20. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$eq", 1).evaluate({a:1}), true);
  21. },
  22. "should return false if documentValue > rangeValue": function testEqGt() {
  23. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$eq", 1).evaluate({a:2}), false);
  24. }
  25. },
  26. "$lt": {
  27. "should return true if documentValue < rangeValue": function testLtLt() {
  28. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$lt", "y").evaluate({a:"x"}), true);
  29. },
  30. "should return false if documentValue == rangeValue": function testLtEq() {
  31. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$lt", "y").evaluate({a:"y"}), false);
  32. },
  33. "should return false if documentValue > rangeValue": function testLtGt() {
  34. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$lt", "y").evaluate({a:"z"}), false);
  35. }
  36. },
  37. "$lte": {
  38. "should return true if documentValue < rangeValue": function testLtLt() {
  39. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$lte", 1.1).evaluate({a:1.0}), true);
  40. },
  41. "should return true if documentValue == rangeValue": function testLtEq() {
  42. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$lte", 1.1).evaluate({a:1.1}), true);
  43. },
  44. "should return false if documentValue > rangeValue": function testLtGt() {
  45. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$lte", 1.1).evaluate({a:1.2}), false);
  46. }
  47. },
  48. "$gt": {
  49. "should return false if documentValue < rangeValue": function testLtLt() {
  50. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$gt", 100).evaluate({a:50}), false);
  51. },
  52. "should return false if documentValue == rangeValue": function testLtEq() {
  53. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$gt", 100).evaluate({a:100}), false);
  54. },
  55. "should return true if documentValue > rangeValue": function testLtGt() {
  56. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$gt", 100).evaluate({a:150}), true);
  57. }
  58. },
  59. "$gte": {
  60. "should return false if documentValue < rangeValue": function testLtLt() {
  61. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$gte", "abc").evaluate({a:"a"}), false);
  62. },
  63. "should return true if documentValue == rangeValue": function testLtEq() {
  64. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$gte", "abc").evaluate({a:"abc"}), true);
  65. },
  66. "should return true if documentValue > rangeValue": function testLtGt() {
  67. assert.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$gte", "abc").evaluate({a:"abcd"}), true);
  68. }
  69. },
  70. "should throw Error if given multikey values": function testMultikey(){
  71. assert.throws(function(){
  72. new FieldRangeExpression(new FieldPathExpression("a"), "$eq", 0).evaluate({a:[1,0,2]});
  73. });
  74. }
  75. },
  76. // "#optimize()": {
  77. // "should optimize if ...": function testOptimize(){
  78. // },
  79. // "should not optimize if ...": function testNoOptimize(){
  80. // }
  81. // },
  82. "#addDependencies()": {
  83. "should return the range's path as a dependency": function testDependencies(){
  84. var deps = new FieldRangeExpression(new FieldPathExpression("a.b.c"), "$eq", 0).addDependencies([]);
  85. assert.strictEqual(deps.length, 1);
  86. assert.strictEqual(deps[0], "a.b.c");
  87. }
  88. },
  89. // "#intersect()": {
  90. // },
  91. // "#toJson()": {
  92. // }
  93. }
  94. };
  95. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);