Skip to content

Commit 0a6a20c

Browse files
committed
Query list
1 parent 85add04 commit 0a6a20c

3 files changed

Lines changed: 61 additions & 9 deletions

File tree

‎src/main/java/nl/kingdev/graphqlclient/Client.java‎

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
5+
import com.google.gson.JsonArray;
56
import com.google.gson.JsonObject;
7+
import com.google.gson.reflect.TypeToken;
68
import nl.kingdev.graphqlclient.query.Query;
79
import nl.kingdev.graphqlclient.util.HttpUtil;
810

11+
import java.util.ArrayList;
912
import java.util.HashMap;
13+
import java.util.List;
1014
import java.util.Map;
1115

1216

@@ -22,15 +26,21 @@ public Client(String uri) {
2226
}
2327

2428

25-
public <T> T query(Query query, String name, Class<T> type) {
29+
private JsonObject makeQueryJson(Query query) {
2630
JsonObject request = new JsonObject();
2731
request.addProperty("query", query.getQuery());
2832

2933
JsonObject variables = new JsonObject();
3034
query.getVariables().forEach((k, v) -> variables.addProperty(k, v.toString()));
3135
request.add("variables", variables);
3236

37+
return request;
38+
}
39+
40+
public <T> T first(Query query, String name, Class<T> type) {
41+
3342
try {
43+
JsonObject request = makeQueryJson(query);
3444
JsonObject result = gson.fromJson(HttpUtil.post(this.uri, request.toString()), JsonObject.class);
3545
return gson.fromJson(result.get("data").getAsJsonObject().get(name), type);
3646
} catch (Exception e) {
@@ -40,6 +50,22 @@ public <T> T query(Query query, String name, Class<T> type) {
4050
return null;
4151
}
4252

53+
public <T> List<T> query(Query query, String name, Class<T> type) {
54+
55+
try {
56+
JsonObject request = makeQueryJson(query);
57+
JsonObject result = gson.fromJson(HttpUtil.post(this.uri, request.toString()), JsonObject.class);
58+
JsonArray array = result.get("data").getAsJsonObject().get(name).getAsJsonArray();
59+
return gson.fromJson(array, new TypeToken<T>(){}.getType());
60+
} catch (Exception e) {
61+
e.printStackTrace();
62+
}
63+
64+
return null;
65+
}
66+
67+
68+
4369

4470
public String getUri() {
4571
return uri;

‎src/test/java/nl/kingdev/graphqlclient/ClientTest.java‎

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import nl.kingdev.graphqlclient.query.Query;
44
import org.junit.Test;
55

6-
import static org.junit.Assert.assertEquals;
7-
import static org.junit.Assert.assertNotNull;
6+
import java.util.List;
7+
8+
import static org.junit.Assert.*;
89

910
public class ClientTest {
1011

@@ -25,9 +26,9 @@ public void headers() {
2526
}
2627

2728
@Test
28-
public void query() {
29+
public void queryOne() {
2930
Client client = makeClient();
30-
User user = client.query(
31+
User user = client.first(
3132
new Query("query user($id: ID!) { user(id: $id) { id, name, email } }")
3233
.setVariable("id", "1"),
3334
"user",
@@ -39,6 +40,29 @@ public void query() {
3940
assertEquals("[email protected]", user.getEmail());
4041

4142
}
43+
44+
private class Todo {
45+
String id, description;
46+
boolean completed;
47+
48+
@Override
49+
public String toString() {
50+
return "Todo{" +
51+
"id='" + id + '\'' +
52+
", description='" + description + '\'' +
53+
", completed=" + completed +
54+
'}';
55+
}
56+
}
57+
58+
@Test
59+
public void query() {
60+
Client client = new Client("https://api.mocki.io/v1/44cb3920");
61+
List<Todo> getTodos = client.query(new Query("query todos {getTodos {id, description, done}}"), "getTodos", Todo.class);
62+
assertNotNull(getTodos);
63+
assertTrue(getTodos.size() > 1);
64+
}
65+
4266
private Client makeClient() {
4367
return new Client(uri);
4468
}

‎src/test/resources/schema.graphql‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ type Query {
215215
todo(id: ID!): Todo
216216
users(options: PageQueryOptions): UsersPage
217217
user(id: ID!): User
218+
getTodos: [Todo]
218219
}
219220

220221
input SearchOptions {
@@ -237,13 +238,14 @@ enum SortOrderEnum {
237238
DESC
238239
}
239240

241+
240242
type Todo {
241-
id: ID
242-
title: String
243-
completed: Boolean
244-
user: User
243+
id: String
244+
description: String
245+
done: Boolean
245246
}
246247

248+
247249
type TodosPage {
248250
data: [Todo]
249251
links: PaginationLinks

0 commit comments

Comments
 (0)