Skip to content

Commit 032051e

Browse files
authored
Sample improvements (#47)
* Use @AutoConfigureHttpGraphQlTester * Polishing in controllers There is no need to specify type name and field if those match the source object type name and the method name respectively. * Use ClassNameTypeResolver We can use the built-in TypeResolver that matches class names to schema type names. The resolver behavior can be customized further if needed. See ClassNameTypeResolver javadoc for details.
1 parent 1e537cd commit 032051e

File tree

5 files changed

+20
-38
lines changed

5 files changed

+20
-38
lines changed

products-subgraph/src/main/java/com/example/products/ProductsController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.springframework.stereotype.Controller;
77

88
import java.util.List;
9-
import java.util.Locale;
109
import java.util.Map;
1110
import java.util.stream.Collectors;
1211
import java.util.stream.Stream;

products-subgraph/src/test/java/com/example/products/ProductsApplicationTest.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,21 @@
22

33
import com.example.products.model.Product;
44
import org.junit.jupiter.api.Test;
5+
56
import org.springframework.beans.factory.annotation.Autowired;
6-
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
7+
import org.springframework.boot.test.autoconfigure.graphql.tester.AutoConfigureHttpGraphQlTester;
78
import org.springframework.boot.test.context.SpringBootTest;
8-
import org.springframework.boot.test.web.server.LocalServerPort;
99
import org.springframework.graphql.test.tester.HttpGraphQlTester;
10-
import org.springframework.test.web.reactive.server.WebTestClient;
1110

11+
@AutoConfigureHttpGraphQlTester
1212
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
1313
public class ProductsApplicationTest {
1414

15-
@LocalServerPort
16-
int serverPort;
15+
@Autowired
16+
private HttpGraphQlTester tester;
1717

1818
@Test
1919
public void verifiesProductQuery() {
20-
WebTestClient testClient = WebTestClient.bindToServer()
21-
.baseUrl("http://localhost:" + serverPort + "/graphql")
22-
.build();
23-
HttpGraphQlTester tester = HttpGraphQlTester.create(testClient);
24-
2520
String query = """
2621
query ProductById($productId: ID!) {
2722
product(id: $productId) {
Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
package com.example.reviews;
22

3+
import java.util.List;
4+
import java.util.Map;
5+
import java.util.stream.Collectors;
6+
37
import com.apollographql.federation.graphqljava.Federation;
48
import com.apollographql.federation.graphqljava._Entity;
59
import com.example.reviews.model.Product;
610
import graphql.schema.DataFetcher;
7-
import graphql.schema.TypeResolver;
11+
812
import org.springframework.boot.autoconfigure.graphql.GraphQlSourceBuilderCustomizer;
913
import org.springframework.context.annotation.Bean;
1014
import org.springframework.context.annotation.Configuration;
11-
12-
import java.util.List;
13-
import java.util.Map;
14-
import java.util.stream.Collectors;
15+
import org.springframework.graphql.execution.ClassNameTypeResolver;
1516

1617
import static com.example.reviews.model.Product.PRODUCT_TYPE;
1718

@@ -20,7 +21,7 @@ public class GraphQLConfiguration {
2021

2122
@Bean
2223
public GraphQlSourceBuilderCustomizer federationTransform() {
23-
DataFetcher entityDataFetcher = env -> {
24+
DataFetcher<?> entityDataFetcher = env -> {
2425
List<Map<String, Object>> representations = env.getArgument(_Entity.argumentName);
2526
return representations.stream()
2627
.map(representation -> {
@@ -31,22 +32,13 @@ public GraphQlSourceBuilderCustomizer federationTransform() {
3132
})
3233
.collect(Collectors.toList());
3334
};
34-
TypeResolver entityTypeResolver = env -> {
35-
final Object src = env.getObject();
36-
if (src instanceof Product) {
37-
return env.getSchema()
38-
.getObjectType(PRODUCT_TYPE);
39-
}
40-
return null;
41-
};
4235

43-
return builder -> {
36+
return builder ->
4437
builder.schemaFactory((registry, wiring)->
4538
Federation.transform(registry, wiring)
4639
.fetchEntities(entityDataFetcher)
47-
.resolveEntityType(entityTypeResolver)
40+
.resolveEntityType(new ClassNameTypeResolver())
4841
.build()
4942
);
50-
};
5143
}
5244
}

reviews-subgraph/src/main/java/com/example/reviews/ReviewsController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class ReviewsController {
1919
"5", List.of(new Review("1050", "Amazing! Would Fly Again!", 5), new Review("1051", 5))
2020
);
2121

22-
@SchemaMapping(typeName="Product", field="reviews")
22+
@SchemaMapping
2323
public List<Review> reviews(Product show) {
2424
return REVIEWS.getOrDefault(show.id(), Collections.emptyList());
2525
}

reviews-subgraph/src/test/java/com/example/reviews/ReviewsApplicationTest.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,20 @@
44
import java.util.List;
55
import java.util.Map;
66
import org.junit.jupiter.api.Test;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.test.autoconfigure.graphql.tester.AutoConfigureHttpGraphQlTester;
79
import org.springframework.boot.test.context.SpringBootTest;
8-
import org.springframework.boot.test.web.server.LocalServerPort;
910
import org.springframework.graphql.test.tester.HttpGraphQlTester;
10-
import org.springframework.test.web.reactive.server.WebTestClient;
1111

12+
@AutoConfigureHttpGraphQlTester
1213
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
1314
public class ReviewsApplicationTest {
1415

15-
@LocalServerPort
16-
int serverPort;
16+
@Autowired
17+
private HttpGraphQlTester tester;
1718

1819
@Test
1920
public void verifiesProductQuery() {
20-
WebTestClient testClient = WebTestClient.bindToServer()
21-
.baseUrl("http://localhost:" + serverPort + "/graphql")
22-
.build();
23-
HttpGraphQlTester tester = HttpGraphQlTester.create(testClient);
24-
2521
String query = """
2622
query Entities($representations: [_Any!]!) {
2723
_entities(representations: $representations) {

0 commit comments

Comments
 (0)