Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit 2ae43a0

Browse files
authored
Java, adds schema validator test (#272)
* Adds schemavalidator test * Adds SchemaValidatorTest
1 parent e7cfbe0 commit 2ae43a0

File tree

6 files changed

+123
-20
lines changed

6 files changed

+123
-20
lines changed

samples/client/petstore/java/.openapi-generator/FILES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ src/main/java/org/openapijsonschematools/schemas/validators/KeywordValidator.jav
1010
src/main/java/org/openapijsonschematools/schemas/validators/TypeValidator.java
1111
src/test/java/org/openapijsonschematools/configurations/JsonSchemaKeywordFlagsTest.java
1212
src/test/java/org/openapijsonschematools/schemas/CustomIsoparserTest.java
13+
src/test/java/org/openapijsonschematools/schemas/SchemaValidatorTest.java
1314
src/test/java/org/openapijsonschematools/schemas/validators/TypeValidatorTest.java

samples/client/petstore/java/src/main/java/org/openapijsonschematools/schemas/SchemaValidator.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,31 @@
33
import org.openapijsonschematools.schemas.validators.KeywordValidator;
44
import org.openapijsonschematools.schemas.validators.TypeValidator;
55

6-
import java.lang.reflect.Field;
6+
import java.lang.reflect.InvocationTargetException;
7+
import java.lang.reflect.RecordComponent;
78
import java.util.HashMap;
89
import java.util.LinkedHashSet;
910
import java.util.Map;
1011

11-
public class SchemaValidator {
12+
public interface SchemaValidator {
1213
static final HashMap<String, KeywordValidator> keywordToValidator = new HashMap(){{
1314
put("type", new TypeValidator());
1415
}};
1516
static PathToSchemasMap _validate(
16-
Class<SchemaValidator> cls,
17+
SchemaValidator schema,
1718
Object arg,
1819
ValidationMetadata validationMetadata
19-
) throws InstantiationException, IllegalAccessException {
20-
SchemaValidator clsSchema = cls.newInstance();
21-
Field[] fields = cls.getDeclaredFields();
20+
) throws InvocationTargetException, IllegalAccessException {
2221
HashMap<String, Object> fieldsToValues = new HashMap<>();
2322
LinkedHashSet<String> disabledKeywords = validationMetadata.configuration().disabledKeywordFlags().getKeywords();
24-
for (Field field : fields) {
25-
String fieldName = field.getName();
23+
Class<SchemaValidator> schemaCls = (Class<SchemaValidator>) schema.getClass();
24+
RecordComponent[] recordComponents = schemaCls.getRecordComponents();
25+
for (RecordComponent recordComponent : recordComponents) {
26+
String fieldName = recordComponent.getName();
2627
if (disabledKeywords.contains(fieldName)) {
2728
continue;
2829
}
29-
Object value = field.get(clsSchema);
30+
Object value = recordComponent.getAccessor().invoke(schema);
3031
fieldsToValues.put(fieldName, value);
3132
}
3233
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
@@ -38,7 +39,7 @@ static PathToSchemasMap _validate(
3839
arg,
3940
value,
4041
null,
41-
cls,
42+
schemaCls,
4243
validationMetadata
4344
);
4445
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.openapijsonschematools.schemas;
2+
3+
import org.junit.Test;
4+
import org.openapijsonschematools.configurations.JsonSchemaKeywordFlags;
5+
import org.openapijsonschematools.configurations.SchemaConfiguration;
6+
7+
import java.lang.reflect.InvocationTargetException;
8+
import java.util.ArrayList;
9+
import java.util.LinkedHashSet;
10+
11+
record SomeSchema(LinkedHashSet<Class<?>> type) implements SchemaValidator {
12+
static SomeSchema withDefaults() {
13+
LinkedHashSet<Class<?>> type = new LinkedHashSet<>();
14+
type.add(String.class);
15+
return new SomeSchema(type);
16+
}
17+
18+
static PathToSchemasMap _validate(
19+
Object arg,
20+
ValidationMetadata validationMetadata
21+
) throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
22+
return SchemaValidator._validate(
23+
SomeSchema.withDefaults(),
24+
arg,
25+
validationMetadata
26+
);
27+
}
28+
29+
30+
}
31+
32+
public class SchemaValidatorTest {
33+
34+
35+
@Test
36+
public void testValidateSucceeds() throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
37+
ValidationMetadata validationMetadata = new ValidationMetadata(
38+
new ArrayList<>(),
39+
new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone()),
40+
new PathToSchemasMap(),
41+
new LinkedHashSet<>()
42+
);
43+
SomeSchema._validate(
44+
"hi",
45+
validationMetadata
46+
);
47+
}
48+
}

src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,10 @@ public void processOpts() {
281281
"src/main/java/org/openapitools/schemas/SchemaValidator.hbs",
282282
packagePath() + File.separatorChar + "schemas",
283283
"SchemaValidator.java"));
284+
supportingFiles.add(new SupportingFile(
285+
"src/test/java/org/openapitools/schemas/SchemaValidatorTest.hbs",
286+
testPackagePath() + File.separatorChar + "schemas",
287+
"SchemaValidatorTest.java"));
284288

285289
// keyword validators
286290
supportingFiles.add(new SupportingFile(

src/main/resources/java/src/main/java/org/openapitools/schemas/SchemaValidator.hbs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,31 @@ package org.openapijsonschematools.schemas;
33
import org.openapijsonschematools.schemas.validators.KeywordValidator;
44
import org.openapijsonschematools.schemas.validators.TypeValidator;
55

6-
import java.lang.reflect.Field;
6+
import java.lang.reflect.InvocationTargetException;
7+
import java.lang.reflect.RecordComponent;
78
import java.util.HashMap;
89
import java.util.LinkedHashSet;
910
import java.util.Map;
1011

11-
public class SchemaValidator {
12+
public interface SchemaValidator {
1213
static final HashMap<String, KeywordValidator> keywordToValidator = new HashMap()\{{
1314
put("type", new TypeValidator());
1415
}};
1516
static PathToSchemasMap _validate(
16-
Class<SchemaValidator> cls,
17+
SchemaValidator schema,
1718
Object arg,
1819
ValidationMetadata validationMetadata
19-
) throws InstantiationException, IllegalAccessException {
20-
SchemaValidator clsSchema = cls.newInstance();
21-
Field[] fields = cls.getDeclaredFields();
20+
) throws InvocationTargetException, IllegalAccessException {
2221
HashMap<String, Object> fieldsToValues = new HashMap<>();
2322
LinkedHashSet<String> disabledKeywords = validationMetadata.configuration().disabledKeywordFlags().getKeywords();
24-
for (Field field : fields) {
25-
String fieldName = field.getName();
23+
Class<SchemaValidator> schemaCls = (Class<SchemaValidator>) schema.getClass();
24+
RecordComponent[] recordComponents = schemaCls.getRecordComponents();
25+
for (RecordComponent recordComponent : recordComponents) {
26+
String fieldName = recordComponent.getName();
2627
if (disabledKeywords.contains(fieldName)) {
2728
continue;
2829
}
29-
Object value = field.get(clsSchema);
30+
Object value = recordComponent.getAccessor().invoke(schema);
3031
fieldsToValues.put(fieldName, value);
3132
}
3233
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
@@ -38,7 +39,7 @@ public class SchemaValidator {
3839
arg,
3940
value,
4041
null,
41-
cls,
42+
schemaCls,
4243
validationMetadata
4344
);
4445
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package {{{packageName}}}.schemas;
2+
3+
import org.junit.Test;
4+
import {{{packageName}}}.configurations.JsonSchemaKeywordFlags;
5+
import {{{packageName}}}.configurations.SchemaConfiguration;
6+
7+
import java.lang.reflect.InvocationTargetException;
8+
import java.util.ArrayList;
9+
import java.util.LinkedHashSet;
10+
11+
record SomeSchema(LinkedHashSet<Class<?>> type) implements SchemaValidator {
12+
static SomeSchema withDefaults() {
13+
LinkedHashSet<Class<?>> type = new LinkedHashSet<>();
14+
type.add(String.class);
15+
return new SomeSchema(type);
16+
}
17+
18+
static PathToSchemasMap _validate(
19+
Object arg,
20+
ValidationMetadata validationMetadata
21+
) throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
22+
return SchemaValidator._validate(
23+
SomeSchema.withDefaults(),
24+
arg,
25+
validationMetadata
26+
);
27+
}
28+
29+
30+
}
31+
32+
public class SchemaValidatorTest {
33+
34+
35+
@Test
36+
public void testValidateSucceeds() throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
37+
ValidationMetadata validationMetadata = new ValidationMetadata(
38+
new ArrayList<>(),
39+
new SchemaConfiguration(JsonSchemaKeywordFlags.ofNone()),
40+
new PathToSchemasMap(),
41+
new LinkedHashSet<>()
42+
);
43+
SomeSchema._validate(
44+
"hi",
45+
validationMetadata
46+
);
47+
}
48+
}

0 commit comments

Comments
 (0)