Skip to content

Commit c244913

Browse files
committed
test + cleanup
1 parent 09d74e1 commit c244913

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/main/java/com/saasquatch/jsonschemainferrer/JsonSchemaInferrer.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.Objects;
1717
import java.util.Set;
1818
import java.util.stream.Collectors;
19+
import java.util.stream.Stream;
1920
import javax.annotation.Nonnull;
2021
import javax.annotation.Nullable;
2122
import javax.annotation.concurrent.Immutable;
@@ -248,6 +249,16 @@ private Set<ObjectNode> processPrimitives(@Nonnull Collection<ValueNode> valueNo
248249
return anyOfs;
249250
}
250251

252+
private Stream<ObjectNode> handleEnumExtractionResults(
253+
@Nonnull Set<Set<? extends JsonNode>> enumExtractionResults) {
254+
return enumExtractionResults.stream().map(enumExtractionResult -> {
255+
final ObjectNode schema = newObject();
256+
schema.set(Consts.Fields.ENUM, newArray(enumExtractionResult));
257+
processGenericSchemaFeature(schema, enumExtractionResult, null);
258+
return schema;
259+
});
260+
}
261+
251262
/**
252263
* Build {@code anyOf} from sample JSONs. Note that all the arrays and objects will be combined.
253264
*
@@ -283,6 +294,7 @@ private Set<ObjectNode> getAnyOfsFromSamples(
283294
processGenericSchemaFeature(anyOf, enumExtractionResult, null);
284295
anyOfs.add(anyOf);
285296
}
297+
handleEnumExtractionResults(enumExtractionResults).forEach(anyOfs::add);
286298
// Objects
287299
final ObjectNode resultForObjects = processObjects(objectNodes);
288300
if (resultForObjects != null) {

src/test/java/com/saasquatch/jsonschemainferrer/JsonSchemaInferrerOptionsTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
import static org.junit.jupiter.api.Assertions.assertNull;
1010
import static org.junit.jupiter.api.Assertions.assertSame;
1111
import static org.junit.jupiter.api.Assertions.assertThrows;
12+
import static org.junit.jupiter.api.Assertions.assertTrue;
1213
import java.math.BigDecimal;
1314
import java.math.BigInteger;
1415
import java.time.DayOfWeek;
1516
import java.time.Instant;
17+
import java.time.Month;
1618
import java.util.Arrays;
1719
import java.util.Collections;
1820
import java.util.EnumSet;
@@ -531,6 +533,20 @@ public void testEnum() {
531533
assertEquals(ImmutableSet.of(jnf.textNode("foo"), jnf.numberNode(123)),
532534
stream(schema.get("enum")).collect(Collectors.toSet()));
533535
}
536+
{
537+
final JsonSchemaInferrer inferrer = JsonSchemaInferrer.newBuilder()
538+
.setEnumExtractor(EnumExtractors.chained(EnumExtractors.validEnum(Month.class),
539+
EnumExtractors.validEnum(DayOfWeek.class)))
540+
.build();
541+
final ObjectNode schema =
542+
inferrer.inferForSamples(Arrays.asList(jnf.textNode("TUESDAY"), jnf.textNode("MARCH")));
543+
final JsonNode anyOf = schema.get("anyOf");
544+
assertTrue(anyOf.isArray());
545+
assertTrue(
546+
stream(anyOf).anyMatch(_anyOf -> _anyOf.path("enum").get(0).textValue().equals("MARCH")));
547+
assertTrue(stream(anyOf)
548+
.anyMatch(_anyOf -> _anyOf.path("enum").get(0).textValue().equals("TUESDAY")));
549+
}
534550
}
535551

536552
@Test

0 commit comments

Comments
 (0)