Skip to content

Commit 8a68d96

Browse files
authored
Merge pull request #47367 from jmartisk/smallrye-graphql-2.13
SmallRye GraphQL 2.13.0 and support for JSON/Object scalars
2 parents df644e4 + 1a561fd commit 8a68d96

File tree

6 files changed

+156
-2
lines changed

6 files changed

+156
-2
lines changed

bom/application/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
<smallrye-health.version>4.2.0</smallrye-health.version>
5252
<smallrye-metrics.version>4.0.0</smallrye-metrics.version>
5353
<smallrye-open-api.version>4.0.9</smallrye-open-api.version>
54-
<smallrye-graphql.version>2.12.2</smallrye-graphql.version>
54+
<smallrye-graphql.version>2.13.0</smallrye-graphql.version>
5555
<smallrye-fault-tolerance.version>6.9.0</smallrye-fault-tolerance.version>
5656
<smallrye-jwt.version>4.6.1</smallrye-jwt.version>
5757
<smallrye-context-propagation.version>2.2.1</smallrye-context-propagation.version>

extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLProcessor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,10 @@ private void registerExtraScalarsInSchema(List<ExtraScalar> extraScalars) {
388388
switch (extraScalar) {
389389
case UUID:
390390
Scalars.addUuid();
391+
case OBJECT:
392+
Scalars.addObject();
393+
case JSON:
394+
Scalars.addJson();
391395
}
392396
}
393397
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package io.quarkus.smallrye.graphql.deployment;
2+
3+
import static org.hamcrest.Matchers.containsString;
4+
import static org.hamcrest.Matchers.equalTo;
5+
6+
import jakarta.json.JsonObject;
7+
8+
import org.eclipse.microprofile.graphql.GraphQLApi;
9+
import org.eclipse.microprofile.graphql.Query;
10+
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
11+
import org.jboss.shrinkwrap.api.asset.StringAsset;
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.extension.RegisterExtension;
14+
15+
import io.quarkus.test.QuarkusUnitTest;
16+
import io.restassured.RestAssured;
17+
18+
/**
19+
* Support for the JSON graphql type represented in Java as jakarta.json.JsonObject
20+
*/
21+
public class JsonObjectScalarTest extends AbstractGraphQLTest {
22+
23+
@RegisterExtension
24+
static QuarkusUnitTest test = new QuarkusUnitTest()
25+
.withApplicationRoot((jar) -> jar
26+
.addClasses(ObjectApi.class)
27+
.addAsResource(new StringAsset("quarkus.smallrye-graphql.extra-scalars=json\n" +
28+
"quarkus.smallrye-graphql.schema-include-scalars=true"),
29+
"application.properties")
30+
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"));
31+
32+
@Test
33+
public void testJsonObject() {
34+
String query = getPayload("{ echo(input: { field1: 1, field2: \"2\"}) }");
35+
RestAssured.given()
36+
.body(query)
37+
.contentType(MEDIATYPE_JSON)
38+
.post("/graphql/")
39+
.then()
40+
.assertThat()
41+
.statusCode(200)
42+
.body("data.echo.field1", equalTo(1))
43+
.body("data.echo.field2", equalTo("2"));
44+
}
45+
46+
@Test
47+
public void testJsonSchemaDefinition() {
48+
RestAssured.given()
49+
.get("/graphql/schema.graphql")
50+
.prettyPeek()
51+
.then()
52+
.assertThat()
53+
.body(containsString("scalar JSON"))
54+
.body(containsString("echo(input: JSON): JSON"))
55+
.statusCode(200);
56+
}
57+
58+
@GraphQLApi
59+
public static class ObjectApi {
60+
61+
@Query
62+
public JsonObject echo(JsonObject input) {
63+
return input;
64+
}
65+
66+
}
67+
68+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package io.quarkus.smallrye.graphql.deployment;
2+
3+
import static org.hamcrest.Matchers.containsString;
4+
import static org.hamcrest.Matchers.equalTo;
5+
6+
import org.eclipse.microprofile.graphql.GraphQLApi;
7+
import org.eclipse.microprofile.graphql.Query;
8+
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
9+
import org.jboss.shrinkwrap.api.asset.StringAsset;
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.api.extension.RegisterExtension;
12+
13+
import io.quarkus.test.QuarkusUnitTest;
14+
import io.restassured.RestAssured;
15+
16+
public class ObjectScalarTest extends AbstractGraphQLTest {
17+
18+
@RegisterExtension
19+
static QuarkusUnitTest test = new QuarkusUnitTest()
20+
.withApplicationRoot((jar) -> jar
21+
.addClasses(ObjectApi.class)
22+
.addAsResource(new StringAsset("quarkus.smallrye-graphql.extra-scalars=object\n" +
23+
"quarkus.smallrye-graphql.schema-include-scalars=true"),
24+
"application.properties")
25+
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"));
26+
27+
@Test
28+
public void testObject() {
29+
String query = getPayload("{ echo(input: { field1: 1, field2: \"2\"}) }");
30+
RestAssured.given()
31+
.body(query)
32+
.contentType(MEDIATYPE_JSON)
33+
.post("/graphql/")
34+
.then()
35+
.assertThat()
36+
.statusCode(200)
37+
.body("data.echo.field1", equalTo(1))
38+
.body("data.echo.field2", equalTo("2"));
39+
}
40+
41+
@Test
42+
public void testObjectSchemaDefinition() {
43+
RestAssured.given()
44+
.get("/graphql/schema.graphql")
45+
.prettyPeek()
46+
.then()
47+
.assertThat()
48+
.body(containsString("scalar Object"))
49+
.body(containsString("echo(input: Object): Object"))
50+
.statusCode(200);
51+
}
52+
53+
@GraphQLApi
54+
public static class ObjectApi {
55+
56+
@Query
57+
public Object echo(Object input) {
58+
return input;
59+
}
60+
61+
}
62+
63+
}

extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/ExtraScalar.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@
22

33
public enum ExtraScalar {
44

5-
UUID
5+
/**
6+
* The UUID GraphQL type, represented as a java.util.UUID
7+
*/
8+
UUID,
9+
10+
/**
11+
* The Object GraphQL type, represented as a general java.lang.Object
12+
*/
13+
OBJECT,
14+
15+
/**
16+
* The JSON GraphQL type, represented as a jakarta.json.JsonObject
17+
*/
18+
JSON
619

720
}

extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLRecorder.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ private void registerExtraScalars(List<ExtraScalar> extraScalars) {
5353
case UUID:
5454
GraphQLScalarTypes.addUuid();
5555
break;
56+
case OBJECT:
57+
GraphQLScalarTypes.addObject();
58+
break;
59+
case JSON:
60+
GraphQLScalarTypes.addJson();
61+
break;
5662
}
5763
}
5864
}

0 commit comments

Comments
 (0)