@@ -448,3 +448,178 @@ func testAccCheckCloudIdentityGroupMembershipDestroyProducer(t *testing.T) func(
448448 return nil
449449 }
450450}
451+
452+ // Test setting create_ignore_already_exists on an existing resource
453+ func testAccCloudIdentityGroupMembership_existingResourceCreateIgnoreAlreadyExists (t * testing.T ) {
454+ context := map [string ]interface {}{
455+ "org_domain" : envvar .GetTestOrgDomainFromEnv (t ),
456+ "cust_id" : envvar .GetTestCustIdFromEnv (t ),
457+ "random_suffix" : acctest .RandString (t , 10 ),
458+ }
459+ id := "groups/groupId/memberships/membershipId"
460+
461+ acctest .VcrTest (t , resource.TestCase {
462+ PreCheck : func () { acctest .AccTestPreCheck (t ) },
463+ ProtoV5ProviderFactories : acctest .ProtoV5ProviderFactories (t ),
464+ CheckDestroy : testAccCheckCloudIdentityGroupMembershipDestroyProducer (t ),
465+ Steps : []resource.TestStep {
466+ // The first step creates a new resource with create_ignore_already_exists=false
467+ {
468+ Config : testAccCloudIdentityGroupMembershipCreateIgnoreAlreadyExists (context , false ),
469+ Check : resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.acceptance" , "id" , id ),
470+ },
471+ {
472+ ResourceName : "google_cloud_identity_group_membership.acceptance" ,
473+ ImportStateId : id ,
474+ ImportState : true ,
475+ ImportStateVerify : true ,
476+ ImportStateVerifyIgnore : []string {"create_ignore_already_exists" }, // Import leaves this field out when false
477+ },
478+ // The second step updates the resource to have create_ignore_already_exists=true
479+ {
480+ Config : testAccCloudIdentityGroupMembershipCreateIgnoreAlreadyExists (context , true ),
481+ Check : resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.acceptance" , "id" , id ),
482+ },
483+ },
484+ })
485+ }
486+
487+ // Test the option to ignore ALREADY_EXISTS error from creating a Source Repository.
488+ func testAccCloudIdentityGroupMembership_createIgnoreAlreadyExists (t * testing.T ) {
489+ context := map [string ]interface {}{
490+ "org_domain" : envvar .GetTestOrgDomainFromEnv (t ),
491+ "cust_id" : envvar .GetTestCustIdFromEnv (t ),
492+ "random_suffix" : acctest .RandString (t , 10 ),
493+ }
494+ id := "groups/groupId/memberships/membershipId"
495+
496+ acctest .VcrTest (t , resource.TestCase {
497+ PreCheck : func () { acctest .AccTestPreCheck (t ) },
498+ ProtoV5ProviderFactories : acctest .ProtoV5ProviderFactories (t ),
499+ CheckDestroy : testAccCheckCloudIdentityGroupMembershipDestroyProducer (t ),
500+ Steps : []resource.TestStep {
501+ // The first step creates a group membership
502+ {
503+ Config : testAccCloudIdentityGroupMembershipCreateIgnoreAlreadyExists (context , false ),
504+ Check : resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.acceptance" , "id" , id ),
505+ },
506+ {
507+ ResourceName : "google_cloud_identity_group_membership.acceptance" ,
508+ ImportStateId : id ,
509+ ImportState : true ,
510+ ImportStateVerify : true ,
511+ },
512+ // The second step creates a new resource that duplicates with the existing group membership
513+ {
514+ Config : testAccCloudIdentityGroupMembershipDuplicateIgnoreAlreadyExists (context ),
515+ Check : resource .ComposeTestCheckFunc (
516+ resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.acceptance" , "id" , id ),
517+ resource .TestCheckResourceAttr ("google_cloud_identity_group_membership.duplicate" , "id" , id ),
518+ ),
519+ },
520+ },
521+ })
522+ }
523+
524+ func testAccCloudIdentityGroupMembershipCreateIgnoreAlreadyExists (context map [string ]interface {}, ignore_already_exists bool ) string {
525+ context ["create_ignore_already_exists" ] = fmt .Sprintf ("%t" , ignore_already_exists )
526+ return acctest .Nprintf (`
527+ resource "google_cloud_identity_group" "group" {
528+ display_name = "tf-test-my-identity-group%{random_suffix}"
529+
530+ parent = "customers/%{cust_id}"
531+
532+ group_key {
533+ id = "tf-test-my-identity-group%{random_suffix}@%{org_domain}"
534+ }
535+
536+ labels = {
537+ "cloudidentity.googleapis.com/groups.discussion_forum" = ""
538+ }
539+ }
540+ resource "google_cloud_identity_group" "child-group" {
541+ display_name = "tf-test-my-identity-group%{random_suffix}-child"
542+
543+ parent = "customers/%{cust_id}"
544+
545+ group_key {
546+ id = "tf-test-my-identity-group%{random_suffix}-child@%{org_domain}"
547+ }
548+
549+ labels = {
550+ "cloudidentity.googleapis.com/groups.discussion_forum" = ""
551+ }
552+ }
553+
554+ resource "google_cloud_identity_group_membership" "acceptance" {
555+ group = google_cloud_identity_group.group.id
556+
557+ preferred_member_key {
558+ id = google_cloud_identity_group.child-group.group_key[0].id
559+ }
560+
561+ roles {
562+ name = "MEMBER"
563+ }
564+
565+ create_ignore_already_exists = %{create_ignore_already_exists}
566+ }
567+ ` , context )
568+ }
569+
570+ func testAccCloudIdentityGroupMembershipDuplicateIgnoreAlreadyExists (context map [string ]interface {}) string {
571+ return acctest .Nprintf (`
572+ resource "google_cloud_identity_group" "group" {
573+ display_name = "tf-test-my-identity-group%{random_suffix}"
574+
575+ parent = "customers/%{cust_id}"
576+
577+ group_key {
578+ id = "tf-test-my-identity-group%{random_suffix}@%{org_domain}"
579+ }
580+
581+ labels = {
582+ "cloudidentity.googleapis.com/groups.discussion_forum" = ""
583+ }
584+ }
585+ resource "google_cloud_identity_group" "child-group" {
586+ display_name = "tf-test-my-identity-group%{random_suffix}-child"
587+
588+ parent = "customers/%{cust_id}"
589+
590+ group_key {
591+ id = "tf-test-my-identity-group%{random_suffix}-child@%{org_domain}"
592+ }
593+
594+ labels = {
595+ "cloudidentity.googleapis.com/groups.discussion_forum" = ""
596+ }
597+ }
598+
599+ resource "google_cloud_identity_group_membership" "acceptance" {
600+ group = google_cloud_identity_group.group.id
601+
602+ preferred_member_key {
603+ id = google_cloud_identity_group.child-group.group_key[0].id
604+ }
605+
606+ roles {
607+ name = "MEMBER"
608+ }
609+ }
610+
611+ resource "google_cloud_identity_group_membership" "duplicate" {
612+ group = google_cloud_identity_group.group.id
613+
614+ preferred_member_key {
615+ id = google_cloud_identity_group.child-group.group_key[0].id
616+ }
617+
618+ roles {
619+ name = "MEMBER"
620+ }
621+
622+ create_ignore_already_exists = true
623+ }
624+ ` , context )
625+ }
0 commit comments