From 0fb46837b96e9e985992f96b5c25e882ba27974e Mon Sep 17 00:00:00 2001 From: Sergio del Amo Date: Fri, 1 Apr 2022 16:00:53 +0200 Subject: [PATCH 1/3] add failing test Fixes: https://github.com/micronaut-projects/micronaut-aws/issues/1330 --- .../function/aws/proxy/ContentTypeSpec.groovy | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 function-aws-api-proxy/src/test/groovy/io/micronaut/function/aws/proxy/ContentTypeSpec.groovy diff --git a/function-aws-api-proxy/src/test/groovy/io/micronaut/function/aws/proxy/ContentTypeSpec.groovy b/function-aws-api-proxy/src/test/groovy/io/micronaut/function/aws/proxy/ContentTypeSpec.groovy new file mode 100644 index 0000000000..ee8a0c50c7 --- /dev/null +++ b/function-aws-api-proxy/src/test/groovy/io/micronaut/function/aws/proxy/ContentTypeSpec.groovy @@ -0,0 +1,59 @@ +package io.micronaut.function.aws.proxy + +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext +import com.amazonaws.serverless.proxy.model.AwsProxyResponse +import com.amazonaws.services.lambda.runtime.Context +import io.micronaut.context.ApplicationContext +import io.micronaut.context.annotation.Requires +import io.micronaut.http.HttpHeaders +import io.micronaut.http.HttpMethod +import io.micronaut.http.HttpStatus +import io.micronaut.http.MediaType +import io.micronaut.http.annotation.Body +import io.micronaut.http.annotation.Controller +import io.micronaut.http.annotation.Get +import io.micronaut.http.annotation.Post +import io.micronaut.http.annotation.Status +import spock.lang.AutoCleanup +import spock.lang.Shared +import spock.lang.Specification + +class ContentTypeSpec extends Specification { + @Shared + @AutoCleanup + MicronautLambdaContainerHandler handler = new MicronautLambdaContainerHandler( + ApplicationContext.builder().properties([ + 'spec.name' : 'ContentTypeSpec', + 'micronaut.security.enabled': false, + ]) + ) + @Shared + Context lambdaContext = new MockLambdaContext() + + void "verify controllers return json by default"() { + given: + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder('/json/bydefault', HttpMethod.GET.toString()) + builder.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) + + when: + AwsProxyResponse response = handler.proxy(builder.build(), lambdaContext) + + then: + response.statusCode == 200 + response.body == '{"msg":"Hello world"}' + response.headers + "application/json" == response.getHeaders().get("Content-Type") + } + + @Controller('/json') + @Requires(property = 'spec.name', value = 'ContentTypeSpec') + static class BodyController { + + @Get("/bydefault") + @Status(HttpStatus.OK) + Map index() { + [msg: "Hello world"] + } + } +} From cc49ea192a383d74ffb565459b75f2044f9dc7e1 Mon Sep 17 00:00:00 2001 From: Sergio del Amo Date: Fri, 1 Apr 2022 16:02:11 +0200 Subject: [PATCH 2/3] annotate with `@PendingFeature` --- .../io/micronaut/function/aws/proxy/ContentTypeSpec.groovy | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/function-aws-api-proxy/src/test/groovy/io/micronaut/function/aws/proxy/ContentTypeSpec.groovy b/function-aws-api-proxy/src/test/groovy/io/micronaut/function/aws/proxy/ContentTypeSpec.groovy index ee8a0c50c7..d07a403192 100644 --- a/function-aws-api-proxy/src/test/groovy/io/micronaut/function/aws/proxy/ContentTypeSpec.groovy +++ b/function-aws-api-proxy/src/test/groovy/io/micronaut/function/aws/proxy/ContentTypeSpec.groovy @@ -16,6 +16,8 @@ import io.micronaut.http.annotation.Get import io.micronaut.http.annotation.Post import io.micronaut.http.annotation.Status import spock.lang.AutoCleanup +import spock.lang.Issue +import spock.lang.PendingFeature import spock.lang.Shared import spock.lang.Specification @@ -31,6 +33,8 @@ class ContentTypeSpec extends Specification { @Shared Context lambdaContext = new MockLambdaContext() + @Issue("https://github.com/micronaut-projects/micronaut-aws/issues/1330") + @PendingFeature void "verify controllers return json by default"() { given: AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder('/json/bydefault', HttpMethod.GET.toString()) From a8d9b7cb40f327cc4de0a998b6420a25e41492aa Mon Sep 17 00:00:00 2001 From: Sergio del Amo Date: Fri, 1 Apr 2022 16:03:53 +0200 Subject: [PATCH 3/3] add controller test --- .../aws/proxy/test/ContentTypeSpec.groovy | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 function-aws-api-proxy-test/src/test/groovy/io/micronaut/function/aws/proxy/test/ContentTypeSpec.groovy 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..671d66791a --- /dev/null +++ b/function-aws-api-proxy-test/src/test/groovy/io/micronaut/function/aws/proxy/test/ContentTypeSpec.groovy @@ -0,0 +1,53 @@ +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.PendingFeature +import spock.lang.Specification + +@Property(name = 'spec.name', value = 'ContentTypeSpec') +@MicronautTest +class ContentTypeSpec extends Specification { + + @Inject + @Client("/") + HttpClient httpClient + + @PendingFeature + 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.get("Content-Type") + } + + @Controller('/json') + @Requires(property = 'spec.name', value = 'ContentTypeSpec') + static class BodyController { + + @Get("/bydefault") + @Status(HttpStatus.OK) + Map index() { + [msg: "Hello world"] + } + } +} +