Consider DataFetcherExceptionResolver in GraphQTest

Prior to this commit, `@GraphQlTest` slice tests would only consider
JsonComponent, RuntimeWiringConfigurer, Converter and
GenericConverter beans. But DataFetcherExceptionResolver,
Instrumentation and GraphQlSourceBuilderCustomizer are used in
setting up the GraphQL source.

This commit ensures that the `GraphQlTypeExcludeFilter` considers
those bean types.

Closes gh-30078
This commit is contained in:
Gautham Mohan
2022-03-07 11:55:48 +05:30
committed by Brian Clozel
parent 087e853c5d
commit 4388910435
4 changed files with 107 additions and 2 deletions

View File

@@ -17,17 +17,35 @@
package org.springframework.boot.test.autoconfigure.graphql;
import java.io.IOException;
import java.util.List;
import com.fasterxml.jackson.databind.module.SimpleModule;
import graphql.ExecutionResult;
import graphql.GraphQLError;
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext;
import graphql.execution.instrumentation.Instrumentation;
import graphql.execution.instrumentation.InstrumentationContext;
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters;
import graphql.execution.instrumentation.parameters.InstrumentationExecutionParameters;
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters;
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters;
import graphql.execution.instrumentation.parameters.InstrumentationFieldParameters;
import graphql.execution.instrumentation.parameters.InstrumentationValidationParameters;
import graphql.language.Document;
import graphql.schema.DataFetchingEnvironment;
import graphql.schema.idl.RuntimeWiring;
import graphql.validation.ValidationError;
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Mono;
import org.springframework.boot.autoconfigure.graphql.GraphQlSourceBuilderCustomizer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.classreading.SimpleMetadataReaderFactory;
import org.springframework.graphql.execution.DataFetcherExceptionResolver;
import org.springframework.graphql.execution.GraphQlSource.Builder;
import org.springframework.graphql.execution.RuntimeWiringConfigurer;
import org.springframework.graphql.web.WebInput;
import org.springframework.graphql.web.WebInterceptor;
@@ -58,6 +76,9 @@ class GraphQlTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
assertThat(excludes(filter, ExampleWebInterceptor.class)).isTrue();
assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDataFetcherExceptionResolver.class)).isFalse();
assertThat(excludes(filter, ExampleInstrumentation.class)).isFalse();
assertThat(excludes(filter, ExampleGraphQlSourceBuilderCustomizer.class)).isFalse();
}
@Test
@@ -70,6 +91,9 @@ class GraphQlTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
assertThat(excludes(filter, ExampleWebInterceptor.class)).isTrue();
assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDataFetcherExceptionResolver.class)).isFalse();
assertThat(excludes(filter, ExampleInstrumentation.class)).isFalse();
assertThat(excludes(filter, ExampleGraphQlSourceBuilderCustomizer.class)).isFalse();
}
@Test
@@ -82,6 +106,9 @@ class GraphQlTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
assertThat(excludes(filter, ExampleWebInterceptor.class)).isTrue();
assertThat(excludes(filter, ExampleModule.class)).isTrue();
assertThat(excludes(filter, ExampleDataFetcherExceptionResolver.class)).isTrue();
assertThat(excludes(filter, ExampleInstrumentation.class)).isTrue();
assertThat(excludes(filter, ExampleGraphQlSourceBuilderCustomizer.class)).isTrue();
}
@Test
@@ -94,6 +121,9 @@ class GraphQlTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isFalse();
assertThat(excludes(filter, ExampleWebInterceptor.class)).isTrue();
assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDataFetcherExceptionResolver.class)).isFalse();
assertThat(excludes(filter, ExampleInstrumentation.class)).isFalse();
assertThat(excludes(filter, ExampleGraphQlSourceBuilderCustomizer.class)).isFalse();
}
@Test
@@ -106,6 +136,9 @@ class GraphQlTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
assertThat(excludes(filter, ExampleWebInterceptor.class)).isTrue();
assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDataFetcherExceptionResolver.class)).isFalse();
assertThat(excludes(filter, ExampleInstrumentation.class)).isFalse();
assertThat(excludes(filter, ExampleGraphQlSourceBuilderCustomizer.class)).isFalse();
}
private boolean excludes(GraphQlTypeExcludeFilter filter, Class<?> type) throws IOException {
@@ -181,4 +214,64 @@ class GraphQlTypeExcludeFilterTests {
}
static class ExampleDataFetcherExceptionResolver implements DataFetcherExceptionResolver {
@Override
public Mono<List<GraphQLError>> resolveException(Throwable exception, DataFetchingEnvironment environment) {
return null;
}
}
static class ExampleInstrumentation implements Instrumentation {
@Override
public InstrumentationContext<ExecutionResult> beginExecution(InstrumentationExecutionParameters parameters) {
return null;
}
@Override
public InstrumentationContext<Document> beginParse(InstrumentationExecutionParameters parameters) {
return null;
}
@Override
public InstrumentationContext<List<ValidationError>> beginValidation(
InstrumentationValidationParameters parameters) {
return null;
}
@Override
public InstrumentationContext<ExecutionResult> beginExecuteOperation(
InstrumentationExecuteOperationParameters parameters) {
return null;
}
@Override
public ExecutionStrategyInstrumentationContext beginExecutionStrategy(
InstrumentationExecutionStrategyParameters parameters) {
return null;
}
@Override
public InstrumentationContext<ExecutionResult> beginField(InstrumentationFieldParameters parameters) {
return null;
}
@Override
public InstrumentationContext<Object> beginFieldFetch(InstrumentationFieldFetchParameters parameters) {
return null;
}
}
static class ExampleGraphQlSourceBuilderCustomizer implements GraphQlSourceBuilderCustomizer {
@Override
public void customize(Builder builder) {
}
}
}