From 90d1ec7c5f50cf23146dea4c1f24021a597e2cc4 Mon Sep 17 00:00:00 2001 From: amckenzie Date: Mon, 14 Aug 2017 15:12:28 +0100 Subject: [PATCH] remove dependence on the id of schemas --- .../integration/test/DefinitionBuilderIT.java | 4 +- .../integration/utils/JsonSchemaLoader.java | 8 +- .../test/resources/schemas/person-schema.json | 15 +-- .../pojo/core/DefinitionBuilderVisitor.java | 44 ++++----- .../pojo/core/JsonSchemaWrapper.java | 36 ++++--- .../justice/generation/pojo/core/Visitor.java | 22 ++--- .../core/DefinitionBuilderVisitorTest.java | 84 ++++------------ .../pojo/core/JsonSchemaWrapperTest.java | 96 +++++++++++-------- .../test/resources/schemas/person-schema.json | 6 +- .../schemas/simple-property-schema.json | 2 +- .../resources/schemas/strings-schema.json | 2 +- 11 files changed, 140 insertions(+), 179 deletions(-) diff --git a/integration-test/src/test/java/uk/gov/justice/generation/pojo/integration/test/DefinitionBuilderIT.java b/integration-test/src/test/java/uk/gov/justice/generation/pojo/integration/test/DefinitionBuilderIT.java index 577986c..a801b63 100644 --- a/integration-test/src/test/java/uk/gov/justice/generation/pojo/integration/test/DefinitionBuilderIT.java +++ b/integration-test/src/test/java/uk/gov/justice/generation/pojo/integration/test/DefinitionBuilderIT.java @@ -31,8 +31,8 @@ public class DefinitionBuilderIT { @Test public void shouldBuildTypeSpecFromSchema() throws Exception { - final ObjectSchema schema = (ObjectSchema) JsonSchemaLoader - .loadSchema("src/test/resources/schemas/person-schema.json"); + final ObjectSchema schema = JsonSchemaLoader + .loadSchema("src/test/resources/schemas/person-schema.json", ObjectSchema.class); final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor("uk.gov.justice.pojo"); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(schema); diff --git a/integration-test/src/test/java/uk/gov/justice/generation/pojo/integration/utils/JsonSchemaLoader.java b/integration-test/src/test/java/uk/gov/justice/generation/pojo/integration/utils/JsonSchemaLoader.java index b8844dc..f7e8239 100644 --- a/integration-test/src/test/java/uk/gov/justice/generation/pojo/integration/utils/JsonSchemaLoader.java +++ b/integration-test/src/test/java/uk/gov/justice/generation/pojo/integration/utils/JsonSchemaLoader.java @@ -19,16 +19,18 @@ public class JsonSchemaLoader { /** * Locate a JSON schema file on the classpath and load it. * @param path the path to the JSON schema file + * @param clazz The type of the Schema. Must extend org.everit.json.schema.Schema. * @return the schema */ - public static Schema loadSchema(final String path) { + @SuppressWarnings("unchecked") + public static T loadSchema(final String path, @SuppressWarnings("unused") final Class clazz) { // TODO: load from classpath rather than working directory final JSONObject schemaJsonObject = new JSONObject(new FileLoader().loadAsJsonSting(path)); - return SchemaLoader.load(schemaJsonObject); + return (T) SchemaLoader.load(schemaJsonObject); } public static ArraySchema loadArraySchema(final String path) { - return (ArraySchema) loadSchema(path); + return loadSchema(path, ArraySchema.class); } } diff --git a/integration-test/src/test/resources/schemas/person-schema.json b/integration-test/src/test/resources/schemas/person-schema.json index dac592e..b598b51 100644 --- a/integration-test/src/test/resources/schemas/person-schema.json +++ b/integration-test/src/test/resources/schemas/person-schema.json @@ -4,24 +4,19 @@ "id": "person", "properties": { "firstName": { - "type": "string", - "id": "firstName" + "type": "string" }, "lastName": { - "type": "string", - "id": "lastName" + "type": "string" }, "required": { - "type": "boolean", - "id": "required" + "type": "boolean" }, "signedInCount": { - "type": "integer", - "id": "signedInCount" + "type": "integer" }, "ratio": { - "type": "number", - "id": "ratio" + "type": "number" } }, "additionalProperties": false, diff --git a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/DefinitionBuilderVisitor.java b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/DefinitionBuilderVisitor.java index 9279c28..255e953 100644 --- a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/DefinitionBuilderVisitor.java +++ b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/DefinitionBuilderVisitor.java @@ -36,20 +36,18 @@ public DefinitionBuilderVisitor(final String packageName) { } @Override - public void visitEnter(final ObjectSchema schema) { - validate(schema); - - final String fieldName = schema.getId(); + public void enter(final String fieldName, final ObjectSchema schema) { final ClassDefinition definition = new ClassDefinition(fieldName, new ClassName(packageName, capitalize(fieldName))); definitions.push(new Entry(schema, definition)); } @Override - public void visitLeave(final ObjectSchema schema) { + public void leave(final ObjectSchema schema) { final Deque fieldDefinitions = new ArrayDeque<>(); while (definitions.peek().getSchema() != schema) { + fieldDefinitions.push(definitions.pop().getDefinition()); } @@ -59,52 +57,48 @@ public void visitLeave(final ObjectSchema schema) { } @Override - public void visit(final StringSchema schema) { - validate(schema); - definitions.push(new Entry(schema, new FieldDefinition(schema.getId(), new ClassName(String.class)))); + public void visit(final String fieldName, final StringSchema schema) { + definitions.push(new Entry(schema, new FieldDefinition(fieldName, new ClassName(String.class)))); } @Override - public void visit(final BooleanSchema schema) { - validate(schema); - definitions.push(new Entry(schema, new FieldDefinition(schema.getId(), new ClassName(Boolean.class)))); + public void visit(final String fieldName, final BooleanSchema schema) { + definitions.push(new Entry(schema, new FieldDefinition(fieldName, new ClassName(Boolean.class)))); } @Override - public void visit(final NumberSchema schema) { - validate(schema); - + public void visit(final String fieldName, final NumberSchema schema) { final ClassName className = schema.requiresInteger() ? new ClassName(Integer.class) : new ClassName(BigDecimal.class); - definitions.push(new Entry(schema, new FieldDefinition(schema.getId(), className))); + definitions.push(new Entry(schema, new FieldDefinition(fieldName, className))); } @Override - public void visit(final CombinedSchema schema) { + public void visit(final String fieldName, final CombinedSchema schema) { //TODO: Implement Combined Schema } @Override - public void visit(final ArraySchema schema) { + public void visit(final String fieldName, final ArraySchema schema) { //TODO: Implement Array Schema } @Override - public void visit(final ReferenceSchema schema) { + public void visit(final String fieldName, final ReferenceSchema schema) { //TODO: Implement Reference Schema } @Override - public void visit(final EmptySchema schema) { + public void visit(final String fieldName, final EmptySchema schema) { //TODO: Implement Empty Schema } @Override - public void visit(final EnumSchema schema) { + public void visit(final String fieldName, final EnumSchema schema) { //TODO: Implement Enum Schema } @Override - public void visit(final NullSchema schema) { + public void visit(final String fieldName, final NullSchema schema) { //TODO: Implement Null Schema } @@ -113,12 +107,6 @@ public List getDefinitions() { return classDefinitions; } - private void validate(final Schema schema) { - if (schema.getId() == null || schema.getId().isEmpty()) { - throw new UnsupportedSchemaException("Invalid Schema: all schema value types must have the id set for correct source generation."); - } - } - private class Entry { private final Schema schema; @@ -137,4 +125,4 @@ Definition getDefinition() { return definition; } } -} \ No newline at end of file +} diff --git a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/JsonSchemaWrapper.java b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/JsonSchemaWrapper.java index 003ed5b..62a5338 100644 --- a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/JsonSchemaWrapper.java +++ b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/JsonSchemaWrapper.java @@ -24,48 +24,54 @@ public JsonSchemaWrapper(final Schema schema) { @Override public void accept(final Visitor visitor) { + final String fieldName = schema.getId(); + accept(fieldName, visitor); + } + + private void accept(final String fieldName, final Visitor visitor) { + switch (schema.getClass().getSimpleName()) { case "ObjectSchema": final ObjectSchema objectSchema = (ObjectSchema) schema; - visitor.visitEnter(objectSchema); - objectSchema.getPropertySchemas().values() - .forEach(childSchema -> visitChildSchema(visitor, childSchema)); - visitor.visitLeave(objectSchema); + visitor.enter(fieldName, objectSchema); + objectSchema.getPropertySchemas() + .forEach((childName, childSchema) -> visitChildSchema(childName, visitor, childSchema)); + visitor.leave(objectSchema); break; case "StringSchema": - visitor.visit((StringSchema) schema); + visitor.visit(fieldName, (StringSchema) schema); break; case "BooleanSchema": - visitor.visit((BooleanSchema) schema); + visitor.visit(fieldName, (BooleanSchema) schema); break; case "NumberSchema": - visitor.visit((NumberSchema) schema); + visitor.visit(fieldName, (NumberSchema) schema); break; case "EnumSchema": - visitor.visit((EnumSchema) schema); + visitor.visit(fieldName, (EnumSchema) schema); break; case "NullSchema": - visitor.visit((NullSchema) schema); + visitor.visit(fieldName, (NullSchema) schema); break; case "EmptySchema": - visitor.visit((EmptySchema) schema); + visitor.visit(fieldName, (EmptySchema) schema); break; case "ReferenceSchema": - visitor.visit((ReferenceSchema) schema); + visitor.visit(fieldName, (ReferenceSchema) schema); break; case "ArraySchema": - visitor.visit((ArraySchema) schema); + visitor.visit(fieldName, (ArraySchema) schema); break; case "CombinedSchema": - visitor.visit((CombinedSchema) schema); + visitor.visit(fieldName, (CombinedSchema) schema); break; default: throw new UnsupportedSchemaException(format("Schema of type: %s is not supported.", schema.getClass().getSimpleName())); } } - private void visitChildSchema(final Visitor visitor, final Schema childSchema) { - new JsonSchemaWrapper(childSchema).accept(visitor); + private void visitChildSchema(final String fieldName, final Visitor visitor, final Schema childSchema) { + new JsonSchemaWrapper(childSchema).accept(fieldName, visitor); } } diff --git a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/Visitor.java b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/Visitor.java index a4a5775..61d8364 100644 --- a/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/Visitor.java +++ b/pojo-generator-core/src/main/java/uk/gov/justice/generation/pojo/core/Visitor.java @@ -17,27 +17,27 @@ public interface Visitor { - void visitEnter(final ObjectSchema schema); + void enter(final String fieldName, final ObjectSchema schema); - void visitLeave(final ObjectSchema schema); + void leave(final ObjectSchema schema); - void visit(final CombinedSchema schema); + void visit(final String fieldName, final CombinedSchema schema); - void visit(final ArraySchema schema); + void visit(final String fieldName, final ArraySchema schema); - void visit(final ReferenceSchema schema); + void visit(final String fieldName, final ReferenceSchema schema); - void visit(final BooleanSchema schema); + void visit(final String fieldName, final BooleanSchema schema); - void visit(final EmptySchema schema); + void visit(final String fieldName, final EmptySchema schema); - void visit(final EnumSchema schema); + void visit(final String fieldName, final EnumSchema schema); - void visit(final NullSchema schema); + void visit(final String fieldName, final NullSchema schema); - void visit(final NumberSchema schema); + void visit(final String fieldName, final NumberSchema schema); - void visit(final StringSchema schema); + void visit(final String fieldName, final StringSchema schema); List getDefinitions(); } diff --git a/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/core/DefinitionBuilderVisitorTest.java b/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/core/DefinitionBuilderVisitorTest.java index 06967c0..c7f7a75 100644 --- a/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/core/DefinitionBuilderVisitorTest.java +++ b/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/core/DefinitionBuilderVisitorTest.java @@ -21,7 +21,6 @@ @RunWith(MockitoJUnitRunner.class) public class DefinitionBuilderVisitorTest { - private static final String INVALID_SCHEMA_ID_MESSAGE = "Invalid Schema: all schema value types must have the id set for correct source generation."; @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -30,20 +29,21 @@ public void shouldGenerateClassDefinitionsWithStringSchemaProperties() throws Ex final String packageName = "org.bloggs.fred"; final String outerClass = "OuterClass"; final String innerClass = "InnerClass"; + final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(packageName); - final StringSchema innerProperty = StringSchema.builder().id("innerProperty").build(); - final StringSchema outerProperty = StringSchema.builder().id("outerProperty").build(); + final StringSchema innerProperty = StringSchema.builder().build(); + final StringSchema outerProperty = StringSchema.builder().build(); final ObjectSchema objectSchema_1 = ObjectSchema.builder().addPropertySchema("innerProperty", innerProperty).id(outerClass).build(); final ObjectSchema objectSchema_2 = ObjectSchema.builder().addPropertySchema("outerProperty", outerProperty).id(innerClass).build(); - definitionBuilderVisitor.visitEnter(objectSchema_1); - definitionBuilderVisitor.visitEnter(objectSchema_2); - definitionBuilderVisitor.visit(innerProperty); - definitionBuilderVisitor.visitLeave(objectSchema_2); - definitionBuilderVisitor.visit(outerProperty); - definitionBuilderVisitor.visitLeave(objectSchema_1); + definitionBuilderVisitor.enter(outerClass, objectSchema_1); + definitionBuilderVisitor.enter(innerClass, objectSchema_2); + definitionBuilderVisitor.visit("innerProperty", innerProperty); + definitionBuilderVisitor.leave(objectSchema_2); + definitionBuilderVisitor.visit("outerProperty", outerProperty); + definitionBuilderVisitor.leave(objectSchema_1); final List definitions = definitionBuilderVisitor.getDefinitions(); @@ -66,12 +66,12 @@ public void shouldGenerateClassDefinitionWithBooleanSchemaProperty() throws Exce final String outerClass = "OuterClass"; final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(packageName); - final BooleanSchema outerProperty = BooleanSchema.builder().id("outerProperty").build(); + final BooleanSchema outerProperty = BooleanSchema.builder().build(); final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("outerProperty", outerProperty).id(outerClass).build(); - definitionBuilderVisitor.visitEnter(objectSchema); - definitionBuilderVisitor.visit(outerProperty); - definitionBuilderVisitor.visitLeave(objectSchema); + definitionBuilderVisitor.enter("outerClass", objectSchema); + definitionBuilderVisitor.visit("outerProperty", outerProperty); + definitionBuilderVisitor.leave(objectSchema); final List definitions = definitionBuilderVisitor.getDefinitions(); @@ -89,7 +89,7 @@ public void shouldGenerateClassDefinitionWithNumberSchemaProperty() throws Excep final String outerClass = "OuterClass"; final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(packageName); - final NumberSchema numberProperty = NumberSchema.builder().id("numberProperty").build(); + final NumberSchema numberProperty = NumberSchema.builder().build(); final NumberSchema integerProperty = NumberSchema.builder().requiresInteger(true).id("integerProperty").build(); final ObjectSchema objectSchema = ObjectSchema.builder() @@ -98,10 +98,10 @@ public void shouldGenerateClassDefinitionWithNumberSchemaProperty() throws Excep .id(outerClass) .build(); - definitionBuilderVisitor.visitEnter(objectSchema); - definitionBuilderVisitor.visit(numberProperty); - definitionBuilderVisitor.visit(integerProperty); - definitionBuilderVisitor.visitLeave(objectSchema); + definitionBuilderVisitor.enter("outerClass", objectSchema); + definitionBuilderVisitor.visit("numberProperty", numberProperty); + definitionBuilderVisitor.visit("integerProperty", integerProperty); + definitionBuilderVisitor.leave(objectSchema); final List definitions = definitionBuilderVisitor.getDefinitions(); @@ -116,52 +116,4 @@ public void shouldGenerateClassDefinitionWithNumberSchemaProperty() throws Excep assertThat(definitions.get(0).getFieldDefinitions().get(1).getFieldName(), is("integerProperty")); assertThat(definitions.get(0).getFieldDefinitions().get(1).getClassName().getFullyQualifiedName(), is("java.lang.Integer")); } - - @Test - public void shouldThrowExceptionIfSchemaIdIsNotSetOnObjectSchema() throws Exception { - expectedException.expect(UnsupportedSchemaException.class); - expectedException.expectMessage(INVALID_SCHEMA_ID_MESSAGE); - - final String packageName = "org.bloggs.fred"; - final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(packageName); - final ObjectSchema objectSchema = ObjectSchema.builder().build(); - - definitionBuilderVisitor.visitEnter(objectSchema); - } - - @Test - public void shouldThrowExceptionIfSchemaIdIsNotSetOnStringSchema() throws Exception { - expectedException.expect(UnsupportedSchemaException.class); - expectedException.expectMessage(INVALID_SCHEMA_ID_MESSAGE); - - final String packageName = "org.bloggs.fred"; - final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(packageName); - final StringSchema stringSchema = StringSchema.builder().build(); - - definitionBuilderVisitor.visit(stringSchema); - } - - @Test - public void shouldThrowExceptionIfSchemaIdIsNotSetOnBooleanSchema() throws Exception { - expectedException.expect(UnsupportedSchemaException.class); - expectedException.expectMessage(INVALID_SCHEMA_ID_MESSAGE); - - final String packageName = "org.bloggs.fred"; - final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(packageName); - final BooleanSchema booleanSchema = BooleanSchema.builder().build(); - - definitionBuilderVisitor.visit(booleanSchema); - } - - @Test - public void shouldThrowExceptionIfSchemaIdIsNotSetOnNumberSchema() throws Exception { - expectedException.expect(UnsupportedSchemaException.class); - expectedException.expectMessage(INVALID_SCHEMA_ID_MESSAGE); - - final String packageName = "org.bloggs.fred"; - final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(packageName); - final NumberSchema numberSchema = NumberSchema.builder().build(); - - definitionBuilderVisitor.visit(numberSchema); - } } diff --git a/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/core/JsonSchemaWrapperTest.java b/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/core/JsonSchemaWrapperTest.java index 847a7c6..d57c346 100644 --- a/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/core/JsonSchemaWrapperTest.java +++ b/pojo-generator-core/src/test/java/uk/gov/justice/generation/pojo/core/JsonSchemaWrapperTest.java @@ -34,129 +34,149 @@ public class JsonSchemaWrapperTest { @Test public void shouldWrapObjectSchema() { - final ObjectSchema objectSchema = ObjectSchema.builder().build(); + final String fieldName = "myFieldName"; + final ObjectSchema objectSchema = ObjectSchema.builder().id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); + verify(visitor).enter(fieldName, objectSchema); } @Test public void shouldVisitObjectAndStringSchema() { + final StringSchema stringSchema = StringSchema.builder().build(); - final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("field", stringSchema).build(); + final String fieldName = "fieldName"; + final String childFieldName = "childFieldName"; + final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, stringSchema).id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); - verify(visitor).visit(stringSchema); - verify(visitor).visitLeave(objectSchema); + verify(visitor).enter(fieldName, objectSchema); + verify(visitor).visit(childFieldName, stringSchema); + verify(visitor).leave(objectSchema); } @Test public void shouldVisitObjectAndBooleanSchema() { final BooleanSchema booleanSchema = BooleanSchema.INSTANCE; - final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("field", booleanSchema).build(); + final String fieldName = "fieldName"; + final String childFieldName = "childFieldName"; + final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, booleanSchema).id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); - verify(visitor).visit(booleanSchema); - verify(visitor).visitLeave(objectSchema); + verify(visitor).enter(fieldName, objectSchema); + verify(visitor).visit(childFieldName, booleanSchema); + verify(visitor).leave(objectSchema); } @Test public void shouldVisitObjectAndNumberSchema() { + final String fieldName = "fieldName"; + final String childFieldName = "childFieldName"; final NumberSchema numberSchema = NumberSchema.builder().build(); - final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("field", numberSchema).build(); + final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, numberSchema).id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); - verify(visitor).visit(numberSchema); - verify(visitor).visitLeave(objectSchema); + verify(visitor).enter(fieldName, objectSchema); + verify(visitor).visit(childFieldName, numberSchema); + verify(visitor).leave(objectSchema); } @Test public void shouldVisitObjectAndEnumSchema() { + final String fieldName = "fieldName"; + final String childFieldName = "childFieldName"; final EnumSchema enumSchema = EnumSchema.builder().build(); - final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("field", enumSchema).build(); + final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, enumSchema).id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); - verify(visitor).visit(enumSchema); - verify(visitor).visitLeave(objectSchema); + verify(visitor).enter(fieldName, objectSchema); + verify(visitor).visit(childFieldName, enumSchema); + verify(visitor).leave(objectSchema); } @Test public void shouldVisitObjectAndNullSchema() { + final String fieldName = "fieldName"; + final String childFieldName = "childFieldName"; final NullSchema nullSchema = NullSchema.INSTANCE; - final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("field", nullSchema).build(); + final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, nullSchema).id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); - verify(visitor).visit(nullSchema); - verify(visitor).visitLeave(objectSchema); + verify(visitor).enter(fieldName, objectSchema); + verify(visitor).visit(childFieldName, nullSchema); + verify(visitor).leave(objectSchema); } @Test public void shouldVisitObjectAndEmptySchema() { + final String fieldName = "fieldName"; + final String childFieldName = "childFieldName"; final EmptySchema emptySchema = EmptySchema.INSTANCE; - final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("field", emptySchema).build(); + final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, emptySchema).id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); - verify(visitor).visit(emptySchema); - verify(visitor).visitLeave(objectSchema); + verify(visitor).enter(fieldName, objectSchema); + verify(visitor).visit(childFieldName, emptySchema); + verify(visitor).leave(objectSchema); } @Test public void shouldVisitObjectAndReferenceSchema() { + final String fieldName = "fieldName"; + final String childFieldName = "childFieldName"; final ReferenceSchema referenceSchema = ReferenceSchema.builder().build(); - final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("field", referenceSchema).build(); + final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, referenceSchema).id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); - verify(visitor).visit(referenceSchema); - verify(visitor).visitLeave(objectSchema); + verify(visitor).enter(fieldName, objectSchema); + verify(visitor).visit(childFieldName, referenceSchema); + verify(visitor).leave(objectSchema); } @Test public void shouldVisitObjectAndArraySchema() { + final String fieldName = "fieldName"; + final String childFieldName = "childFieldName"; final ArraySchema arraySchema = ArraySchema.builder().build(); - final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("field", arraySchema).build(); + final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, arraySchema).id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); - verify(visitor).visit(arraySchema); - verify(visitor).visitLeave(objectSchema); + verify(visitor).enter(fieldName, objectSchema); + verify(visitor).visit(childFieldName, arraySchema); + verify(visitor).leave(objectSchema); } @Test public void shouldVisitObjectAndCombinedSchema() { + final String fieldName = "fieldName"; + final String childFieldName = "childFieldName"; final CombinedSchema combinedSchema = CombinedSchema.builder().criterion(ANY_CRITERION).build(); - final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema("field", combinedSchema).build(); + final ObjectSchema objectSchema = ObjectSchema.builder().addPropertySchema(childFieldName, combinedSchema).id(fieldName).build(); final JsonSchemaWrapper jsonSchemaWrapper = new JsonSchemaWrapper(objectSchema); jsonSchemaWrapper.accept(visitor); - verify(visitor).visitEnter(objectSchema); - verify(visitor).visit(combinedSchema); - verify(visitor).visitLeave(objectSchema); + verify(visitor).enter(fieldName, objectSchema); + verify(visitor).visit(childFieldName, combinedSchema); + verify(visitor).leave(objectSchema); } @Test diff --git a/pojo-generator-core/src/test/resources/schemas/person-schema.json b/pojo-generator-core/src/test/resources/schemas/person-schema.json index 079ae83..1e68c8b 100644 --- a/pojo-generator-core/src/test/resources/schemas/person-schema.json +++ b/pojo-generator-core/src/test/resources/schemas/person-schema.json @@ -4,12 +4,10 @@ "id": "person", "properties": { "firstName": { - "type": "string", - "id": "firstName" + "type": "string" }, "lastName": { - "type": "string", - "id": "lastName" + "type": "string" } }, "additionalProperties": false, diff --git a/pojo-generator-core/src/test/resources/schemas/simple-property-schema.json b/pojo-generator-core/src/test/resources/schemas/simple-property-schema.json index 33af512..0d5fb49 100644 --- a/pojo-generator-core/src/test/resources/schemas/simple-property-schema.json +++ b/pojo-generator-core/src/test/resources/schemas/simple-property-schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-04/schema#", - "id": "/", + "id": "simpleProperty", "type": "object", "properties": { "stringProperty": { diff --git a/pojo-generator-core/src/test/resources/schemas/strings-schema.json b/pojo-generator-core/src/test/resources/schemas/strings-schema.json index 60cca44..661debe 100644 --- a/pojo-generator-core/src/test/resources/schemas/strings-schema.json +++ b/pojo-generator-core/src/test/resources/schemas/strings-schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-04/schema#", - "id": "/", + "id": "stringsExample", "type": "array", "items": { "type": "string"