@@ -575,3 +575,178 @@ func testAccCheckCloudIdentityGroupMembershipDestroyProducer(t *testing.T) func(
575575 return nil
576576 }
577577}
578+
579+ // Test setting create_ignore_already_exists on an existing resource
580+ func testAccCloudIdentityGroupMembership_existingResourceCreateIgnoreAlreadyExists (t * testing.T ) {
581+ context := map [string ]interface {}{
582+ "org_domain" : envvar .GetTestOrgDomainFromEnv (t ),
583+ "cust_id" : envvar .GetTestCustIdFromEnv (t ),
584+ "random_suffix" : acctest .RandString (t , 10 ),
585+ }
586+ id := "groups/groupId/memberships/membershipId"
587+
588+ acctest .VcrTest (t , resource.TestCase {
589+ PreCheck : func () { acctest .AccTestPreCheck (t ) },
590+ ProtoV5ProviderFactories : acctest .ProtoV5ProviderFactories (t ),
591+ CheckDestroy : testAccCheckCloudIdentityGroupMembershipDestroyProducer (t ),
592+ Steps : []resource.TestStep {
593+ // The first step creates a new resource with create_ignore_already_exists=false
594+ {
595+ Config : testAccCloudIdentityGroupMembershipCreateIgnoreAlreadyExists (context , false ),
596+ Check : resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.acceptance" , "id" , id ),
597+ },
598+ {
599+ ResourceName : "google_cloud_identity_group_membership.acceptance" ,
600+ ImportStateId : id ,
601+ ImportState : true ,
602+ ImportStateVerify : true ,
603+ ImportStateVerifyIgnore : []string {"create_ignore_already_exists" }, // Import leaves this field out when false
604+ },
605+ // The second step updates the resource to have create_ignore_already_exists=true
606+ {
607+ Config : testAccCloudIdentityGroupMembershipCreateIgnoreAlreadyExists (context , true ),
608+ Check : resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.acceptance" , "id" , id ),
609+ },
610+ },
611+ })
612+ }
613+
614+ // Test the option to ignore ALREADY_EXISTS error from creating a Source Repository.
615+ func testAccCloudIdentityGroupMembership_createIgnoreAlreadyExists (t * testing.T ) {
616+ context := map [string ]interface {}{
617+ "org_domain" : envvar .GetTestOrgDomainFromEnv (t ),
618+ "cust_id" : envvar .GetTestCustIdFromEnv (t ),
619+ "random_suffix" : acctest .RandString (t , 10 ),
620+ }
621+ id := "groups/groupId/memberships/membershipId"
622+
623+ acctest .VcrTest (t , resource.TestCase {
624+ PreCheck : func () { acctest .AccTestPreCheck (t ) },
625+ ProtoV5ProviderFactories : acctest .ProtoV5ProviderFactories (t ),
626+ CheckDestroy : testAccCheckCloudIdentityGroupMembershipDestroyProducer (t ),
627+ Steps : []resource.TestStep {
628+ // The first step creates a group membership
629+ {
630+ Config : testAccCloudIdentityGroupMembershipCreateIgnoreAlreadyExists (context , false ),
631+ Check : resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.acceptance" , "id" , id ),
632+ },
633+ {
634+ ResourceName : "google_cloud_identity_group_membership.acceptance" ,
635+ ImportStateId : id ,
636+ ImportState : true ,
637+ ImportStateVerify : true ,
638+ },
639+ // The second step creates a new resource that duplicates with the existing group membership
640+ {
641+ Config : testAccCloudIdentityGroupMembershipDuplicateIgnoreAlreadyExists (context ),
642+ Check : resource .ComposeTestCheckFunc (
643+ resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.acceptance" , "id" , id ),
644+ resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.duplicate" , "id" , id ),
645+ ),
646+ },
647+ },
648+ })
649+ }
650+
651+ func testAccCloudIdentityGroupMembershipCreateIgnoreAlreadyExists (context map [string ]interface {}, ignore_already_exists bool ) string {
652+ context ["create_ignore_already_exists" ] = fmt .Sprintf ("%t" , ignore_already_exists )
653+ return acctest .Nprintf (`
654+ resource "google_cloud_identity_group" "group" {
655+ display_name = "tf-test-my-identity-group%{random_suffix}"
656+
657+ parent = "customers/%{cust_id}"
658+
659+ group_key {
660+ id = "tf-test-my-identity-group%{random_suffix}@%{org_domain}"
661+ }
662+
663+ labels = {
664+ "cloudidentity.googleapis.com/groups.discussion_forum" = ""
665+ }
666+ }
667+ resource "google_cloud_identity_group" "child-group" {
668+ display_name = "tf-test-my-identity-group%{random_suffix}-child"
669+
670+ parent = "customers/%{cust_id}"
671+
672+ group_key {
673+ id = "tf-test-my-identity-group%{random_suffix}-child@%{org_domain}"
674+ }
675+
676+ labels = {
677+ "cloudidentity.googleapis.com/groups.discussion_forum" = ""
678+ }
679+ }
680+
681+ resource "google_cloud_identity_group_membership" "acceptance" {
682+ group = google_cloud_identity_group.group.id
683+
684+ preferred_member_key {
685+ id = google_cloud_identity_group.child-group.group_key[0].id
686+ }
687+
688+ roles {
689+ name = "MEMBER"
690+ }
691+
692+ create_ignore_already_exists = %{create_ignore_already_exists}
693+ }
694+ ` , context )
695+ }
696+
697+ func testAccCloudIdentityGroupMembershipDuplicateIgnoreAlreadyExists (context map [string ]interface {}) string {
698+ return acctest .Nprintf (`
699+ resource "google_cloud_identity_group" "group" {
700+ display_name = "tf-test-my-identity-group%{random_suffix}"
701+
702+ parent = "customers/%{cust_id}"
703+
704+ group_key {
705+ id = "tf-test-my-identity-group%{random_suffix}@%{org_domain}"
706+ }
707+
708+ labels = {
709+ "cloudidentity.googleapis.com/groups.discussion_forum" = ""
710+ }
711+ }
712+ resource "google_cloud_identity_group" "child-group" {
713+ display_name = "tf-test-my-identity-group%{random_suffix}-child"
714+
715+ parent = "customers/%{cust_id}"
716+
717+ group_key {
718+ id = "tf-test-my-identity-group%{random_suffix}-child@%{org_domain}"
719+ }
720+
721+ labels = {
722+ "cloudidentity.googleapis.com/groups.discussion_forum" = ""
723+ }
724+ }
725+
726+ resource "google_cloud_identity_group_membership" "acceptance" {
727+ group = google_cloud_identity_group.group.id
728+
729+ preferred_member_key {
730+ id = google_cloud_identity_group.child-group.group_key[0].id
731+ }
732+
733+ roles {
734+ name = "MEMBER"
735+ }
736+ }
737+
738+ resource "google_cloud_identity_group_membership" "duplicate" {
739+ group = google_cloud_identity_group.group.id
740+
741+ preferred_member_key {
742+ id = google_cloud_identity_group.child-group.group_key[0].id
743+ }
744+
745+ roles {
746+ name = "MEMBER"
747+ }
748+
749+ create_ignore_already_exists = true
750+ }
751+ ` , context )
752+ }
0 commit comments