summaryrefslogtreecommitdiff
path: root/jstests/core/json_schema/dependencies.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/json_schema/dependencies.js')
-rw-r--r--jstests/core/json_schema/dependencies.js119
1 files changed, 119 insertions, 0 deletions
diff --git a/jstests/core/json_schema/dependencies.js b/jstests/core/json_schema/dependencies.js
new file mode 100644
index 00000000000..a227169fe3f
--- /dev/null
+++ b/jstests/core/json_schema/dependencies.js
@@ -0,0 +1,119 @@
+/**
+ * Tests for the JSON Schema 'dependencies' keyword.
+ */
+(function() {
+ "use strict";
+
+ load("jstests/libs/assert_schema_match.js");
+
+ const coll = db.jstests_schema_dependencies;
+
+ // Top-level schema dependency.
+ assertSchemaMatch(coll, {dependencies: {foo: {required: ["bar"]}}}, {}, true);
+ assertSchemaMatch(coll, {dependencies: {foo: {required: ["bar"]}}}, {foo: 1, bar: 1}, true);
+ assertSchemaMatch(coll, {dependencies: {foo: {required: ["bar"]}}}, {bar: 1}, true);
+ assertSchemaMatch(coll, {dependencies: {foo: {required: ["bar"]}}}, {foo: 1}, false);
+
+ assertSchemaMatch(
+ coll,
+ {dependencies: {foo: {required: ["bar"], properties: {baz: {type: "string"}}}}},
+ {},
+ true);
+ assertSchemaMatch(
+ coll,
+ {dependencies: {foo: {required: ["bar"], properties: {baz: {type: "string"}}}}},
+ {bar: 1},
+ true);
+ assertSchemaMatch(
+ coll,
+ {dependencies: {foo: {required: ["bar"], properties: {baz: {type: "string"}}}}},
+ {foo: 1, bar: 1},
+ true);
+ assertSchemaMatch(
+ coll,
+ {dependencies: {foo: {required: ["bar"], properties: {baz: {type: "string"}}}}},
+ {foo: 1, bar: 1, baz: 1},
+ false);
+ assertSchemaMatch(
+ coll,
+ {dependencies: {foo: {required: ["bar"], properties: {baz: {type: "string"}}}}},
+ {foo: 1, bar: 1, baz: "str"},
+ true);
+
+ // Top-level property dependency.
+ assertSchemaMatch(coll, {dependencies: {foo: ["bar", "baz"]}}, {}, true);
+ assertSchemaMatch(coll, {dependencies: {foo: ["bar", "baz"]}}, {bar: 1}, true);
+ assertSchemaMatch(coll, {dependencies: {foo: ["bar", "baz"]}}, {baz: 1}, true);
+ assertSchemaMatch(coll, {dependencies: {foo: ["bar", "baz"]}}, {bar: 1, baz: 1}, true);
+ assertSchemaMatch(coll, {dependencies: {foo: ["bar", "baz"]}}, {foo: 1}, false);
+ assertSchemaMatch(coll, {dependencies: {foo: ["bar", "baz"]}}, {foo: 1, bar: 1}, false);
+ assertSchemaMatch(coll, {dependencies: {foo: ["bar", "baz"]}}, {foo: 1, baz: 1}, false);
+ assertSchemaMatch(coll, {dependencies: {foo: ["bar", "baz"]}}, {foo: 1, bar: 1, baz: 1}, true);
+
+ // Nested schema dependency.
+ assertSchemaMatch(
+ coll, {properties: {obj: {dependencies: {foo: {required: ["bar"]}}}}}, {}, true);
+ assertSchemaMatch(
+ coll, {properties: {obj: {dependencies: {foo: {required: ["bar"]}}}}}, {obj: 1}, true);
+ assertSchemaMatch(
+ coll, {properties: {obj: {dependencies: {foo: {required: ["bar"]}}}}}, {obj: {}}, true);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {foo: {required: ["bar"]}}}}},
+ {obj: {bar: 1}},
+ true);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {foo: {required: ["bar"]}}}}},
+ {obj: {foo: 1}},
+ false);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {foo: {required: ["bar"]}}}}},
+ {obj: {foo: 1, bar: 1}},
+ true);
+
+ // Nested property dependency.
+ assertSchemaMatch(coll, {properties: {obj: {dependencies: {foo: ["bar"]}}}}, {}, true);
+ assertSchemaMatch(coll, {properties: {obj: {dependencies: {foo: ["bar"]}}}}, {obj: 1}, true);
+ assertSchemaMatch(coll, {properties: {obj: {dependencies: {foo: ["bar"]}}}}, {obj: {}}, true);
+ assertSchemaMatch(
+ coll, {properties: {obj: {dependencies: {foo: ["bar"]}}}}, {obj: {bar: 1}}, true);
+ assertSchemaMatch(
+ coll, {properties: {obj: {dependencies: {foo: ["bar"]}}}}, {obj: {foo: 1}}, false);
+ assertSchemaMatch(
+ coll, {properties: {obj: {dependencies: {foo: ["bar"]}}}}, {obj: {foo: 1, bar: 1}}, true);
+
+ // Nested property dependency and nested schema dependency.
+ assertSchemaMatch(
+ coll, {properties: {obj: {dependencies: {a: ["b"], c: {required: ["d"]}}}}}, {}, true);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {a: ["b"], c: {required: ["d"]}}}}},
+ {obj: 1},
+ true);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {a: ["b"], c: {required: ["d"]}}}}},
+ {obj: {}},
+ true);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {a: ["b"], c: {required: ["d"]}}}}},
+ {obj: {b: 1, d: 1}},
+ true);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {a: ["b"], c: {required: ["d"]}}}}},
+ {obj: {a: 1, b: 1, c: 1}},
+ false);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {a: ["b"], c: {required: ["d"]}}}}},
+ {obj: {a: 1, c: 0, d: 1}},
+ false);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {a: ["b"], c: {required: ["d"]}}}}},
+ {obj: {b: 1, c: 1, d: 1}},
+ true);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {a: ["b"], c: {required: ["d"]}}}}},
+ {obj: {a: 1, b: 1, d: 1}},
+ true);
+ assertSchemaMatch(coll,
+ {properties: {obj: {dependencies: {a: ["b"], c: {required: ["d"]}}}}},
+ {obj: {a: 1, b: 1, c: 1, d: 1}},
+ true);
+}());