CoerceToBoolExpression.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. "use strict";
  2. var assert = require("assert"),
  3. CoerceToBoolExpression = require("../../../../lib/pipeline/expressions/CoerceToBoolExpression"),
  4. FieldPathExpression = require("../../../../lib/pipeline/expressions/FieldPathExpression"),
  5. ConstantExpression = require("../../../../lib/pipeline/expressions/ConstantExpression");
  6. module.exports = {
  7. "CoerceToBoolExpression": {
  8. "constructor()": {
  9. "should throw Error if no args": function construct(){
  10. assert.throws(function(){
  11. new CoerceToBoolExpression();
  12. });
  13. }
  14. },
  15. "#evaluate()": {
  16. "should return true if nested expression is coerced to true; {$const:5}": function testEvaluateTrue(){
  17. var expr = new CoerceToBoolExpression(new ConstantExpression(5));
  18. assert.equal(expr.evaluateInternal({}), true);
  19. },
  20. "should return false if nested expression is coerced to false; {$const:0}": function testEvaluateFalse(){
  21. var expr = new CoerceToBoolExpression(new ConstantExpression(0));
  22. assert.equal(expr.evaluateInternal({}), false);
  23. }
  24. },
  25. "#addDependencies()": {
  26. "should forward dependencies of nested expression": function testDependencies(){
  27. var expr = new CoerceToBoolExpression(new FieldPathExpression('a.b')),
  28. deps = expr.addDependencies({});
  29. assert.equal(Object.keys(deps).length, 1);
  30. assert.ok(deps['a.b']);
  31. }
  32. },
  33. "#toJSON()": {
  34. "should serialize as $and which will coerceToBool; '$foo'": function(){
  35. var expr = new CoerceToBoolExpression(new FieldPathExpression('foo'));
  36. assert.deepEqual(expr.toJSON(), {$and:['$foo']});
  37. }
  38. }
  39. }
  40. };
  41. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);