FieldRangeExpression.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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.strictEqual(new FieldRangeExpression(new FieldPathExpression("a"), "$eq", 0).evaluate({a:[1,0,2]}), false);
  72. }
  73. },
  74. // "#optimize()": {
  75. // "should optimize if ...": function testOptimize(){
  76. // },
  77. // "should not optimize if ...": function testNoOptimize(){
  78. // }
  79. // },
  80. "#addDependencies()": {
  81. "should return the range's path as a dependency": function testDependencies(){
  82. var deps = new FieldRangeExpression(new FieldPathExpression("a.b.c"), "$eq", 0).addDependencies({});
  83. assert.strictEqual(Object.keys(deps).length, 1);
  84. assert.ok(deps['a.b.c']);
  85. }
  86. },
  87. // "#intersect()": {
  88. // },
  89. // "#toJSON()": {
  90. // }
  91. }
  92. };
  93. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);