From fe7017120aaf9f66e571333cbca002c68216a718 Mon Sep 17 00:00:00 2001 From: Kamil Turek Date: Mon, 24 Oct 2022 19:07:25 +0200 Subject: [PATCH 01/11] Create an initial implementation --- .../email_identity_feedback_attributes.go | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 internal/service/sesv2/email_identity_feedback_attributes.go diff --git a/internal/service/sesv2/email_identity_feedback_attributes.go b/internal/service/sesv2/email_identity_feedback_attributes.go new file mode 100644 index 000000000000..1ccd4f99ec8d --- /dev/null +++ b/internal/service/sesv2/email_identity_feedback_attributes.go @@ -0,0 +1,137 @@ +package sesv2 + +import ( + "context" + "errors" + "log" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/sesv2" + "github.com/aws/aws-sdk-go-v2/service/sesv2/types" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func ResourceEmailIdentityFeedbackAttributes() *schema.Resource { + return &schema.Resource{ + CreateWithoutTimeout: resourceEmailIdentityFeedbackAttributesCreate, + ReadWithoutTimeout: resourceEmailIdentityFeedbackAttributesRead, + UpdateWithoutTimeout: resourceEmailIdentityFeedbackAttributesUpdate, + DeleteWithoutTimeout: resourceEmailIdentityFeedbackAttributesDelete, + + Importer: &schema.ResourceImporter{ + StateContext: schema.ImportStatePassthroughContext, + }, + + Schema: map[string]*schema.Schema{ + "email_identity": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "email_forwarding_enabled": { + Type: schema.TypeBool, + Optional: true, + }, + }, + } +} + +const ( + ResNameEmailIdentityFeedbackAttributes = "Email Identity Feedback Attributes" +) + +func resourceEmailIdentityFeedbackAttributesCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*conns.AWSClient).SESV2Conn + + in := &sesv2.PutEmailIdentityFeedbackAttributesInput{ + EmailIdentity: aws.String(d.Get("email_identity").(string)), + EmailForwardingEnabled: d.Get("email_forwarding_enabled").(bool), + } + + out, err := conn.PutEmailIdentityFeedbackAttributes(ctx, in) + if err != nil { + return create.DiagError(names.SESV2, create.ErrActionCreating, ResNameEmailIdentityFeedbackAttributes, d.Get("name").(string), err) + } + + if out == nil { + return create.DiagError(names.SESV2, create.ErrActionCreating, ResNameEmailIdentityFeedbackAttributes, d.Get("name").(string), errors.New("empty output")) + } + + d.SetId(d.Get("email_identity").(string)) + + return resourceEmailIdentityFeedbackAttributesRead(ctx, d, meta) +} + +func resourceEmailIdentityFeedbackAttributesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*conns.AWSClient).SESV2Conn + + out, err := FindEmailIdentityByID(ctx, conn, d.Id()) + + if !d.IsNewResource() && tfresource.NotFound(err) { + log.Printf("[WARN] SESV2 EmailIdentityFeedbackAttributes (%s) not found, removing from state", d.Id()) + d.SetId("") + return nil + } + + if err != nil { + return create.DiagError(names.SESV2, create.ErrActionReading, ResNameEmailIdentityFeedbackAttributes, d.Id(), err) + } + + d.Set("email_identity", d.Id()) + d.Set("email_forwarding_enabled", out.FeedbackForwardingStatus) + + return nil +} + +func resourceEmailIdentityFeedbackAttributesUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*conns.AWSClient).SESV2Conn + + update := false + + in := &sesv2.PutEmailIdentityFeedbackAttributesInput{ + EmailIdentity: aws.String(d.Id()), + } + + if d.HasChanges("email_forwarding_enabled") { + in.EmailForwardingEnabled = d.Get("email_forwarding_enabled").(bool) + update = true + } + + if !update { + return nil + } + + log.Printf("[DEBUG] Updating SESV2 EmailIdentityFeedbackAttributes (%s): %#v", d.Id(), in) + _, err := conn.PutEmailIdentityFeedbackAttributes(ctx, in) + if err != nil { + return create.DiagError(names.SESV2, create.ErrActionUpdating, ResNameEmailIdentityFeedbackAttributes, d.Id(), err) + } + + return resourceEmailIdentityFeedbackAttributesRead(ctx, d, meta) +} + +func resourceEmailIdentityFeedbackAttributesDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*conns.AWSClient).SESV2Conn + + log.Printf("[INFO] Deleting SESV2 EmailIdentityFeedbackAttributes %s", d.Id()) + + _, err := conn.PutEmailIdentityFeedbackAttributes(ctx, &sesv2.PutEmailIdentityFeedbackAttributesInput{ + EmailIdentity: aws.String(d.Id()), + }) + + if err != nil { + var nfe *types.NotFoundException + if errors.As(err, &nfe) { + return nil + } + + return create.DiagError(names.SESV2, create.ErrActionDeleting, ResNameEmailIdentityFeedbackAttributes, d.Id(), err) + } + + return nil +} From 22e1588cecc1e7202db54ac3326014e6ee17a8e8 Mon Sep 17 00:00:00 2001 From: Kamil Turek Date: Mon, 24 Oct 2022 19:07:34 +0200 Subject: [PATCH 02/11] Register the new resource --- internal/provider/provider.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 17ad1fd5efe7..cbe563e21473 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -2059,10 +2059,11 @@ func New(_ context.Context) (*schema.Provider, error) { "aws_ses_receipt_rule_set": ses.ResourceReceiptRuleSet(), "aws_ses_template": ses.ResourceTemplate(), - "aws_sesv2_configuration_set": sesv2.ResourceConfigurationSet(), - "aws_sesv2_dedicated_ip_assignment": sesv2.ResourceDedicatedIPAssignment(), - "aws_sesv2_dedicated_ip_pool": sesv2.ResourceDedicatedIPPool(), - "aws_sesv2_email_identity": sesv2.ResourceEmailIdentity(), + "aws_sesv2_configuration_set": sesv2.ResourceConfigurationSet(), + "aws_sesv2_dedicated_ip_assignment": sesv2.ResourceDedicatedIPAssignment(), + "aws_sesv2_dedicated_ip_pool": sesv2.ResourceDedicatedIPPool(), + "aws_sesv2_email_identity": sesv2.ResourceEmailIdentity(), + "aws_sesv2_email_identity_feedback_attributes": sesv2.ResourceEmailIdentityFeedbackAttributes(), "aws_sfn_activity": sfn.ResourceActivity(), "aws_sfn_state_machine": sfn.ResourceStateMachine(), From 1a9cba50e4ed37b7ddfda43e290ce8862c1a62a7 Mon Sep 17 00:00:00 2001 From: Kamil Turek Date: Mon, 24 Oct 2022 19:36:31 +0200 Subject: [PATCH 03/11] Add acceptance tests --- .../email_identity_feedback_attributes.go | 1 + ...email_identity_feedback_attributes_test.go | 96 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 internal/service/sesv2/email_identity_feedback_attributes_test.go diff --git a/internal/service/sesv2/email_identity_feedback_attributes.go b/internal/service/sesv2/email_identity_feedback_attributes.go index 1ccd4f99ec8d..ac68a77d23b5 100644 --- a/internal/service/sesv2/email_identity_feedback_attributes.go +++ b/internal/service/sesv2/email_identity_feedback_attributes.go @@ -36,6 +36,7 @@ func ResourceEmailIdentityFeedbackAttributes() *schema.Resource { "email_forwarding_enabled": { Type: schema.TypeBool, Optional: true, + Computed: true, }, }, } diff --git a/internal/service/sesv2/email_identity_feedback_attributes_test.go b/internal/service/sesv2/email_identity_feedback_attributes_test.go new file mode 100644 index 000000000000..8deb61a34b79 --- /dev/null +++ b/internal/service/sesv2/email_identity_feedback_attributes_test.go @@ -0,0 +1,96 @@ +package sesv2_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccSESV2EmailIdentityFeedbackAttributes_basic(t *testing.T) { + rName := acctest.RandomEmailAddress(acctest.RandomDomainName()) + resourceName := "aws_sesv2_email_identity_feedback_attributes.test" + emailIdentityName := "aws_sesv2_email_identity.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t) }, + ErrorCheck: acctest.ErrorCheck(t, names.SESV2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEmailIdentityDestroy, + Steps: []resource.TestStep{ + { + Config: testAccEmailIdentityFeedbackAttributesConfig_basic(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckEmailIdentityExists(emailIdentityName), + resource.TestCheckResourceAttrPair(resourceName, "email_identity", emailIdentityName, "email_identity"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccSESV2EmailIdentityFeedbackAttributes_emailForwardingEnabled(t *testing.T) { + rName := acctest.RandomEmailAddress(acctest.RandomDomainName()) + resourceName := "aws_sesv2_email_identity_feedback_attributes.test" + emailIdentityName := "aws_sesv2_email_identity.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t) }, + ErrorCheck: acctest.ErrorCheck(t, names.SESV2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEmailIdentityDestroy, + Steps: []resource.TestStep{ + { + Config: testAccEmailIdentityFeedbackAttributesConfig_emailForwardingEnabled(rName, true), + Check: resource.ComposeTestCheckFunc( + testAccCheckEmailIdentityExists(emailIdentityName), + resource.TestCheckResourceAttr(resourceName, "email_forwarding_enabled", "true"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccEmailIdentityFeedbackAttributesConfig_emailForwardingEnabled(rName, false), + Check: resource.ComposeTestCheckFunc( + testAccCheckEmailIdentityExists(emailIdentityName), + resource.TestCheckResourceAttr(resourceName, "email_forwarding_enabled", "false"), + ), + }, + }, + }) +} + +func testAccEmailIdentityFeedbackAttributesConfig_basic(rName string) string { + return fmt.Sprintf(` +resource "aws_sesv2_email_identity" "test" { + email_identity = %[1]q +} + +resource "aws_sesv2_email_identity_feedback_attributes" "test" { + email_identity = aws_sesv2_email_identity.test.email_identity +} +`, rName) +} + +func testAccEmailIdentityFeedbackAttributesConfig_emailForwardingEnabled(rName string, emailForwardingEnabled bool) string { + return fmt.Sprintf(` +resource "aws_sesv2_email_identity" "test" { + email_identity = %[1]q +} + +resource "aws_sesv2_email_identity_feedback_attributes" "test" { + email_identity = aws_sesv2_email_identity.test.email_identity + email_forwarding_enabled = %[2]t +} +`, rName, emailForwardingEnabled) +} From a38fccb670a9ea59d3445ac396da36d98889579d Mon Sep 17 00:00:00 2001 From: Kamil Turek Date: Mon, 24 Oct 2022 20:09:07 +0200 Subject: [PATCH 04/11] Add website docs page --- ...identity_feedback_attributes.html.markdown | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 website/docs/r/sesv2_email_identity_feedback_attributes.html.markdown diff --git a/website/docs/r/sesv2_email_identity_feedback_attributes.html.markdown b/website/docs/r/sesv2_email_identity_feedback_attributes.html.markdown new file mode 100644 index 000000000000..145ebc110b0f --- /dev/null +++ b/website/docs/r/sesv2_email_identity_feedback_attributes.html.markdown @@ -0,0 +1,45 @@ +--- +subcategory: "SESv2 (Simple Email V2)" +layout: "aws" +page_title: "AWS: aws_sesv2_email_identity_feedback_attributes" +description: |- + Terraform resource for managing an AWS SESv2 (Simple Email V2) Email Identity Feedback Attributes. +--- + +# Resource: aws_sesv2_email_identity_feedback_attributes + +Terraform resource for managing an AWS SESv2 (Simple Email V2) Email Identity Feedback Attributes. + +## Example Usage + +### Basic Usage + +```terraform +resource "aws_sesv2_email_identity" "example" { + email_identity = "example.com" +} + +resource "aws_sesv2_email_identity_feedback_attributes" "example" { + email_identity = aws_sesv2_email_identity.example.email_identity + email_forwarding_enabled = true +} +``` + +## Argument Reference + +The following arguments are supported: + +* `email_identity` - (Required) The email identity. +* `email_forwarding_enabled` - (Optional) Sets the feedback forwarding configuration for the identity. + +## Attributes Reference + +No additional attributes are exported. + +## Import + +SESv2 (Simple Email V2) Email Identity Feedback Attributes can be imported using the `email_identity`, e.g., + +``` +$ terraform import aws_sesv2_email_identity_feedback_attributes.example example.com +``` From 7f79ae191ecbdfbee56e792558f60cd4bcd90f6c Mon Sep 17 00:00:00 2001 From: Kamil Turek Date: Mon, 24 Oct 2022 21:05:57 +0200 Subject: [PATCH 05/11] Remove the trailing space --- .../r/sesv2_email_identity_feedback_attributes.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/sesv2_email_identity_feedback_attributes.html.markdown b/website/docs/r/sesv2_email_identity_feedback_attributes.html.markdown index 145ebc110b0f..07ba966f4f48 100644 --- a/website/docs/r/sesv2_email_identity_feedback_attributes.html.markdown +++ b/website/docs/r/sesv2_email_identity_feedback_attributes.html.markdown @@ -29,7 +29,7 @@ resource "aws_sesv2_email_identity_feedback_attributes" "example" { The following arguments are supported: -* `email_identity` - (Required) The email identity. +* `email_identity` - (Required) The email identity. * `email_forwarding_enabled` - (Optional) Sets the feedback forwarding configuration for the identity. ## Attributes Reference From 858e49f72e809127ab24b8a23390cb2afb8ba320 Mon Sep 17 00:00:00 2001 From: Kamil Turek Date: Mon, 24 Oct 2022 21:06:05 +0200 Subject: [PATCH 06/11] Replace computed with optional --- internal/service/sesv2/email_identity_feedback_attributes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/sesv2/email_identity_feedback_attributes.go b/internal/service/sesv2/email_identity_feedback_attributes.go index ac68a77d23b5..7b1ad5a1ca5a 100644 --- a/internal/service/sesv2/email_identity_feedback_attributes.go +++ b/internal/service/sesv2/email_identity_feedback_attributes.go @@ -36,7 +36,7 @@ func ResourceEmailIdentityFeedbackAttributes() *schema.Resource { "email_forwarding_enabled": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: false, }, }, } From 1eee1db403cc377b019a3cce33a2381a9be9ce48 Mon Sep 17 00:00:00 2001 From: Kamil Turek Date: Thu, 27 Oct 2022 17:58:29 +0200 Subject: [PATCH 07/11] Add changelog --- .changelog/27433.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/27433.txt diff --git a/.changelog/27433.txt b/.changelog/27433.txt new file mode 100644 index 000000000000..e5d9a9440708 --- /dev/null +++ b/.changelog/27433.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +aws_sesv2_email_identity_feedback_attributes +``` From 0378699b3057411055359ecabacd00d87e78b75f Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Tue, 1 Nov 2022 10:55:25 -0400 Subject: [PATCH 08/11] r/aws_sesv2_email_identity_feedback_attributes: alphabetize attributes --- .../sesv2/email_identity_feedback_attributes.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/service/sesv2/email_identity_feedback_attributes.go b/internal/service/sesv2/email_identity_feedback_attributes.go index 7b1ad5a1ca5a..3342ef81facb 100644 --- a/internal/service/sesv2/email_identity_feedback_attributes.go +++ b/internal/service/sesv2/email_identity_feedback_attributes.go @@ -28,16 +28,16 @@ func ResourceEmailIdentityFeedbackAttributes() *schema.Resource { }, Schema: map[string]*schema.Schema{ - "email_identity": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - }, "email_forwarding_enabled": { Type: schema.TypeBool, Optional: true, Default: false, }, + "email_identity": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, }, } } From cdb4968cb8cf44400f2b30d12ce47ce4668fb6c4 Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Tue, 1 Nov 2022 10:56:13 -0400 Subject: [PATCH 09/11] r/aws_sesv2_email_identity_feedback_attributes: disappears test --- ...email_identity_feedback_attributes_test.go | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/internal/service/sesv2/email_identity_feedback_attributes_test.go b/internal/service/sesv2/email_identity_feedback_attributes_test.go index 8deb61a34b79..6526bf829f62 100644 --- a/internal/service/sesv2/email_identity_feedback_attributes_test.go +++ b/internal/service/sesv2/email_identity_feedback_attributes_test.go @@ -6,6 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-provider-aws/internal/acctest" + tfsesv2 "github.com/hashicorp/terraform-provider-aws/internal/service/sesv2" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -36,6 +37,29 @@ func TestAccSESV2EmailIdentityFeedbackAttributes_basic(t *testing.T) { }) } +func TestAccSESV2EmailIdentityFeedbackAttributes_disappears(t *testing.T) { + rName := acctest.RandomEmailAddress(acctest.RandomDomainName()) + resourceName := "aws_sesv2_email_identity_feedback_attributes.test" + emailIdentityName := "aws_sesv2_email_identity.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t) }, + ErrorCheck: acctest.ErrorCheck(t, names.SESV2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEmailIdentityDestroy, + Steps: []resource.TestStep{ + { + Config: testAccEmailIdentityFeedbackAttributesConfig_emailForwardingEnabled(rName, true), + Check: resource.ComposeTestCheckFunc( + testAccCheckEmailIdentityExists(emailIdentityName), + acctest.CheckResourceDisappears(acctest.Provider, tfsesv2.ResourceEmailIdentityFeedbackAttributes(), resourceName), + ), + ExpectNonEmptyPlan: true, + }, + }, + }) +} + func TestAccSESV2EmailIdentityFeedbackAttributes_emailForwardingEnabled(t *testing.T) { rName := acctest.RandomEmailAddress(acctest.RandomDomainName()) resourceName := "aws_sesv2_email_identity_feedback_attributes.test" From d208865454e630ab895500eaedcb95a456d75bef Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Tue, 1 Nov 2022 11:00:50 -0400 Subject: [PATCH 10/11] r/aws_sesv2_email_identity_feedback_attributes: disappears email identity test --- ...email_identity_feedback_attributes_test.go | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/internal/service/sesv2/email_identity_feedback_attributes_test.go b/internal/service/sesv2/email_identity_feedback_attributes_test.go index 6526bf829f62..525b41828945 100644 --- a/internal/service/sesv2/email_identity_feedback_attributes_test.go +++ b/internal/service/sesv2/email_identity_feedback_attributes_test.go @@ -60,6 +60,28 @@ func TestAccSESV2EmailIdentityFeedbackAttributes_disappears(t *testing.T) { }) } +func TestAccSESV2EmailIdentityFeedbackAttributes_disappears_emailIdentity(t *testing.T) { + rName := acctest.RandomEmailAddress(acctest.RandomDomainName()) + emailIdentityName := "aws_sesv2_email_identity.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t) }, + ErrorCheck: acctest.ErrorCheck(t, names.SESV2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEmailIdentityDestroy, + Steps: []resource.TestStep{ + { + Config: testAccEmailIdentityFeedbackAttributesConfig_emailForwardingEnabled(rName, true), + Check: resource.ComposeTestCheckFunc( + testAccCheckEmailIdentityExists(emailIdentityName), + acctest.CheckResourceDisappears(acctest.Provider, tfsesv2.ResourceEmailIdentity(), emailIdentityName), + ), + ExpectNonEmptyPlan: true, + }, + }, + }) +} + func TestAccSESV2EmailIdentityFeedbackAttributes_emailForwardingEnabled(t *testing.T) { rName := acctest.RandomEmailAddress(acctest.RandomDomainName()) resourceName := "aws_sesv2_email_identity_feedback_attributes.test" From 1fb2155d0074d5f0b319b23d2902c775ce4602cd Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Tue, 1 Nov 2022 11:19:49 -0400 Subject: [PATCH 11/11] r/aws_sesv2_email_identity_feedback_attributes: check email forwarding in tests --- ...email_identity_feedback_attributes_test.go | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/internal/service/sesv2/email_identity_feedback_attributes_test.go b/internal/service/sesv2/email_identity_feedback_attributes_test.go index 525b41828945..3b90ed538a53 100644 --- a/internal/service/sesv2/email_identity_feedback_attributes_test.go +++ b/internal/service/sesv2/email_identity_feedback_attributes_test.go @@ -1,11 +1,16 @@ package sesv2_test import ( + "context" + "errors" "fmt" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/create" tfsesv2 "github.com/hashicorp/terraform-provider-aws/internal/service/sesv2" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -24,7 +29,7 @@ func TestAccSESV2EmailIdentityFeedbackAttributes_basic(t *testing.T) { { Config: testAccEmailIdentityFeedbackAttributesConfig_basic(rName), Check: resource.ComposeTestCheckFunc( - testAccCheckEmailIdentityExists(emailIdentityName), + testAccCheckEmailIdentityFeedbackAttributesExist(emailIdentityName, false), resource.TestCheckResourceAttrPair(resourceName, "email_identity", emailIdentityName, "email_identity"), ), }, @@ -51,7 +56,7 @@ func TestAccSESV2EmailIdentityFeedbackAttributes_disappears(t *testing.T) { { Config: testAccEmailIdentityFeedbackAttributesConfig_emailForwardingEnabled(rName, true), Check: resource.ComposeTestCheckFunc( - testAccCheckEmailIdentityExists(emailIdentityName), + testAccCheckEmailIdentityFeedbackAttributesExist(emailIdentityName, true), acctest.CheckResourceDisappears(acctest.Provider, tfsesv2.ResourceEmailIdentityFeedbackAttributes(), resourceName), ), ExpectNonEmptyPlan: true, @@ -73,7 +78,7 @@ func TestAccSESV2EmailIdentityFeedbackAttributes_disappears_emailIdentity(t *tes { Config: testAccEmailIdentityFeedbackAttributesConfig_emailForwardingEnabled(rName, true), Check: resource.ComposeTestCheckFunc( - testAccCheckEmailIdentityExists(emailIdentityName), + testAccCheckEmailIdentityFeedbackAttributesExist(emailIdentityName, true), acctest.CheckResourceDisappears(acctest.Provider, tfsesv2.ResourceEmailIdentity(), emailIdentityName), ), ExpectNonEmptyPlan: true, @@ -96,7 +101,7 @@ func TestAccSESV2EmailIdentityFeedbackAttributes_emailForwardingEnabled(t *testi { Config: testAccEmailIdentityFeedbackAttributesConfig_emailForwardingEnabled(rName, true), Check: resource.ComposeTestCheckFunc( - testAccCheckEmailIdentityExists(emailIdentityName), + testAccCheckEmailIdentityFeedbackAttributesExist(emailIdentityName, true), resource.TestCheckResourceAttr(resourceName, "email_forwarding_enabled", "true"), ), }, @@ -108,7 +113,7 @@ func TestAccSESV2EmailIdentityFeedbackAttributes_emailForwardingEnabled(t *testi { Config: testAccEmailIdentityFeedbackAttributesConfig_emailForwardingEnabled(rName, false), Check: resource.ComposeTestCheckFunc( - testAccCheckEmailIdentityExists(emailIdentityName), + testAccCheckEmailIdentityFeedbackAttributesExist(emailIdentityName, false), resource.TestCheckResourceAttr(resourceName, "email_forwarding_enabled", "false"), ), }, @@ -116,6 +121,33 @@ func TestAccSESV2EmailIdentityFeedbackAttributes_emailForwardingEnabled(t *testi }) } +// testAccCheckEmailIdentityFeedbackAttributesExist verifies that both the email identity exists, +// and that the email forwarding enabled setting is correct +func testAccCheckEmailIdentityFeedbackAttributesExist(name string, emailForwardingEnabled bool) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[name] + if !ok { + return create.Error(names.SESV2, create.ErrActionCheckingExistence, tfsesv2.ResNameEmailIdentity, name, errors.New("not found")) + } + + if rs.Primary.ID == "" { + return create.Error(names.SESV2, create.ErrActionCheckingExistence, tfsesv2.ResNameEmailIdentity, name, errors.New("not set")) + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).SESV2Conn + + out, err := tfsesv2.FindEmailIdentityByID(context.Background(), conn, rs.Primary.ID) + if err != nil { + return create.Error(names.SESV2, create.ErrActionCheckingExistence, tfsesv2.ResNameEmailIdentity, rs.Primary.ID, err) + } + if out == nil || out.FeedbackForwardingStatus != emailForwardingEnabled { + return create.Error(names.SESV2, create.ErrActionCheckingExistence, tfsesv2.ResNameEmailIdentityFeedbackAttributes, rs.Primary.ID, err) + } + + return nil + } +} + func testAccEmailIdentityFeedbackAttributesConfig_basic(rName string) string { return fmt.Sprintf(` resource "aws_sesv2_email_identity" "test" {