Skip to content
This repository has been archived by the owner on Jul 9, 2021. It is now read-only.

Commit

Permalink
fix: oneOf/anyOf add parent crumbs on valid result.
Browse files Browse the repository at this point in the history
  • Loading branch information
llfbandit committed Mar 27, 2020
1 parent c46aac3 commit 98eda47
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public void add(CrumbInfo crumbInfo, ValidationResult validationResult, Object..
/**
* Append other results to the current stack.
*
* @param results The stack to append.
* @param results The stack to append. Must be non {@code null}.
*/
public void add(ValidationResults results) {
items.addAll(results.items);
Expand All @@ -65,6 +65,21 @@ public void add(ValidationResults results) {
}
}

/**
* Append other results to the current stack with given parent crumbs.
*
* @param parentCrumbs The given parent crumbs to insert. Must be non {@code null}.
* @param results The stack to append. Must be non {@code null}.
*/
public void add(Collection<CrumbInfo> parentCrumbs, ValidationResults results) {
// Add parent crumbs
for (ValidationItem item : results.items) {
item.crumbs.addAll(0, parentCrumbs);
}

add(results);
}

/**
* Get the current breadcrumb as read-only.
*
Expand Down Expand Up @@ -175,7 +190,7 @@ public static class ValidationItem extends ValidationResult implements Serializa
private static final String DOT = ".";
private static final String SEMI_COLON = ": ";

private final Collection<CrumbInfo> crumbs;
private final List<CrumbInfo> crumbs;

ValidationItem(ValidationResult result, Collection<CrumbInfo> crumbs, Object... msgArgs) {
this(result, crumbs, null, msgArgs);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ void validateWithoutDiscriminator(final JsonNode valueNode, final ValidationResu

if (anyOfResults.isValid()) {
// Append potential results from sub validation (INFO / WARN)
results.add(anyOfResults);
results.add(results.crumbs(), anyOfResults);
return;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ void validateWithoutDiscriminator(final JsonNode valueNode, final ValidationResu
if (oneOfValidResults != null) {
results.add(CRUMB_INFO, MANY_VALID_SCHEMA_ERR);
return;
} else {
oneOfValidResults = oneOfResults;
}

oneOfValidResults = oneOfResults;
}
}

if (oneOfValidResults != null) {
// Append potential results from sub validation (INFO / WARN)
results.add(oneOfValidResults);
results.add(results.crumbs(), oneOfValidResults);
} else {
results.add(CRUMB_INFO, NO_VALID_SCHEMA_ERR);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ public void additionalValidation() throws Exception {

@Test
public void infoInAnyOfValidation() throws Exception {
JsonNode schemaNode = TreeUtil.json.readTree("{\"anyOf\": [{ \"type\": \"integer\"}, { \"minimum\": 2 }]}");
JsonNode schemaNode = TreeUtil.json.readTree("{ \"properties\": { \"foo\": { \"anyOf\": [ { \"type\": \"integer\" }, { \"minimum\": 2 } ] } }}");

OAI3Context apiContext = new OAI3Context(new URI("/"), schemaNode);
ValidationContext<OAI3> validationContext = new ValidationContext<>(apiContext);
Expand All @@ -206,16 +206,16 @@ public void infoInAnyOfValidation() throws Exception {
SchemaValidator validator = new SchemaValidator(validationContext, null, schemaNode);

ValidationResults results = new ValidationResults();
validator.validate(JsonNodeFactory.instance.numberNode(1), results);
validator.validate(JsonNodeFactory.instance.objectNode().set("foo", JsonNodeFactory.instance.numberNode(1)), results);

assertEquals("", results.items().get(0).dataCrumbs());
assertEquals("<anyOf>.<type>", results.items().get(0).schemaCrumbs());
assertEquals("foo", results.items().get(0).dataCrumbs());
assertEquals("foo.<anyOf>.<type>", results.items().get(0).schemaCrumbs());
assertEquals(ValidationSeverity.INFO, results.items().get(0).severity());
}

@Test
public void infoInOneOfValidation() throws Exception {
JsonNode schemaNode = TreeUtil.json.readTree("{\"oneOf\": [{ \"type\": \"integer\"}, { \"minimum\": 2 }]}");
JsonNode schemaNode = TreeUtil.json.readTree("{ \"properties\": { \"foo\": { \"oneOf\": [ { \"type\": \"integer\" }, { \"minimum\": 2 } ] } }}");

OAI3Context apiContext = new OAI3Context(new URI("/"), schemaNode);
ValidationContext<OAI3> validationContext = new ValidationContext<>(apiContext);
Expand All @@ -224,10 +224,10 @@ public void infoInOneOfValidation() throws Exception {
SchemaValidator validator = new SchemaValidator(validationContext, null, schemaNode);

ValidationResults results = new ValidationResults();
validator.validate(JsonNodeFactory.instance.numberNode(1), results);
validator.validate(JsonNodeFactory.instance.objectNode().set("foo", JsonNodeFactory.instance.numberNode(1)), results);

assertEquals("", results.items().get(0).dataCrumbs());
assertEquals("<oneOf>.<type>", results.items().get(0).schemaCrumbs());
assertEquals("foo", results.items().get(0).dataCrumbs());
assertEquals("foo.<oneOf>.<type>", results.items().get(0).schemaCrumbs());
assertEquals(ValidationSeverity.INFO, results.items().get(0).severity());
}

Expand Down

0 comments on commit 98eda47

Please sign in to comment.