CoerceToBoolExpression_test.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. "use strict";
  2. var assert = require("assert"),
  3. CoerceToBoolExpression = require("../../../../lib/pipeline/expressions/CoerceToBoolExpression"),
  4. Expression = require("../../../../lib/pipeline/expressions/Expression"),
  5. FieldPathExpression = require("../../../../lib/pipeline/expressions/FieldPathExpression"),
  6. ConstantExpression = require("../../../../lib/pipeline/expressions/ConstantExpression"),
  7. DepsTracker = require("../../../../lib/pipeline/DepsTracker");
  8. exports.CoerceToBoolExpression = {
  9. "constructor()": {
  10. "should create instance": function() {
  11. var nested = ConstantExpression.create(5);
  12. assert(new CoerceToBoolExpression(nested) instanceof Expression);
  13. },
  14. "should throw Error unless one arg": function() {
  15. assert.throws(function() {
  16. new CoerceToBoolExpression();
  17. });
  18. assert.throws(function() {
  19. new CoerceToBoolExpression("foo", "bar");
  20. });
  21. },
  22. },
  23. "#evaluate()": {
  24. "should return true if nested expression is coerced to true; {$const:5}": function testEvaluateTrue() {
  25. /** Nested expression coerced to true. */
  26. var nested = ConstantExpression.create(5),
  27. expr = CoerceToBoolExpression.create(nested);
  28. assert.strictEqual(expr.evaluate({}), true);
  29. },
  30. "should return false if nested expression is coerced to false; {$const:0}": function testEvaluateFalse() {
  31. /** Nested expression coerced to false. */
  32. var expr = CoerceToBoolExpression.create(ConstantExpression.create(0));
  33. assert.strictEqual(expr.evaluate({}), false);
  34. },
  35. },
  36. "#addDependencies()": {
  37. "should forward dependencies of nested expression": function testDependencies() {
  38. /** Dependencies forwarded from nested expression. */
  39. var nested = FieldPathExpression.create("a.b"),
  40. expr = CoerceToBoolExpression.create(nested),
  41. deps = new DepsTracker();
  42. expr.addDependencies(deps);
  43. assert.strictEqual( Object.keys(deps.fields).length, 1 );
  44. assert.strictEqual("a.b" in deps.fields, true);
  45. assert.strictEqual(deps.needWholeDocument, false);
  46. assert.strictEqual(deps.needTextScore, false);
  47. },
  48. },
  49. "#serialize": {
  50. "should be able to output in to JSON Object": function testAddToBsonObj() {
  51. /** Output to BSONObj. */
  52. var expr = CoerceToBoolExpression.create(FieldPathExpression.create("foo"));
  53. // serialized as $and because CoerceToBool isn't an ExpressionNary
  54. assert.deepEqual({field:{$and:["$foo"]}}, {field:expr.serialize(false)});
  55. },
  56. "should be able to output in to JSON Array": function testAddToBsonArray() {
  57. /** Output to BSONArray. */
  58. var expr = CoerceToBoolExpression.create(FieldPathExpression.create("foo"));
  59. // serialized as $and because CoerceToBool isn't an ExpressionNary
  60. assert.deepEqual([{$and:["$foo"]}], [expr.serialize(false)]);
  61. },
  62. },
  63. };
  64. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);