From f4f5a4ae2cd1be3986974f5e2647eabf134fc9a1 Mon Sep 17 00:00:00 2001 From: shuheiktgw Date: Tue, 18 Aug 2020 08:47:27 +0900 Subject: [PATCH 1/2] r/aws_appsync_resolver: Support direct resolver --- aws/resource_aws_appsync_resolver.go | 22 ++++-- aws/resource_aws_appsync_resolver_test.go | 73 +++++++++++++++++++ website/docs/r/appsync_resolver.html.markdown | 4 +- 3 files changed, 89 insertions(+), 10 deletions(-) diff --git a/aws/resource_aws_appsync_resolver.go b/aws/resource_aws_appsync_resolver.go index fd16d129dbf1..f4912337a04c 100644 --- a/aws/resource_aws_appsync_resolver.go +++ b/aws/resource_aws_appsync_resolver.go @@ -45,11 +45,11 @@ func resourceAwsAppsyncResolver() *schema.Resource { }, "request_template": { Type: schema.TypeString, - Required: true, + Optional: true, }, "response_template": { Type: schema.TypeString, - Required: true, // documentation bug, the api returns 400 if this is not specified. + Optional: true, }, "kind": { Type: schema.TypeString, @@ -110,12 +110,10 @@ func resourceAwsAppsyncResolverCreate(d *schema.ResourceData, meta interface{}) conn := meta.(*AWSClient).appsyncconn input := &appsync.CreateResolverInput{ - ApiId: aws.String(d.Get("api_id").(string)), - TypeName: aws.String(d.Get("type").(string)), - FieldName: aws.String(d.Get("field").(string)), - RequestMappingTemplate: aws.String(d.Get("request_template").(string)), - ResponseMappingTemplate: aws.String(d.Get("response_template").(string)), - Kind: aws.String(d.Get("kind").(string)), + ApiId: aws.String(d.Get("api_id").(string)), + TypeName: aws.String(d.Get("type").(string)), + FieldName: aws.String(d.Get("field").(string)), + Kind: aws.String(d.Get("kind").(string)), } if v, ok := d.GetOk("data_source"); ok { @@ -129,6 +127,14 @@ func resourceAwsAppsyncResolverCreate(d *schema.ResourceData, meta interface{}) } } + if v, ok := d.GetOk("request_template"); ok { + input.RequestMappingTemplate = aws.String(v.(string)) + } + + if v, ok := d.GetOk("response_template"); ok { + input.ResponseMappingTemplate = aws.String(v.(string)) + } + if v, ok := d.GetOk("caching_config"); ok { input.CachingConfig = expandAppsyncResolverCachingConfig(v.([]interface{})) } diff --git a/aws/resource_aws_appsync_resolver_test.go b/aws/resource_aws_appsync_resolver_test.go index e55ad2d191b0..c38e8833e038 100644 --- a/aws/resource_aws_appsync_resolver_test.go +++ b/aws/resource_aws_appsync_resolver_test.go @@ -98,6 +98,32 @@ func TestAccAwsAppsyncResolver_DataSource(t *testing.T) { }) } +func TestAccAwsAppsyncResolver_DataSource_lambda(t *testing.T) { + var resolver appsync.Resolver + rName := fmt.Sprintf("tfacctest%d", acctest.RandInt()) + resourceName := "aws_appsync_resolver.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSAppSync(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAwsAppsyncResolverDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAppsyncResolver_DataSource_lambda(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAwsAppsyncResolverExists(resourceName, &resolver), + resource.TestCheckResourceAttr(resourceName, "data_source", rName), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + func TestAccAwsAppsyncResolver_RequestTemplate(t *testing.T) { var resolver1, resolver2 appsync.Resolver rName := fmt.Sprintf("tfacctest%d", acctest.RandInt()) @@ -471,6 +497,53 @@ EOF `, rName, dataSource) } +func testAccAppsyncResolver_DataSource_lambda(rName string) string { + return testAccAppsyncDatasourceConfig_base_Lambda(rName) + fmt.Sprintf(` +resource "aws_appsync_graphql_api" "test" { + authentication_type = "API_KEY" + name = %q + + schema = < Date: Thu, 29 Apr 2021 16:30:18 -0400 Subject: [PATCH 2/2] Apply suggestions from code review --- aws/resource_aws_appsync_resolver_test.go | 1 + website/docs/r/appsync_resolver.html.markdown | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/aws/resource_aws_appsync_resolver_test.go b/aws/resource_aws_appsync_resolver_test.go index c38e8833e038..2fef81c00b7b 100644 --- a/aws/resource_aws_appsync_resolver_test.go +++ b/aws/resource_aws_appsync_resolver_test.go @@ -105,6 +105,7 @@ func TestAccAwsAppsyncResolver_DataSource_lambda(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSAppSync(t) }, + ErrorCheck: testAccErrorCheck(t, appsync.EndpointsID), Providers: testAccProviders, CheckDestroy: testAccCheckAwsAppsyncResolverDestroy, Steps: []resource.TestStep{ diff --git a/website/docs/r/appsync_resolver.html.markdown b/website/docs/r/appsync_resolver.html.markdown index 1d619a0c7e8f..a0db8878f705 100644 --- a/website/docs/r/appsync_resolver.html.markdown +++ b/website/docs/r/appsync_resolver.html.markdown @@ -108,8 +108,8 @@ The following arguments are supported: * `api_id` - (Required) The API ID for the GraphQL API. * `type` - (Required) The type name from the schema defined in the GraphQL API. * `field` - (Required) The field name from the schema defined in the GraphQL API. -* `request_template` - (Optional) The request mapping template for UNIT resolver or 'before mapping template' for PIPELINE resolver. -* `response_template` - (Optional) The response mapping template for UNIT resolver or 'after mapping template' for PIPELINE resolver. +* `request_template` - (Optional) The request mapping template for UNIT resolver or 'before mapping template' for PIPELINE resolver. Required for non-Lambda resolvers. +* `response_template` - (Optional) The response mapping template for UNIT resolver or 'after mapping template' for PIPELINE resolver. Required for non-Lambda resolvers. * `data_source` - (Optional) The DataSource name. * `kind` - (Optional) The resolver type. Valid values are `UNIT` and `PIPELINE`. * `pipeline_config` - (Optional) The PipelineConfig.