diff --git a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/RequestImpl.java b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/RequestImpl.java index c4ba60f98..a7a2dbd0f 100644 --- a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/RequestImpl.java +++ b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/RequestImpl.java @@ -70,6 +70,8 @@ private JsonObject _formatJsonVariables() { varBuilder.add(k, (Long) v); } else if (v instanceof Double) { varBuilder.add(k, (Double) v); + } else if (v instanceof Enum) { + varBuilder.add(k, ((Enum) v).name()); } else if (v == null) { varBuilder.addNull(k); } else { diff --git a/client/implementation/src/test/java/io/smallrye/graphql/client/RequestImplTest.java b/client/implementation/src/test/java/io/smallrye/graphql/client/RequestImplTest.java index 6500ce896..f8226ab4b 100644 --- a/client/implementation/src/test/java/io/smallrye/graphql/client/RequestImplTest.java +++ b/client/implementation/src/test/java/io/smallrye/graphql/client/RequestImplTest.java @@ -49,5 +49,18 @@ public void testComplexTypesToJson() { map.put("ids", arr); request.setVariable("key", map); assertEquals("{\"query\":\"example\",\"variables\":{\"key\":{\"ids\":[1,2]}}}", request.toJson()); + + request.setVariable("key", new TestRecord(TestEnum.TEST)); + assertEquals("{\"query\":\"example\",\"variables\":{\"key\":{\"enumValue\":\"TEST\"}}}", request.toJson()); + + request.setVariable("key", TestEnum.TEST); + assertEquals("{\"query\":\"example\",\"variables\":{\"key\":\"TEST\"}}", request.toJson()); + } + + public record TestRecord(TestEnum enumValue) { + } + + public enum TestEnum { + TEST } } diff --git a/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DummyEnum.java b/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DummyEnum.java new file mode 100644 index 000000000..ca5f44cc5 --- /dev/null +++ b/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DummyEnum.java @@ -0,0 +1,8 @@ +package io.smallrye.graphql.tests.client.dynamic; + +public enum DummyEnum { + ZERO, + ONE, + TWO, + THREE +} diff --git a/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientApi.java b/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientApi.java index 942099e9b..68a0e2dd4 100644 --- a/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientApi.java +++ b/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientApi.java @@ -43,6 +43,13 @@ public Dummy queryWithArgument2(@Name(value = "obj") DummyObject obj) { return ret; } + @Query + public Dummy queryWithArgument3(@Name(value = "obj") DummyEnum obj) { + Dummy ret = new Dummy(); + ret.setInteger(obj.ordinal()); + return ret; + } + @Query public Dummy withRenamedField() { Dummy ret = new Dummy(); diff --git a/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientInjectionTest.java b/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientInjectionTest.java index 78dcedcb1..89093f1ae 100644 --- a/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientInjectionTest.java +++ b/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientInjectionTest.java @@ -39,7 +39,7 @@ public static WebArchive deployment() { "dummy/mp-graphql/url=http://localhost:9090/client-injection-test/graphql\n" + "dummy/mp-graphql/header/My-Custom-Header=Header-Value"), "META-INF/microprofile-config.properties") - .addClasses(DynamicClientApi.class, DummyObject.class, Dummy.class); + .addClasses(DynamicClientApi.class, DummyObject.class, DummyEnum.class, Dummy.class); } @Inject diff --git a/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientSingleOperationsTestBase.java b/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientSingleOperationsTestBase.java index ebe89f2d9..05b1f8048 100644 --- a/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientSingleOperationsTestBase.java +++ b/server/integration-tests/src/test/java/io/smallrye/graphql/tests/client/dynamic/DynamicClientSingleOperationsTestBase.java @@ -36,7 +36,7 @@ public abstract class DynamicClientSingleOperationsTestBase { @Deployment public static WebArchive deployment() { return ShrinkWrap.create(WebArchive.class, "integration-test.war") - .addClasses(DynamicClientApi.class, DummyObject.class, Dummy.class); + .addClasses(DynamicClientApi.class, DummyObject.class, DummyEnum.class, Dummy.class); } @ArquillianResource @@ -96,6 +96,17 @@ public void testStringQueryWithObject() throws ExecutionException, InterruptedEx assertEquals("a", data.getJsonObject("queryWithArgument2").getJsonObject("dummyObject").getString("a")); } + @Test + public void testStringQueryWithEnum() throws ExecutionException, InterruptedException { + Map vars = new HashMap<>(); + vars.put("x", DummyEnum.TWO); + JsonObject data = client + .executeSync("query($x: DummyEnum) {queryWithArgument3(obj: $x){integer}}", vars) + .getData(); + System.out.println(data); + assertEquals(2, data.getJsonObject("queryWithArgument3").getInt("integer")); + } + @Test public void testStringQueryWithMultipleOperations() throws ExecutionException, InterruptedException { String query = "query a {simple{integer}} " +