From db81ca25cfe3e4f68ea050650a1499da6a6f9198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Marti=C5=A1ka?= Date: Fri, 1 Apr 2022 10:47:25 +0200 Subject: [PATCH 1/2] Test for bean validation directives --- .../BeanValidationGraphQLDirectivesTest.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/BeanValidationGraphQLDirectivesTest.java diff --git a/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/BeanValidationGraphQLDirectivesTest.java b/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/BeanValidationGraphQLDirectivesTest.java new file mode 100644 index 0000000000000..faab1536063f1 --- /dev/null +++ b/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/BeanValidationGraphQLDirectivesTest.java @@ -0,0 +1,72 @@ +package io.quarkus.smallrye.graphql.deployment; + +import static io.restassured.RestAssured.get; +import static org.hamcrest.Matchers.containsString; + +import javax.validation.Valid; +import javax.validation.constraints.Size; + +import org.eclipse.microprofile.graphql.GraphQLApi; +import org.eclipse.microprofile.graphql.Query; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusUnitTest; + +/** + * Basic test to verify that bean validation constraints on input fields are transformed into GraphQL directives when + * the option to include directives in the schema is enabled. + */ +public class BeanValidationGraphQLDirectivesTest extends AbstractGraphQLTest { + + @RegisterExtension + static QuarkusUnitTest test = new QuarkusUnitTest() + .withApplicationRoot((jar) -> jar + .addClasses(Person.class) + .addAsResource(new StringAsset("quarkus.smallrye-graphql.schema-include-directives=true"), + "application.properties") + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")); + + @Test + public void validateDirectivesPresentInSchema() { + get("/graphql/schema.graphql") + .then() + .body(containsString("input PersonInput {\n" + + " name: String @constraint(maxLength : 20, minLength : 5)\n" + + "}\n")) + .body(containsString( + "queryWithConstrainedArgument(constrained: String @constraint(maxLength : 123)): String")); + } + + @GraphQLApi + public static class ValidationApi { + + @Query + public String query(@Valid Person person) { + return null; + } + + @Query + public String queryWithConstrainedArgument(@Size(max = 123) String constrained) { + return null; + } + + } + + public static class Person { + + @Size(min = 5, max = 20) + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } + +} From 0492b43b48a8e34fd344a6c0e8ec192a8792690a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Marti=C5=A1ka?= Date: Wed, 6 Apr 2022 10:52:20 +0200 Subject: [PATCH 2/2] Test for integration between Stork and GraphQL client --- .../deployment/pom.xml | 7 +++- .../deployment/StorkAndGraphQLClientTest.java | 42 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 extensions/smallrye-graphql-client/deployment/src/test/java/io/quarkus/smallrye/graphql/client/deployment/StorkAndGraphQLClientTest.java diff --git a/extensions/smallrye-graphql-client/deployment/pom.xml b/extensions/smallrye-graphql-client/deployment/pom.xml index 4151dbec5dab3..8c20533d1223c 100644 --- a/extensions/smallrye-graphql-client/deployment/pom.xml +++ b/extensions/smallrye-graphql-client/deployment/pom.xml @@ -53,6 +53,11 @@ quarkus-smallrye-graphql-deployment test + + io.smallrye.stork + stork-service-discovery-static-list + test + @@ -74,4 +79,4 @@ - \ No newline at end of file + diff --git a/extensions/smallrye-graphql-client/deployment/src/test/java/io/quarkus/smallrye/graphql/client/deployment/StorkAndGraphQLClientTest.java b/extensions/smallrye-graphql-client/deployment/src/test/java/io/quarkus/smallrye/graphql/client/deployment/StorkAndGraphQLClientTest.java new file mode 100644 index 0000000000000..70e0f1e9fb9f0 --- /dev/null +++ b/extensions/smallrye-graphql-client/deployment/src/test/java/io/quarkus/smallrye/graphql/client/deployment/StorkAndGraphQLClientTest.java @@ -0,0 +1,42 @@ +package io.quarkus.smallrye.graphql.client.deployment; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; + +import javax.inject.Inject; + +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.smallrye.graphql.client.deployment.model.Person; +import io.quarkus.smallrye.graphql.client.deployment.model.TestingGraphQLApi; +import io.quarkus.smallrye.graphql.client.deployment.model.TestingGraphQLClientApi; +import io.quarkus.test.QuarkusUnitTest; + +public class StorkAndGraphQLClientTest { + + @RegisterExtension + static QuarkusUnitTest test = new QuarkusUnitTest() + .withApplicationRoot((jar) -> jar + .addClasses(TestingGraphQLApi.class, TestingGraphQLClientApi.class, Person.class) + .addAsResource(new StringAsset( + "quarkus.smallrye-graphql-client.typesafeclient.url=stork://foo-service/graphql\n" + + "quarkus.stork.foo-service.service-discovery.type=static\n" + + "quarkus.stork.foo-service.service-discovery.address-list=${quarkus.http.host:localhost}:${quarkus.http.test-port:8081}"), + "application.properties") + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")); + + @Inject + TestingGraphQLClientApi client; + + @Test + public void performQuery() { + List people = client.people(); + assertEquals("John", people.get(0).getFirstName()); + assertEquals("Arthur", people.get(1).getFirstName()); + } + +}