diff --git a/function-aws-api-proxy-test/src/main/java/io/micronaut/function/aws/proxy/test/AwsApiProxyTestServer.java b/function-aws-api-proxy-test/src/main/java/io/micronaut/function/aws/proxy/test/AwsApiProxyTestServer.java index a87b48ffcd..503f220607 100644 --- a/function-aws-api-proxy-test/src/main/java/io/micronaut/function/aws/proxy/test/AwsApiProxyTestServer.java +++ b/function-aws-api-proxy-test/src/main/java/io/micronaut/function/aws/proxy/test/AwsApiProxyTestServer.java @@ -19,7 +19,9 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import io.micronaut.context.ApplicationContext; +import io.micronaut.context.ApplicationContextBuilder; import io.micronaut.context.env.Environment; +import io.micronaut.context.env.PropertySource; import io.micronaut.core.annotation.Internal; import io.micronaut.core.io.socket.SocketUtils; import io.micronaut.function.aws.proxy.MicronautLambdaHandler; @@ -28,11 +30,11 @@ import io.micronaut.http.server.exceptions.ServerStartupException; import io.micronaut.runtime.ApplicationConfiguration; import io.micronaut.runtime.server.EmbeddedServer; +import jakarta.inject.Singleton; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.AbstractHandler; -import jakarta.inject.Singleton; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -91,7 +93,7 @@ public EmbeddedServer start() { while (retryCount <= 3) { try { this.server = new Server(port); - this.server.setHandler(new AwsProxyHandler()); + this.server.setHandler(new AwsProxyHandler(applicationContext)); this.server.start(); break; } catch (BindException e) { @@ -181,8 +183,14 @@ private static class AwsProxyHandler extends AbstractHandler { private final ServletToAwsProxyResponseAdapter responseAdapter; private final ContextProvider contextProvider; - public AwsProxyHandler() throws ContainerInitializationException { - lambdaHandler = new MicronautLambdaHandler(); + public AwsProxyHandler(ApplicationContext proxyTestApplicationContext) throws ContainerInitializationException { + ApplicationContextBuilder builder = ApplicationContext.builder(); + for (PropertySource propertySource : proxyTestApplicationContext.getEnvironment() + .getPropertySources()) { + builder = builder.propertySources(propertySource); + } + lambdaHandler = new MicronautLambdaHandler(builder); + ApplicationContext ctx = lambdaHandler.getApplicationContext(); this.requestAdapter = ctx.getBean(ServletToAwsProxyRequestAdapter.class); this.responseAdapter = ctx.getBean(ServletToAwsProxyResponseAdapter.class); diff --git a/function-aws-api-proxy-test/src/test/groovy/io/micronaut/function/aws/proxy/test/ContentTypeSpec.groovy b/function-aws-api-proxy-test/src/test/groovy/io/micronaut/function/aws/proxy/test/ContentTypeSpec.groovy new file mode 100644 index 0000000000..0b84cf7921 --- /dev/null +++ b/function-aws-api-proxy-test/src/test/groovy/io/micronaut/function/aws/proxy/test/ContentTypeSpec.groovy @@ -0,0 +1,51 @@ +package io.micronaut.function.aws.proxy.test + +import io.micronaut.context.annotation.Property +import io.micronaut.context.annotation.Requires +import io.micronaut.http.HttpRequest +import io.micronaut.http.HttpResponse +import io.micronaut.http.HttpStatus +import io.micronaut.http.MediaType +import io.micronaut.http.annotation.Controller +import io.micronaut.http.annotation.Get +import io.micronaut.http.annotation.Status +import io.micronaut.http.client.HttpClient +import io.micronaut.http.client.annotation.Client +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import jakarta.inject.Inject +import spock.lang.Specification + +@Property(name = 'spec.name', value = 'ContentTypeSpec') +@MicronautTest +class ContentTypeSpec extends Specification { + + @Inject + @Client("/") + HttpClient httpClient + + void "verify controllers return json by default"() { + given: + HttpRequest request = HttpRequest.GET('/json/bydefault').accept(MediaType.APPLICATION_JSON) + + when: + HttpResponse response = httpClient.toBlocking().exchange(request, String) + + then: + HttpStatus.OK == response.status() + response.body.get() == '{"msg":"Hello world"}' + response.headers + ["application/json"] == response.headers.getAll("Content-Type") + } + + @Controller('/json') + @Requires(property = 'spec.name', value = 'ContentTypeSpec') + static class BodyController { + + @Get("/bydefault") + @Status(HttpStatus.OK) + Map index() { + [msg: "Hello world"] + } + } +} +