All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.graphql.spring.boot.test.GraphQLTest Maven / Gradle / Ivy

The newest version!
package com.graphql.spring.boot.test;

import static org.springframework.context.annotation.FilterType.ASSIGNABLE_TYPE;

import graphql.execution.ExecutionStrategy;
import graphql.execution.instrumentation.Instrumentation;
import graphql.execution.preparsed.PreparsedDocumentProvider;
import graphql.kickstart.autoconfigure.tools.GraphQLJavaToolsAutoConfiguration;
import graphql.kickstart.autoconfigure.web.servlet.GraphQLInstrumentationAutoConfiguration;
import graphql.kickstart.autoconfigure.web.servlet.GraphQLWebAutoConfiguration;
import graphql.kickstart.execution.GraphQLObjectMapper;
import graphql.kickstart.execution.GraphQLQueryInvoker;
import graphql.kickstart.execution.GraphQLRootObjectBuilder;
import graphql.kickstart.execution.config.ExecutionStrategyProvider;
import graphql.kickstart.execution.config.GraphQLSchemaProvider;
import graphql.kickstart.execution.config.GraphQLServletObjectMapperConfigurer;
import graphql.kickstart.execution.context.GraphQLContextBuilder;
import graphql.kickstart.execution.error.GraphQLErrorHandler;
import graphql.kickstart.servlet.AbstractGraphQLHttpServlet;
import graphql.kickstart.servlet.GraphQLHttpServlet;
import graphql.kickstart.servlet.GraphQLWebsocketServlet;
import graphql.kickstart.servlet.core.GraphQLServletListener;
import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory;
import graphql.kickstart.tools.GraphQLResolver;
import graphql.kickstart.tools.SchemaParserDictionary;
import graphql.kickstart.tools.SchemaParserOptions;
import graphql.schema.GraphQLScalarType;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.SchemaParser;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import jakarta.servlet.MultipartConfigElement;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration;
import org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration;
import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.annotation.AliasFor;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * Annotation that can be specified on a test class for running tests that focus
 * only on GraphQL components.
 *
 * 

Provides the following features over the regular Spring TestContext * Framework: * *

    *
  • By default a fully running web server will be started listening on a {@link * org.springframework.boot.test.context.SpringBootTest.WebEnvironment#RANDOM_PORT random} * port. *
  • Disables full auto-configuration and instead apply only configuration relevant to GraphQL * tests (i.e. beans required to create the GraphQL servlet but not {@code @Component}, * {@code @Service} or {@code @Repository} beans). See {@link #includeFilters()} for a * complete list of classes that are included. *
  • Sets the active profile to test. *
  • Registers a {@link com.graphql.spring.boot.test.GraphQLTestTemplate GraphQLTestTemplate} * bean for use in GraphQL tests that are using a fully running web server. *
  • Typically {@code GraphQLTest} is used in combination with {@link * org.springframework.boot.test.mock.mockito.MockBean @MockBean} or {@link * org.springframework.context.annotation.Import @Import} to create any collaborators required * by your {@code GraphQLResolver} beans. *
* *

If you are looking to load your full application configuration and use {@link * com.graphql.spring.boot.test.GraphQLTestTemplate GraphQLTestTemplate} you should consider {@link * SpringBootTest @SpringBootTest} rather than this annotation. * * @author Michiel Oliemans * @since 5.0.2 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @OverrideAutoConfiguration(enabled = false) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @ActiveProfiles @ComponentScan @ImportAutoConfiguration public @interface GraphQLTest { String[] value() default {}; @AliasFor(annotation = ActiveProfiles.class) String[] profiles() default {"test"}; @AliasFor(annotation = SpringBootTest.class) SpringBootTest.WebEnvironment webEnvironment() default SpringBootTest.WebEnvironment.RANDOM_PORT; @AliasFor(annotation = ImportAutoConfiguration.class) Class[] classes() default { GraphQLInstrumentationAutoConfiguration.class, ServletWebServerFactoryAutoConfiguration.class, GraphQLJavaToolsAutoConfiguration.class, GraphQLWebAutoConfiguration.class, GraphQLTestAutoConfiguration.class, PropertySourcesPlaceholderConfigurer.class, WebSocketServletAutoConfiguration.class, MetricsAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class, JacksonAutoConfiguration.class }; @AliasFor(annotation = ComponentScan.class) boolean useDefaultFilters() default false; @AliasFor(annotation = ComponentScan.class) ComponentScan.Filter[] includeFilters() default { @ComponentScan.Filter( type = ASSIGNABLE_TYPE, classes = { SchemaParser.class, GraphQLResolver.class, SchemaParserDictionary.class, GraphQLScalarType.class, SchemaParserOptions.class, GraphQLSchema.class, GraphQLSchemaProvider.class, GraphQLServletListener.class, Instrumentation.class, GraphQLErrorHandler.class, ExecutionStrategy.class, GraphQLContextBuilder.class, GraphQLRootObjectBuilder.class, GraphQLServletObjectMapperConfigurer.class, PreparsedDocumentProvider.class, CorsFilter.class, ExecutionStrategyProvider.class, GraphQLInvocationInputFactory.class, GraphQLQueryInvoker.class, GraphQLObjectMapper.class, GraphQLHttpServlet.class, AbstractGraphQLHttpServlet.class, GraphQLWebsocketServlet.class, ServerEndpointExporter.class, MultipartConfigElement.class }) }; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy