summaryrefslogtreecommitdiff
path: root/jstests/aggregation/expressions
diff options
context:
space:
mode:
authorNick Zolnierz <nicholas.zolnierz@mongodb.com>2018-02-12 14:16:14 -0500
committerNick Zolnierz <nicholas.zolnierz@mongodb.com>2018-02-13 14:12:00 -0500
commitb365c65216459eeeefa549c61344ed6107d612c8 (patch)
tree766d960a551eafaa6cc5410b2401851a88e01b9a /jstests/aggregation/expressions
parent7f074daf0ad102b6f32abdd1b28cc9c73b46b52f (diff)
downloadmongo-b365c65216459eeeefa549c61344ed6107d612c8.tar.gz
SERVER-33172: Add onNull parameter to $dateToString
Diffstat (limited to 'jstests/aggregation/expressions')
-rw-r--r--jstests/aggregation/expressions/date_to_string_on_null.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/jstests/aggregation/expressions/date_to_string_on_null.js b/jstests/aggregation/expressions/date_to_string_on_null.js
new file mode 100644
index 00000000000..e5b3ec50f1b
--- /dev/null
+++ b/jstests/aggregation/expressions/date_to_string_on_null.js
@@ -0,0 +1,77 @@
+/**
+ * Tests for the $dateToString expression with the optional 'onNull' parameter.
+ */
+(function() {
+ "use strict";
+
+ const onNullValue = ISODate("2017-07-04T11:56:02Z");
+ const coll = db.date_to_string_on_null;
+ coll.drop();
+
+ assert.writeOK(coll.insert({_id: 0}));
+
+ for (let nullishValue of[null, undefined, "$missing"]) {
+ // Test that the 'onNull' value is returned when the 'date' is nullish.
+ assert.eq([{_id: 0, date: onNullValue}],
+ coll.aggregate({
+ $project: {
+ date: {
+ $dateToString: {
+ date: nullishValue,
+ format: "%Y-%m-%d %H:%M:%S",
+ onNull: onNullValue
+ }
+ }
+ }
+ })
+ .toArray());
+
+ // Test that null is returned when the 'timezone' is nullish, regardless of the 'onNull'
+ // value.
+ assert.eq([{_id: 0, date: null}],
+ coll.aggregate({
+ $project: {
+ date: {
+ $dateToString: {
+ date: "2018-02-06T11:56:02Z",
+ format: "%Y-%m-%d %H:%M:%S",
+ timezone: nullishValue,
+ onNull: onNullValue
+ }
+ }
+ }
+ })
+ .toArray());
+ }
+
+ // Test that 'onNull' can be any type, not just an ISODate.
+ for (let onNullValue of[{}, 5, "Not a date", null, undefined]) {
+ assert.eq([{_id: 0, date: onNullValue}],
+ coll.aggregate({
+ $project: {
+ date: {
+ $dateToString: {
+ date: "$missing",
+ format: "%Y-%m-%d %H:%M:%S",
+ onNull: onNullValue
+ }
+ }
+ }
+ })
+ .toArray());
+ }
+
+ // Test that 'onNull' can be missing, resulting in no output field when used within a $project
+ // stage.
+ assert.eq(
+ [{_id: 0}],
+ coll.aggregate({
+ $project: {
+ date: {
+ $dateToString:
+ {date: "$missing", format: "%Y-%m-%d %H:%M:%S", onNull: "$missing"}
+ }
+ }
+ })
+ .toArray());
+})();