Skip to content

Commit 9289f0a

Browse files
committed
Add MockExecutionGraphQlService in testFixtures
1 parent 8bd39ba commit 9289f0a

15 files changed

+286
-313
lines changed

spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/GraphQlTesterBuilderTests.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,28 +41,29 @@ void mutateDocumentSource() {
4141
DocumentSource documentSource = name -> name.equals("name") ?
4242
Mono.just(DOCUMENT) : Mono.error(new IllegalArgumentException());
4343

44-
setMockResponse("{}");
44+
getGraphQlService().setDataAsJson(DOCUMENT, "{}");
4545

4646
// Original
4747
GraphQlTester.Builder<?> builder = graphQlTesterBuilder().documentSource(documentSource);
4848
GraphQlTester tester = builder.build();
4949
tester.documentName("name").execute();
5050

51-
assertThat(request().getDocument()).isEqualTo(DOCUMENT);
51+
assertThat(getActualRequestDocument()).isEqualTo(DOCUMENT);
5252

5353
// Mutate
5454
tester = tester.mutate().build();
5555
tester.documentName("name").execute();
5656

57-
assertThat(request().getDocument()).isEqualTo(DOCUMENT);
57+
assertThat(getActualRequestDocument()).isEqualTo(DOCUMENT);
5858
}
5959

6060
@Test
6161
void errorsFilteredGlobally() {
6262

6363
String document = "{me {name, friends}}";
6464

65-
setMockResponse(
65+
getGraphQlService().setErrors(
66+
document,
6667
GraphqlErrorBuilder.newError().message("some error").build(),
6768
GraphqlErrorBuilder.newError().message("some other error").build());
6869

@@ -74,7 +75,7 @@ void errorsFilteredGlobally() {
7475
.errors().verify()
7576
.path("me").pathDoesNotExist();
7677

77-
assertThat(request().getDocument()).contains(document);
78+
assertThat(getActualRequestDocument()).contains(document);
7879
}
7980

8081
}

spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/GraphQlTesterTestSupport.java

Lines changed: 10 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,8 @@
1616

1717
package org.springframework.graphql.test.tester;
1818

19-
import java.util.Arrays;
20-
import java.util.Map;
21-
import java.util.function.Consumer;
19+
import org.springframework.graphql.execution.MockExecutionGraphQlService;
2220

23-
import com.fasterxml.jackson.core.JsonProcessingException;
24-
import com.fasterxml.jackson.databind.ObjectMapper;
25-
import graphql.ExecutionInput;
26-
import graphql.ExecutionResult;
27-
import graphql.ExecutionResultImpl;
28-
import graphql.GraphQLError;
29-
import org.mockito.ArgumentCaptor;
30-
import reactor.core.publisher.Mono;
31-
32-
import org.springframework.graphql.ExecutionGraphQlRequest;
33-
import org.springframework.graphql.ExecutionGraphQlService;
34-
import org.springframework.graphql.support.DefaultExecutionGraphQlResponse;
35-
36-
import static org.mockito.BDDMockito.given;
37-
import static org.mockito.Mockito.mock;
3821

3922
/**
4023
* Base class for {@link GraphQlTester} tests.
@@ -43,57 +26,27 @@
4326
*/
4427
public class GraphQlTesterTestSupport {
4528

46-
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
47-
48-
49-
private final ArgumentCaptor<ExecutionGraphQlRequest> requestCaptor = ArgumentCaptor.forClass(ExecutionGraphQlRequest.class);
50-
51-
private final ExecutionGraphQlService graphQlService = mock(ExecutionGraphQlService.class);
29+
private final MockExecutionGraphQlService graphQlService = new MockExecutionGraphQlService();
5230

5331
private final GraphQlTester.Builder<?> graphQlTesterBuilder = ExecutionGraphQlServiceTester.builder(this.graphQlService);
5432

5533
private final GraphQlTester graphQlTester = this.graphQlTesterBuilder.build();
5634

5735

58-
protected GraphQlTester graphQlTester() {
59-
return this.graphQlTester;
60-
}
61-
62-
public GraphQlTester.Builder<?> graphQlTesterBuilder() {
63-
return this.graphQlTesterBuilder;
64-
}
65-
66-
protected ExecutionGraphQlRequest request() {
67-
return this.requestCaptor.getValue();
68-
}
69-
70-
71-
protected void setMockResponse(String data) {
72-
setMockResponse(builder -> serialize(data, builder));
36+
public MockExecutionGraphQlService getGraphQlService() {
37+
return this.graphQlService;
7338
}
7439

75-
protected void setMockResponse(GraphQLError... errors) {
76-
setMockResponse(builder -> builder.errors(Arrays.asList(errors)));
40+
protected String getActualRequestDocument() {
41+
return this.graphQlService.getGraphQlRequest().getDocument();
7742
}
7843

79-
private void setMockResponse(Consumer<ExecutionResultImpl.Builder> consumer) {
80-
81-
ExecutionResultImpl.Builder builder = new ExecutionResultImpl.Builder();
82-
consumer.accept(builder);
83-
ExecutionInput executionInput = ExecutionInput.newExecutionInput("{}").build();
84-
ExecutionResult result = builder.build();
85-
86-
given(this.graphQlService.execute(this.requestCaptor.capture()))
87-
.willReturn(Mono.just(new DefaultExecutionGraphQlResponse(executionInput, result)));
44+
protected GraphQlTester graphQlTester() {
45+
return this.graphQlTester;
8846
}
8947

90-
private void serialize(String data, ExecutionResultImpl.Builder builder) {
91-
try {
92-
builder.data(OBJECT_MAPPER.readValue(data, Map.class));
93-
}
94-
catch (JsonProcessingException ex) {
95-
throw new IllegalStateException(ex);
96-
}
48+
public GraphQlTester.Builder<?> graphQlTesterBuilder() {
49+
return this.graphQlTesterBuilder;
9750
}
9851

9952
}

spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/GraphQlTesterTests.java

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class GraphQlTesterTests extends GraphQlTesterTestSupport {
4343
void hasValue() {
4444

4545
String document = "{me {name, friends}}";
46-
setMockResponse("{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
46+
getGraphQlService().setDataAsJson(document, "{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
4747

4848
GraphQlTester.Response response = graphQlTester().document(document).execute();
4949
response.path("me.name").hasValue();
@@ -52,14 +52,14 @@ void hasValue() {
5252
assertThatThrownBy(() -> response.path("hero").hasValue())
5353
.hasMessageContaining("No value at JSON path \"$['data']['hero']");
5454

55-
assertThat(request().getDocument()).contains(document);
55+
assertThat(getActualRequestDocument()).contains(document);
5656
}
5757

5858
@Test
5959
void valueIsNull() {
6060

6161
String document = "{me {name, friends}}";
62-
setMockResponse("{\"me\": {\"name\":null, \"friends\":null}}");
62+
getGraphQlService().setDataAsJson(document, "{\"me\": {\"name\":null, \"friends\":null}}");
6363

6464
GraphQlTester.Response response = graphQlTester().document(document).execute();
6565

@@ -69,14 +69,14 @@ void valueIsNull() {
6969
assertThatThrownBy(() -> response.path("me").valueIsNull())
7070
.hasMessageContaining("Expected null value at JSON path");
7171

72-
assertThat(request().getDocument()).contains(document);
72+
assertThat(getActualRequestDocument()).contains(document);
7373
}
7474

7575
@Test
7676
void valueIsEmptyList() {
7777

7878
String document = "{me {name, friends}}";
79-
setMockResponse("{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
79+
getGraphQlService().setDataAsJson(document, "{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
8080

8181
GraphQlTester.Response response = graphQlTester().document(document).execute();
8282
response.path("me.friends").hasValue().entityList(MovieCharacter.class).hasSize(0);
@@ -85,7 +85,7 @@ void valueIsEmptyList() {
8585
@Test
8686
void pathDoesNotExist() {
8787
String document = "{me {name, friends}}";
88-
setMockResponse("{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
88+
getGraphQlService().setDataAsJson(document, "{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
8989

9090
GraphQlTester.Response response = graphQlTester().document(document).execute();
9191

@@ -99,7 +99,7 @@ void pathDoesNotExist() {
9999
void matchesJson() {
100100

101101
String document = "{me {name}}";
102-
setMockResponse("{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
102+
getGraphQlService().setDataAsJson(document, "{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
103103

104104
GraphQlTester.Response response = graphQlTester().document(document).execute();
105105

@@ -111,14 +111,14 @@ void matchesJson() {
111111
.as("Extended fields should fail in strict mode")
112112
.hasMessageContaining("Unexpected: name");
113113

114-
assertThat(request().getDocument()).contains(document);
114+
assertThat(getActualRequestDocument()).contains(document);
115115
}
116116

117117
@Test
118118
void entity() {
119119

120120
String document = "{me {name}}";
121-
setMockResponse("{\"me\": {\"name\":\"Luke Skywalker\"}}");
121+
getGraphQlService().setDataAsJson(document, "{\"me\": {\"name\":\"Luke Skywalker\"}}");
122122

123123
GraphQlTester.Response response = graphQlTester().document(document).execute();
124124

@@ -141,14 +141,15 @@ void entity() {
141141
.entity(new ParameterizedTypeReference<Map<String, MovieCharacter>>() {})
142142
.isEqualTo(Collections.singletonMap("me", luke));
143143

144-
assertThat(request().getDocument()).contains(document);
144+
assertThat(getActualRequestDocument()).contains(document);
145145
}
146146

147147
@Test
148148
void entityList() {
149149

150150
String document = "{me {name, friends}}";
151-
setMockResponse("{" +
151+
getGraphQlService().setDataAsJson(document,
152+
"{" +
152153
" \"me\":{" +
153154
" \"name\":\"Luke Skywalker\","
154155
+ " \"friends\":[{\"name\":\"Han Solo\"}, {\"name\":\"Leia Organa\"}]" +
@@ -183,7 +184,7 @@ void entityList() {
183184
.entityList(new ParameterizedTypeReference<MovieCharacter>() {})
184185
.containsExactly(han, leia);
185186

186-
assertThat(request().getDocument()).contains(document);
187+
assertThat(getActualRequestDocument()).contains(document);
187188
}
188189

189190
@Test
@@ -195,7 +196,7 @@ void operationNameAndVariables() {
195196
+ " }" +
196197
"}";
197198

198-
setMockResponse("{\"hero\": {\"name\":\"R2-D2\"}}");
199+
getGraphQlService().setDataAsJson(document, "{\"hero\": {\"name\":\"R2-D2\"}}");
199200

200201
GraphQlTester.Response response = graphQlTester().document(document)
201202
.operationName("HeroNameAndFriends")
@@ -206,7 +207,7 @@ void operationNameAndVariables() {
206207

207208
response.path("hero").entity(MovieCharacter.class).isEqualTo(MovieCharacter.create("R2-D2"));
208209

209-
ExecutionGraphQlRequest request = request();
210+
ExecutionGraphQlRequest request = getGraphQlService().getGraphQlRequest();
210211
assertThat(request.getDocument()).contains(document);
211212
assertThat(request.getOperationName()).isEqualTo("HeroNameAndFriends");
212213
assertThat(request.getVariables()).hasSize(3);
@@ -219,42 +220,43 @@ void operationNameAndVariables() {
219220
void errorsEmptyOnExecuteAndVerify() {
220221

221222
String document = "{me {name, friends}}";
222-
setMockResponse("{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
223+
getGraphQlService().setDataAsJson(document, "{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}");
223224

224225
graphQlTester().document(document).executeAndVerify();
225226

226-
assertThat(request().getDocument()).contains(document);
227+
assertThat(getActualRequestDocument()).contains(document);
227228
}
228229

229230
@Test
230231
void errorsCheckedOnExecuteAndVerify() {
231232

232233
String document = "{me {name, friends}}";
233-
setMockResponse(GraphqlErrorBuilder.newError().message("Invalid query").build());
234+
getGraphQlService().setError(document, builder -> builder.message("Invalid query"));
234235

235236
assertThatThrownBy(() -> graphQlTester().document(document).executeAndVerify())
236237
.hasMessageContaining("Response has 1 unexpected error(s)");
237238

238-
assertThat(request().getDocument()).contains(document);
239+
assertThat(getActualRequestDocument()).contains(document);
239240
}
240241

241242
@Test
242243
void errorsCheckedOnTraverse() {
243244

244245
String document = "{me {name, friends}}";
245-
setMockResponse(GraphqlErrorBuilder.newError().message("Invalid query").build());
246+
getGraphQlService().setError(document, builder -> builder.message("Invalid query"));
246247

247248
assertThatThrownBy(() -> graphQlTester().document(document).execute().path("me"))
248249
.hasMessageContaining("Response has 1 unexpected error(s)");
249250

250-
assertThat(request().getDocument()).contains(document);
251+
assertThat(getActualRequestDocument()).contains(document);
251252
}
252253

253254
@Test
254255
void errorsPartiallyFiltered() {
255256

256257
String document = "{me {name, friends}}";
257-
setMockResponse(
258+
getGraphQlService().setErrors(
259+
document,
258260
GraphqlErrorBuilder.newError().message("some error").build(),
259261
GraphqlErrorBuilder.newError().message("some other error").build());
260262

@@ -266,14 +268,15 @@ void errorsPartiallyFiltered() {
266268
.verify())
267269
.hasMessageContaining("Response has 1 unexpected error(s) of 2 total.");
268270

269-
assertThat(request().getDocument()).contains(document);
271+
assertThat(getActualRequestDocument()).contains(document);
270272
}
271273

272274
@Test
273275
void errorsFiltered() {
274276

275277
String document = "{me {name, friends}}";
276-
setMockResponse(
278+
getGraphQlService().setErrors(
279+
document,
277280
GraphqlErrorBuilder.newError().message("some error").build(),
278281
GraphqlErrorBuilder.newError().message("some other error").build());
279282

@@ -285,14 +288,15 @@ void errorsFiltered() {
285288
.path("me")
286289
.pathDoesNotExist();
287290

288-
assertThat(request().getDocument()).contains(document);
291+
assertThat(getActualRequestDocument()).contains(document);
289292
}
290293

291294
@Test
292295
void errorsExpected() {
293296

294297
String document = "{me {name, friends}}";
295-
setMockResponse(
298+
getGraphQlService().setErrors(
299+
document,
296300
GraphqlErrorBuilder.newError().message("some error").build(),
297301
GraphqlErrorBuilder.newError().message("some other error").build());
298302

@@ -303,14 +307,15 @@ void errorsExpected() {
303307
.verify()
304308
.path("me").pathDoesNotExist();
305309

306-
assertThat(request().getDocument()).contains(document);
310+
assertThat(getActualRequestDocument()).contains(document);
307311
}
308312

309313
@Test
310314
void errorsExpectedButNotFound() {
311315

312316
String document = "{me {name, friends}}";
313-
setMockResponse(
317+
getGraphQlService().setErrors(
318+
document,
314319
GraphqlErrorBuilder.newError().message("some error").build(),
315320
GraphqlErrorBuilder.newError().message("some other error").build());
316321

@@ -325,10 +330,8 @@ void errorsExpectedButNotFound() {
325330
void errorsConsumed() {
326331

327332
String document = "{me {name, friends}}";
328-
setMockResponse(GraphqlErrorBuilder.newError()
329-
.message("Invalid query")
330-
.location(new SourceLocation(1, 2))
331-
.build());
333+
getGraphQlService().setError(document, builder ->
334+
builder.message("Invalid query").location(new SourceLocation(1, 2)).build());
332335

333336
graphQlTester().document(document)
334337
.execute()
@@ -342,7 +345,7 @@ void errorsConsumed() {
342345
})
343346
.path("me").pathDoesNotExist();
344347

345-
assertThat(request().getDocument()).contains(document);
348+
assertThat(getActualRequestDocument()).contains(document);
346349
}
347350

348351
}

0 commit comments

Comments
 (0)