| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- "use strict";
- var assert = require("assert"),
- CoerceToBoolExpression = require("../../../../lib/pipeline/expressions/CoerceToBoolExpression"),
- Expression = require("../../../../lib/pipeline/expressions/Expression"),
- FieldPathExpression = require("../../../../lib/pipeline/expressions/FieldPathExpression"),
- ConstantExpression = require("../../../../lib/pipeline/expressions/ConstantExpression"),
- DepsTracker = require("../../../../lib/pipeline/DepsTracker");
- exports.CoerceToBoolExpression = {
- "constructor()": {
- "should create instance": function() {
- var nested = ConstantExpression.create(5);
- assert(new CoerceToBoolExpression(nested) instanceof Expression);
- },
- "should throw Error unless one arg": function() {
- assert.throws(function() {
- new CoerceToBoolExpression();
- });
- assert.throws(function() {
- new CoerceToBoolExpression("foo", "bar");
- });
- },
- },
- "#evaluate()": {
- "should return true if nested expression is coerced to true; {$const:5}": function testEvaluateTrue() {
- /** Nested expression coerced to true. */
- var nested = ConstantExpression.create(5),
- expr = CoerceToBoolExpression.create(nested);
- assert.strictEqual(expr.evaluate({}), true);
- },
- "should return false if nested expression is coerced to false; {$const:0}": function testEvaluateFalse() {
- /** Nested expression coerced to false. */
- var expr = CoerceToBoolExpression.create(ConstantExpression.create(0));
- assert.strictEqual(expr.evaluate({}), false);
- },
- },
- "#addDependencies()": {
- "should forward dependencies of nested expression": function testDependencies() {
- /** Dependencies forwarded from nested expression. */
- var nested = FieldPathExpression.create("a.b"),
- expr = CoerceToBoolExpression.create(nested),
- deps = new DepsTracker();
- expr.addDependencies(deps);
- assert.strictEqual( Object.keys(deps.fields).length, 1 );
- assert.strictEqual("a.b" in deps.fields, true);
- assert.strictEqual(deps.needWholeDocument, false);
- assert.strictEqual(deps.needTextScore, false);
- },
- },
- "#serialize": {
- "should be able to output in to JSON Object": function testAddToBsonObj() {
- /** Output to BSONObj. */
- var expr = CoerceToBoolExpression.create(FieldPathExpression.create("foo"));
- // serialized as $and because CoerceToBool isn't an ExpressionNary
- assert.deepEqual({field:{$and:["$foo"]}}, {field:expr.serialize(false)});
- },
- "should be able to output in to JSON Array": function testAddToBsonArray() {
- /** Output to BSONArray. */
- var expr = CoerceToBoolExpression.create(FieldPathExpression.create("foo"));
- // serialized as $and because CoerceToBool isn't an ExpressionNary
- assert.deepEqual([{$and:["$foo"]}], [expr.serialize(false)]);
- },
- },
- };
- if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);
|