Skip to content

Commit cc430b2

Browse files
rubik-cube-manjmartisk
authored andcommitted
Add support for the client supporting serializing enum values
1 parent b0b9538 commit cc430b2

6 files changed

Lines changed: 43 additions & 2 deletions

File tree

client/implementation/src/main/java/io/smallrye/graphql/client/impl/RequestImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ private JsonObject _formatJsonVariables() {
7070
varBuilder.add(k, (Long) v);
7171
} else if (v instanceof Double) {
7272
varBuilder.add(k, (Double) v);
73+
} else if (v instanceof Enum<?>) {
74+
varBuilder.add(k, ((Enum<?>) v).name());
7375
} else if (v == null) {
7476
varBuilder.addNull(k);
7577
} else {

client/implementation/src/test/java/io/smallrye/graphql/client/RequestImplTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,18 @@ public void testComplexTypesToJson() {
4949
map.put("ids", arr);
5050
request.setVariable("key", map);
5151
assertEquals("{\"query\":\"example\",\"variables\":{\"key\":{\"ids\":[1,2]}}}", request.toJson());
52+
53+
request.setVariable("key", new TestRecord(TestEnum.TEST));
54+
assertEquals("{\"query\":\"example\",\"variables\":{\"key\":{\"enumValue\":\"TEST\"}}}", request.toJson());
55+
56+
request.setVariable("key", TestEnum.TEST);
57+
assertEquals("{\"query\":\"example\",\"variables\":{\"key\":\"TEST\"}}", request.toJson());
58+
}
59+
60+
public record TestRecord(TestEnum enumValue) {
61+
}
62+
63+
public enum TestEnum {
64+
TEST
5265
}
5366
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package io.smallrye.graphql.tests.client.dynamic;
2+
3+
public enum DummyEnum {
4+
ZERO,
5+
ONE,
6+
TWO,
7+
THREE
8+
}

server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientApi.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ public Dummy queryWithArgument2(@Name(value = "obj") DummyObject obj) {
4343
return ret;
4444
}
4545

46+
@Query
47+
public Dummy queryWithArgument3(@Name(value = "obj") DummyEnum obj) {
48+
Dummy ret = new Dummy();
49+
ret.setInteger(obj.ordinal());
50+
return ret;
51+
}
52+
4653
@Query
4754
public Dummy withRenamedField() {
4855
Dummy ret = new Dummy();

server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientInjectionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static WebArchive deployment() {
3939
"dummy/mp-graphql/url=http://localhost:9090/client-injection-test/graphql\n" +
4040
"dummy/mp-graphql/header/My-Custom-Header=Header-Value"),
4141
"META-INF/microprofile-config.properties")
42-
.addClasses(DynamicClientApi.class, DummyObject.class, Dummy.class);
42+
.addClasses(DynamicClientApi.class, DummyObject.class, DummyEnum.class, Dummy.class);
4343
}
4444

4545
@Inject

server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientSingleOperationsTestBase.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public abstract class DynamicClientSingleOperationsTestBase {
3636
@Deployment
3737
public static WebArchive deployment() {
3838
return ShrinkWrap.create(WebArchive.class, "integration-test.war")
39-
.addClasses(DynamicClientApi.class, DummyObject.class, Dummy.class);
39+
.addClasses(DynamicClientApi.class, DummyObject.class, DummyEnum.class, Dummy.class);
4040
}
4141

4242
@ArquillianResource
@@ -96,6 +96,17 @@ public void testStringQueryWithObject() throws ExecutionException, InterruptedEx
9696
assertEquals("a", data.getJsonObject("queryWithArgument2").getJsonObject("dummyObject").getString("a"));
9797
}
9898

99+
@Test
100+
public void testStringQueryWithEnum() throws ExecutionException, InterruptedException {
101+
Map<String, Object> vars = new HashMap<>();
102+
vars.put("x", DummyEnum.TWO);
103+
JsonObject data = client
104+
.executeSync("query($x: DummyEnum) {queryWithArgument3(obj: $x){integer}}", vars)
105+
.getData();
106+
System.out.println(data);
107+
assertEquals(2, data.getJsonObject("queryWithArgument3").getInt("integer"));
108+
}
109+
99110
@Test
100111
public void testStringQueryWithMultipleOperations() throws ExecutionException, InterruptedException {
101112
String query = "query a {simple{integer}} " +

0 commit comments

Comments
 (0)