diff --git a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java index 1c682b2d9..b3182ae17 100644 --- a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java +++ b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java @@ -1031,6 +1031,8 @@ private GraphQLOutputType getGraphQLTypeFromJavaType(Class clazz) { classCache.putIfAbsent(clazz, enumType); return enumType; + } else if (clazz.isArray()) { + return GraphQLList.list(JavaScalars.of(clazz.getComponentType())); } return JavaScalars.of(clazz); diff --git a/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/BooksSchemaBuildTest.java b/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/BooksSchemaBuildTest.java index fdf8c977b..94c88697f 100644 --- a/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/BooksSchemaBuildTest.java +++ b/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/BooksSchemaBuildTest.java @@ -17,13 +17,16 @@ package com.introproventures.graphql.jpa.query.schema; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.BDDAssertions.then; +import static org.assertj.core.api.BDDAssertions.thenCode; -import java.util.stream.Collectors; +import java.util.Optional; import javax.persistence.EntityManager; import com.introproventures.graphql.jpa.query.schema.impl.GraphQLJpaSchemaBuilder; import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLList; import graphql.schema.GraphQLSchema; import org.junit.Before; import org.junit.Test; @@ -99,18 +102,13 @@ public void correctlyDerivesToManyOptionalFromGivenEntities() { .isNotNull(); //then - assertThat(schema.getQueryType() - .getFieldDefinition("Book") - .getType() - .getChildren() - .stream() - .map(GraphQLFieldDefinition.class::cast) - .collect(Collectors.toList()) - ) - .filteredOn("name", "author") - .extracting(it -> it.getArgument("optional")) - .extractingResultOf("getDefaultValue", Object.class) - .containsExactly(new Boolean(false)); + assertThat(getFieldForType("author", + "Book", + schema)) + .isPresent().get() + .extracting(it -> it.getArgument("optional")) + .extracting("defaultValue") + .containsExactly(Boolean.FALSE); } @Test @@ -124,20 +122,45 @@ public void correctlyDerivesToOneOptionalFromGivenEntities() { .isNotNull(); //then - assertThat(schema.getQueryType() - .getFieldDefinition("Author") - .getType() - .getChildren() - .stream() - .map(GraphQLFieldDefinition.class::cast) - .collect(Collectors.toList()) - ) - .filteredOn("name", "books") - .extracting(it -> it.getArgument("optional")) - .extractingResultOf("getDefaultValue", Object.class) - .containsExactly(new Boolean(true)); + assertThat(getFieldForType("books", + "Author", + schema)) + .isPresent().get() + .extracting(it -> it.getArgument("optional")) + .extracting("defaultValue") + .containsExactly(Boolean.TRUE); } - + + @Test + public void shouldBuildSchemaWithStringArrayAsStringListType() { + //given + //there is a property in the model that is of array type + + //when + GraphQLSchema schema = builder.build(); + + //then + Optional tags = getFieldForType("tags", + "SuperBook", + schema); + then(tags) + .isPresent().get() + .extracting(GraphQLFieldDefinition::getType) + .isInstanceOf(GraphQLList.class) + .extracting("wrappedType") + .extracting("name") + .containsOnly("String"); + } + + @Test + public void shouldBuildSchemaWithStringArrayAsStringListTypeWithoutAnyError() { + //given + //there is a property in the model that is of array type + + //then + thenCode(() -> builder.build()).doesNotThrowAnyException(); + } + @Test public void testBuildSchema(){ //given @@ -146,5 +169,18 @@ public void testBuildSchema(){ //then assertThat(schema).isNotNull(); } - + + private Optional getFieldForType(String fieldName, + String type, + GraphQLSchema schema) { + return schema.getQueryType() + .getFieldDefinition(type) + .getType() + .getChildren() + .stream() + .map(GraphQLFieldDefinition.class::cast) + .filter(graphQLFieldDefinition -> graphQLFieldDefinition.getName().equals(fieldName)) + .findFirst(); + } + } \ No newline at end of file diff --git a/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/model/book_superclass/BaseBook.java b/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/model/book_superclass/BaseBook.java index 56eefae83..fae7f97f9 100644 --- a/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/model/book_superclass/BaseBook.java +++ b/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/model/book_superclass/BaseBook.java @@ -20,4 +20,6 @@ public class BaseBook { SuperGenre genre; Date publicationDate; + + String[] tags; }