Skip to content

Commit 2b2e276

Browse files
authored
chore: Uses noOpCreate to avoid inconsistent result error and fix/enable tests in Ci (#2290)
* refactor: use noOpCreate to avoid inconsistent result error * refactor: use noOpCreate to avoid inconsistent result error in federated_settings_connected_org * test: refactor test for mongodbatlas_federated_settings_org_config * test: cannot do a migration test when there is only an import step * test: skip test in CI and add test for noOpCreate * test: no reason to keep a test that will only be skipped * test: add test for createError * test: renameTest * test: remove missleading steps * test: remove missleading test steps * test: add import verify step after to ensure test works * ci: re-enable test in CI and use static resource names * test: fix DOMAIN_NOT_IN_FEDERATION_SETTINGS bug * test: try adding domain since at least one domain must be active * test: change to a validated domain * test: support reading MONGODB_ATLAS_FEDERATED_SETTINGS_ASSOCIATED_DOMAIN * test: enable data tests for connected_org * use spaces instead of tabs * add PR comments/suggestions
1 parent 2d19861 commit 2b2e276

11 files changed

+89
-86
lines changed

.github/workflows/acceptance-tests-runner.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ on:
7373
mongodb_atlas_federated_org_id:
7474
type: string
7575
required: true
76+
mongodb_atlas_federated_settings_associated_domain:
77+
type: string
78+
required: true
7679
secrets: # all secrets are passed explicitly in this workflow
7780
mongodb_atlas_public_key:
7881
required: true
@@ -529,6 +532,7 @@ jobs:
529532
MONGODB_ATLAS_FEDERATED_SSO_URL: ${{ inputs.mongodb_atlas_federated_sso_url }}
530533
MONGODB_ATLAS_FEDERATED_ISSUER_URI: ${{ inputs.mongodb_atlas_federated_issuer_uri }}
531534
MONGODB_ATLAS_FEDERATED_ORG_ID: ${{ inputs.mongodb_atlas_federated_org_id }}
535+
MONGODB_ATLAS_FEDERATED_SETTINGS_ASSOCIATED_DOMAIN: ${{ inputs.mongodb_atlas_federated_settings_associated_domain }}
532536
AWS_S3_BUCKET: ${{ secrets.aws_s3_bucket_federation }}
533537
AWS_REGION: ${{ vars.aws_region_federation }}
534538
AWS_ACCESS_KEY_ID: ${{ secrets.aws_access_key_id }}

.github/workflows/acceptance-tests.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,4 @@ jobs:
9292
mongodb_atlas_federated_sso_url: ${{ vars.MONGODB_ATLAS_FEDERATED_SSO_URL }}
9393
mongodb_atlas_federated_issuer_uri: ${{ vars.MONGODB_ATLAS_FEDERATED_ISSUER_URI }}
9494
mongodb_atlas_federated_org_id: ${{ inputs.atlas_cloud_env == 'qa' && vars.MONGODB_ATLAS_FEDERATED_ORG_ID_QA || vars.MONGODB_ATLAS_FEDERATED_ORG_ID }}
95+
mongodb_atlas_federated_settings_associated_domain: ${{ vars.MONGODB_ATLAS_FEDERATED_SETTINGS_ASSOCIATED_DOMAIN }}

internal/service/federatedsettingsidentityprovider/resource_federated_settings_identity_provider.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const OIDC = "OIDC"
2222

2323
func Resource() *schema.Resource {
2424
return &schema.Resource{
25-
CreateContext: resourceMongoDBAtlasFederatedSettingsIdentityProviderRead,
25+
CreateContext: resourceCreateNotAllowed,
2626
ReadContext: resourceMongoDBAtlasFederatedSettingsIdentityProviderRead,
2727
UpdateContext: resourceMongoDBAtlasFederatedSettingsIdentityProviderUpdate,
2828
DeleteContext: resourceMongoDBAtlasFederatedSettingsIdentityProviderDelete,
@@ -112,15 +112,14 @@ func Resource() *schema.Resource {
112112
}
113113
}
114114

115+
func resourceCreateNotAllowed(_ context.Context, _ *schema.ResourceData, _ any) diag.Diagnostics {
116+
return diag.FromErr(errors.New("this resource must be imported"))
117+
}
118+
115119
func resourceMongoDBAtlasFederatedSettingsIdentityProviderRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
116120
// Get client connection.
117121
connV2 := meta.(*config.MongoDBClient).Atlas20231115008
118122

119-
if d.Id() == "" {
120-
d.SetId("")
121-
return nil
122-
}
123-
124123
ids := conversion.DecodeStateID(d.Id())
125124
federationSettingsID := ids["federation_settings_id"]
126125

internal/service/federatedsettingsidentityprovider/resource_federated_settings_identity_provider_migration_test.go

Lines changed: 0 additions & 13 deletions
This file was deleted.

internal/service/federatedsettingsidentityprovider/resource_federated_settings_identity_provider_test.go

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"os"
7+
"regexp"
78
"testing"
89

910
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
@@ -12,6 +13,18 @@ import (
1213
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
1314
)
1415

16+
func TestAccFederatedSettingsIdentityProvider_createError(t *testing.T) {
17+
resource.ParallelTest(t, resource.TestCase{
18+
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
19+
Steps: []resource.TestStep{
20+
{
21+
Config: configBasic("not-used", "not-used", "not-used", "not-used"),
22+
ExpectError: regexp.MustCompile("this resource must be imported"),
23+
},
24+
},
25+
})
26+
}
27+
1528
func TestAccFederatedSettingsIdentityProviderRS_basic(t *testing.T) {
1629
resource.ParallelTest(t, *basicTestCase(t))
1730
}
@@ -25,37 +38,36 @@ func basicTestCase(tb testing.TB) *resource.TestCase {
2538
idpID = os.Getenv("MONGODB_ATLAS_FEDERATED_IDP_ID")
2639
ssoURL = os.Getenv("MONGODB_ATLAS_FEDERATED_SSO_URL")
2740
issuerURI = os.Getenv("MONGODB_ATLAS_FEDERATED_ISSUER_URI")
41+
associatedDomain = os.Getenv("MONGODB_ATLAS_FEDERATED_SETTINGS_ASSOCIATED_DOMAIN")
42+
config = configBasic(federationSettingsID, ssoURL, issuerURI, associatedDomain)
2843
)
2944

3045
return &resource.TestCase{
31-
PreCheck: func() { acc.PreCheckFederatedSettings(tb) },
46+
PreCheck: func() { acc.PreCheckFederatedSettingsIdentityProvider(tb) },
3247
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
3348
Steps: []resource.TestStep{
3449
{
35-
Config: configBasic(federationSettingsID, ssoURL, issuerURI),
36-
ResourceName: resourceName,
37-
ImportStateIdFunc: importStateIDFunc(federationSettingsID, idpID),
38-
ImportState: true,
39-
ImportStateVerify: false,
50+
Config: config,
51+
ResourceName: resourceName,
52+
ImportStateIdFunc: importStateIDFunc(federationSettingsID, idpID),
53+
ImportState: true,
54+
ImportStateVerify: false,
55+
ImportStatePersist: true,
4056
},
4157
{
42-
Config: configBasic(federationSettingsID, ssoURL, issuerURI),
43-
ResourceName: resourceName,
44-
ImportStateIdFunc: importStateIDFunc(federationSettingsID, idpID),
45-
46-
ImportState: true,
58+
Config: config,
4759
Check: resource.ComposeTestCheckFunc(
4860
checkExists(resourceName, idpID),
4961
resource.TestCheckResourceAttr(resourceName, "federation_settings_id", federationSettingsID),
50-
resource.TestCheckResourceAttr(resourceName, "name", "mongodb_federation_test"),
62+
resource.TestCheckResourceAttr(resourceName, "name", "SAML-test"),
5163
),
5264
},
5365
{
54-
Config: configBasic(federationSettingsID, ssoURL, issuerURI),
66+
Config: config,
5567
ResourceName: resourceName,
5668
ImportStateIdFunc: importStateIDFunc(federationSettingsID, idpID),
5769
ImportState: true,
58-
ImportStateVerify: false,
70+
ImportStateVerify: true,
5971
},
6072
},
6173
}
@@ -92,17 +104,17 @@ func importStateIDFunc(federationSettingsID, idpID string) resource.ImportStateI
92104
}
93105
}
94106

95-
func configBasic(federationSettingsID, ssoURL, issuerURI string) string {
107+
func configBasic(federationSettingsID, ssoURL, issuerURI, associatedDomain string) string {
96108
return fmt.Sprintf(`
97109
resource "mongodbatlas_federated_settings_identity_provider" "test" {
98-
federation_settings_id = "%[1]s"
99-
name = "mongodb_federation_test"
100-
associated_domains = ["reorganizeyourworld.com"]
101-
sso_debug_enabled = true
102-
status = "ACTIVE"
103-
sso_url = "%[2]s"
104-
issuer_uri = "%[3]s"
105-
request_binding = "HTTP-POST"
110+
federation_settings_id = %[1]q
111+
name = "SAML-test"
112+
associated_domains = [%[4]q]
113+
sso_debug_enabled = true
114+
status = "ACTIVE"
115+
sso_url = %[2]q
116+
issuer_uri = %[3]q
117+
request_binding = "HTTP-POST"
106118
response_signature_algorithm = "SHA-256"
107-
}`, federationSettingsID, ssoURL, issuerURI)
119+
}`, federationSettingsID, ssoURL, issuerURI, associatedDomain)
108120
}

internal/service/federatedsettingsorgconfig/data_source_federated_settings_connected_org_test.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import (
1010
)
1111

1212
func TestAccFederatedSettingsOrgDS_basic(t *testing.T) {
13-
acc.SkipTestForCI(t) // affects the org
14-
1513
var (
1614
resourceName = "data.mongodbatlas_federated_settings_org_config.test"
1715
federatedSettingsID = os.Getenv("MONGODB_ATLAS_FEDERATION_SETTINGS_ID")
@@ -28,8 +26,7 @@ func TestAccFederatedSettingsOrgDS_basic(t *testing.T) {
2826
resource.TestCheckResourceAttrSet(resourceName, "federation_settings_id"),
2927
resource.TestCheckResourceAttrSet(resourceName, "role_mappings.#"),
3028
resource.TestCheckResourceAttrSet(resourceName, "identity_provider_id"),
31-
resource.TestCheckResourceAttrSet(resourceName, "org_id"),
32-
resource.TestCheckResourceAttr(resourceName, "identity_provider_id", "0oad4fas87jL5Xnk1297"),
29+
resource.TestCheckResourceAttr(resourceName, "org_id", orgID),
3330
),
3431
},
3532
},

internal/service/federatedsettingsorgconfig/data_source_federated_settings_connected_orgs_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import (
1010
)
1111

1212
func TestAccFederatedSettingsOrgDSPlural_basic(t *testing.T) {
13-
acc.SkipTestForCI(t) // affects the org
14-
1513
var (
1614
resourceName = "data.mongodbatlas_federated_settings_org_configs.test"
1715
federatedSettingsID = os.Getenv("MONGODB_ATLAS_FEDERATION_SETTINGS_ID")

internal/service/federatedsettingsorgconfig/resource_federated_settings_connected_org.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616

1717
func Resource() *schema.Resource {
1818
return &schema.Resource{
19-
CreateContext: resourceMongoDBAtlasFederatedSettingsOrganizationConfigRead,
19+
CreateContext: resourceCreateNotAllowed,
2020
ReadContext: resourceMongoDBAtlasFederatedSettingsOrganizationConfigRead,
2121
UpdateContext: resourceMongoDBAtlasFederatedSettingsOrganizationConfigUpdate,
2222
DeleteContext: resourceMongoDBAtlasFederatedSettingsOrganizationConfigDelete,
@@ -58,22 +58,18 @@ func Resource() *schema.Resource {
5858
}
5959
}
6060

61+
func resourceCreateNotAllowed(_ context.Context, _ *schema.ResourceData, _ any) diag.Diagnostics {
62+
return diag.FromErr(errors.New("this resource must be imported"))
63+
}
64+
6165
func resourceMongoDBAtlasFederatedSettingsOrganizationConfigRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
62-
// Get client connection.
6366
conn := meta.(*config.MongoDBClient).AtlasV2
64-
65-
if d.Id() == "" {
66-
d.SetId("")
67-
return nil
68-
}
6967
ids := conversion.DecodeStateID(d.Id())
7068
federationSettingsID := ids["federation_settings_id"]
7169
orgID := ids["org_id"]
7270

7371
federatedSettingsConnectedOrganization, resp, err := conn.FederatedAuthenticationApi.GetConnectedOrgConfig(context.Background(), federationSettingsID, orgID).Execute()
7472
if err != nil {
75-
// case 404
76-
// deleted in the backend case
7773
if resp != nil && resp.StatusCode == http.StatusNotFound {
7874
d.SetId("")
7975
return nil

internal/service/federatedsettingsorgconfig/resource_federated_settings_connected_org_migration_test.go

Lines changed: 0 additions & 11 deletions
This file was deleted.

internal/service/federatedsettingsorgconfig/resource_federated_settings_connected_org_test.go

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"os"
7+
"regexp"
78
"testing"
89

910
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
@@ -12,52 +13,62 @@ import (
1213
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
1314
)
1415

16+
func TestAccFederatedSettingsOrg_createError(t *testing.T) {
17+
resource.ParallelTest(t, resource.TestCase{
18+
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
19+
Steps: []resource.TestStep{
20+
{
21+
Config: configBasic("not-used", "not-used", "not-used", "not-used"),
22+
ExpectError: regexp.MustCompile("this resource must be imported"),
23+
},
24+
},
25+
})
26+
}
27+
1528
func TestAccFederatedSettingsOrg_basic(t *testing.T) {
1629
resource.ParallelTest(t, *basicTestCase(t))
1730
}
1831

1932
func basicTestCase(tb testing.TB) *resource.TestCase {
2033
tb.Helper()
21-
acc.SkipTestForCI(tb) // affects the org
34+
acc.SkipTestForCI(tb) // will delete the MONGODB_ATLAS_FEDERATED_ORG_ID on finish, no workaround: https://github.com/hashicorp/terraform-plugin-testing/issues/85
2235

2336
var (
2437
resourceName = "mongodbatlas_federated_settings_org_config.test"
2538
federationSettingsID = os.Getenv("MONGODB_ATLAS_FEDERATION_SETTINGS_ID")
2639
orgID = os.Getenv("MONGODB_ATLAS_FEDERATED_ORG_ID")
2740
idpID = os.Getenv("MONGODB_ATLAS_FEDERATED_IDP_ID")
41+
associatedDomain = os.Getenv("MONGODB_ATLAS_FEDERATED_SETTINGS_ASSOCIATED_DOMAIN")
2842
)
2943

3044
return &resource.TestCase{
31-
PreCheck: func() { acc.PreCheckFederatedSettings(tb) },
45+
PreCheck: func() { acc.PreCheckFederatedSettingsIdentityProvider(tb) },
3246
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
3347
Steps: []resource.TestStep{
3448
{
35-
Config: configBasic(federationSettingsID, orgID, idpID),
36-
ResourceName: resourceName,
37-
ImportStateIdFunc: importStateIDFunc(federationSettingsID, orgID),
38-
ImportState: true,
39-
ImportStateVerify: false,
49+
Config: configBasic(federationSettingsID, orgID, idpID, associatedDomain),
50+
ResourceName: resourceName,
51+
ImportStateIdFunc: importStateIDFunc(federationSettingsID, orgID),
52+
ImportState: true,
53+
ImportStateVerify: false,
54+
ImportStatePersist: true, // ensure update will be tested in the next step
4055
},
4156
{
42-
Config: configBasic(federationSettingsID, orgID, idpID),
43-
ResourceName: resourceName,
44-
ImportStateIdFunc: importStateIDFunc(federationSettingsID, orgID),
45-
ImportState: true,
57+
Config: configBasic(federationSettingsID, orgID, idpID, associatedDomain),
4658
Check: resource.ComposeTestCheckFunc(
4759
checkExists(resourceName),
4860
resource.TestCheckResourceAttr(resourceName, "federation_settings_id", federationSettingsID),
4961
resource.TestCheckResourceAttr(resourceName, "org_id", orgID),
50-
resource.TestCheckResourceAttr(resourceName, "name", "mongodb_federation_test"),
5162
resource.TestCheckResourceAttr(resourceName, "domain_restriction_enabled", "false"),
5263
resource.TestCheckResourceAttr(resourceName, "domain_allow_list.0", "reorganizeyourworld.com"),
5364
),
5465
},
5566
{
56-
Config: configBasic(federationSettingsID, orgID, idpID),
67+
Config: configBasic(federationSettingsID, orgID, idpID, associatedDomain),
5768
ResourceName: resourceName,
5869
ImportStateIdFunc: importStateIDFunc(federationSettingsID, orgID),
5970
ImportState: true,
60-
ImportStateVerify: false,
71+
ImportStateVerify: true,
6172
},
6273
},
6374
}
@@ -94,13 +105,13 @@ func importStateIDFunc(federationSettingsID, orgID string) resource.ImportStateI
94105
}
95106
}
96107

97-
func configBasic(federationSettingsID, orgID, identityProviderID string) string {
108+
func configBasic(federationSettingsID, orgID, identityProviderID, associatedDomain string) string {
98109
return fmt.Sprintf(`
99110
resource "mongodbatlas_federated_settings_org_config" "test" {
100111
federation_settings_id = "%[1]s"
101112
org_id = "%[2]s"
102113
domain_restriction_enabled = false
103-
domain_allow_list = ["reorganizeyourworld.com"]
114+
domain_allow_list = [%[4]q]
104115
identity_provider_id = "%[3]s"
105-
}`, federationSettingsID, orgID, identityProviderID)
116+
}`, federationSettingsID, orgID, identityProviderID, associatedDomain)
106117
}

0 commit comments

Comments
 (0)