Files
mongo/jstests/aggregation/exec/value_coerce_to_bool.js
Mihai Andrei eb8bef604c SERVER-99734 Finish moving top level tests in 'jstests/aggregation' into subdirectories (#31578)
GitOrigin-RevId: 2dd0c4d3698dfc4ccb1d7069d214aa6b66f28234
2025-02-03 16:27:34 +00:00

44 lines
1.1 KiB
JavaScript

// Value::coerceToBool() is consistent with BSONElement::trueValue(). SERVER-6120
const t = db[jsTestName()];
t.drop();
assert.commandWorked(t.insertOne({object: {a: 1}}));
function coerceToBool(value) {
return t.aggregate({$project: {boolValue: {$and: [value]}}}).toArray()[0].boolValue;
}
function assertBoolValue(expectedBool, value) {
assert.eq(expectedBool, coerceToBool(value));
}
// Bool type.
assertBoolValue(false, false);
assertBoolValue(true, true);
// Numeric types.
assertBoolValue(false, NumberLong(0));
assertBoolValue(true, NumberLong(1));
assertBoolValue(false, NumberInt(0));
assertBoolValue(true, NumberInt(1));
assertBoolValue(false, 0.0);
assertBoolValue(true, 1.0);
// Always false types.
assertBoolValue(false, null);
// Always true types.
assertBoolValue(true, '');
assertBoolValue(true, 'a');
assertBoolValue(true, "$object");
assertBoolValue(true, []);
assertBoolValue(true, [1]);
assertBoolValue(true, new ObjectId());
assertBoolValue(true, new Date());
assertBoolValue(true, /a/);
assertBoolValue(true, new Timestamp());
// Missing field.
assertBoolValue(false, '$missingField');