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

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

package com.graphql.spring.boot.test;

import com.coxautodev.graphql.tools.GraphQLResolver;
import com.coxautodev.graphql.tools.SchemaParserDictionary;
import com.coxautodev.graphql.tools.SchemaParserOptions;
import com.oembedler.moon.graphql.boot.GraphQLInstrumentationAutoConfiguration;
import com.oembedler.moon.graphql.boot.GraphQLWebAutoConfiguration;
import graphql.execution.ExecutionStrategy;
import graphql.execution.instrumentation.Instrumentation;
import graphql.execution.preparsed.PreparsedDocumentProvider;
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.ObjectMapperConfigurer;
import graphql.kickstart.execution.context.GraphQLContextBuilder;
import graphql.kickstart.execution.error.GraphQLErrorHandler;
import graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration;
import graphql.schema.GraphQLScalarType;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.SchemaParser;
import graphql.servlet.*;
import graphql.servlet.core.GraphQLServletListener;
import graphql.servlet.input.GraphQLInvocationInputFactory;
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 javax.servlet.MultipartConfigElement;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

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

/**
 * Annotation that can be specified on a test class in combination with {@code @RunWith(SpringRunner.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, ObjectMapperConfigurer.class, PreparsedDocumentProvider.class, CorsFilter.class, ExecutionStrategyProvider.class, GraphQLInvocationInputFactory.class, GraphQLQueryInvoker.class, GraphQLObjectMapper.class, SimpleGraphQLHttpServlet.class, GraphQLWebsocketServlet.class, ServerEndpointExporter.class, MultipartConfigElement.class }) }; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy