diff options
Diffstat (limited to 'jstests/core/json_schema/dependencies.js')
-rw-r--r-- | jstests/core/json_schema/dependencies.js | 119 |
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); +}()); |