Cancel patch change for each non valid logical combination (#231)

* Cancel patch change for each non valid logical combination

* Update CMakeLists.txt

---------

Co-authored-by: Patrick Boettcher <p@yai.se>
This commit is contained in:
Didier BRIZET 2023-07-04 13:03:37 +02:00 committed by GitHub
parent 540a7e3dd4
commit 8912ad3490
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 76 additions and 0 deletions

View File

@ -436,9 +436,12 @@ class logical_combination : public schema
for (auto &s : subschemata_) { for (auto &s : subschemata_) {
first_error_handler esub; first_error_handler esub;
json_patch old_patch(patch);
s->validate(ptr, instance, patch, esub); s->validate(ptr, instance, patch, esub);
if (!esub) if (!esub)
count++; count++;
else
patch = old_patch;
if (is_validate_complete(instance, ptr, e, esub, count)) if (is_validate_complete(instance, ptr, e, esub, count))
return; return;

View File

@ -74,6 +74,10 @@ add_executable(issue-189-default-values issue-189-default-values.cpp)
target_link_libraries(issue-189-default-values nlohmann_json_schema_validator) target_link_libraries(issue-189-default-values nlohmann_json_schema_validator)
add_test(NAME issue-189-default-values COMMAND issue-189-default-values) add_test(NAME issue-189-default-values COMMAND issue-189-default-values)
add_executable(issue-229-oneof-default-values issue-229-oneof-default-values.cpp)
target_link_libraries(issue-229-oneof-default-values nlohmann_json_schema_validator)
add_test(NAME issue-229-oneof-default-values COMMAND issue-229-oneof-default-values)
add_executable(issue-243-root-default-values issue-243-root-default-values.cpp) add_executable(issue-243-root-default-values issue-243-root-default-values.cpp)
target_link_libraries(issue-243-root-default-values nlohmann_json_schema_validator) target_link_libraries(issue-243-root-default-values nlohmann_json_schema_validator)
add_test(NAME issue-243-root-default-values COMMAND issue-243-root-default-values) add_test(NAME issue-243-root-default-values COMMAND issue-243-root-default-values)

View File

@ -0,0 +1,69 @@
#include <iostream>
#include <nlohmann/json-schema.hpp>
using nlohmann::json;
using nlohmann::json_uri;
using nlohmann::json_schema::json_validator;
static const json default_schema = R"(
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"oneOf": [
{
"type": "object",
"properties": {
"name": {
"enum": "foo"
},
"code": {
"const": 1,
"default": 1
}
}
},
{
"type": "object",
"properties": {
"name": {
"enum": "bar"
},
"code": {
"const": 2,
"default": 2
}
}
}
]
})"_json;
static void loader(const json_uri &uri, json &schema)
{
schema = default_schema;
}
int main(void)
{
json_validator validator(loader);
validator.set_root_schema(default_schema);
json data = R"({"name": "bar"})"_json;
json expected = R"(
[
{
"op": "add",
"path": "/code",
"value": 2
}
]
)"_json;
json patch = validator.validate(data);
if (patch != expected) {
std::cerr << "Patch contains wrong operation: '" << patch.dump() << "' instead of expected '" << expected.dump() << "'" << std::endl;
return 1;
}
return 0;
}