Skip to content

Commit a7dec60

Browse files
fix: Add toUpperCase to provider and region fields in cluster resources (#1837)
1 parent fbda4ba commit a7dec60

5 files changed

+69
-20
lines changed

internal/service/advancedcluster/common_advanced_cluster.go

+17
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"strings"
1111
"time"
1212

13+
"github.com/hashicorp/go-cty/cty"
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1315
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
1416
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1517
"github.com/mwielbut/pointy"
@@ -611,3 +613,18 @@ func flattenEndpoints(listEndpoints []matlas.Endpoint) []map[string]any {
611613
}
612614
return endpoints
613615
}
616+
617+
func StringIsUppercase() schema.SchemaValidateDiagFunc {
618+
return func(v any, p cty.Path) diag.Diagnostics {
619+
value := v.(string)
620+
var diags diag.Diagnostics
621+
if value != strings.ToUpper(value) {
622+
diagError := diag.Diagnostic{
623+
Severity: diag.Error,
624+
Summary: fmt.Sprintf("The provided string '%q' must be uppercase.", value),
625+
}
626+
diags = append(diags, diagError)
627+
}
628+
return diags
629+
}
630+
}

internal/service/advancedcluster/common_advanced_cluster_test.go

+33
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,39 @@ func TestResourceClusterRefreshFunc(t *testing.T) {
142142
}
143143
}
144144

145+
func TestStringIsUppercase(t *testing.T) {
146+
testCases := []struct {
147+
name string
148+
expectedError bool
149+
}{
150+
{
151+
name: "AWS",
152+
expectedError: false,
153+
},
154+
{
155+
name: "aws",
156+
expectedError: true,
157+
},
158+
{
159+
name: "",
160+
expectedError: false,
161+
},
162+
{
163+
name: "AwS",
164+
expectedError: true,
165+
},
166+
}
167+
168+
for _, tc := range testCases {
169+
t.Run(tc.name, func(t *testing.T) {
170+
diag := advancedcluster.StringIsUppercase()(tc.name, nil)
171+
if diag.HasError() != tc.expectedError {
172+
t.Errorf("Case %s: Received unexpected error: %v", tc.name, diag[0].Summary)
173+
}
174+
})
175+
}
176+
}
177+
145178
func TestResourceListAdvancedRefreshFunc(t *testing.T) {
146179
testCases := []struct {
147180
mockCluster *matlas.AdvancedClustersResponse

internal/service/advancedcluster/resource_advanced_cluster.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ import (
1212
"strings"
1313
"time"
1414

15-
matlas "go.mongodb.org/atlas/mongodbatlas"
16-
"golang.org/x/exp/slices"
17-
1815
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1916
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
2017
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -24,6 +21,8 @@ import (
2421
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
2522
"github.com/mwielbut/pointy"
2623
"github.com/spf13/cast"
24+
matlas "go.mongodb.org/atlas/mongodbatlas"
25+
"golang.org/x/exp/slices"
2726
)
2827

2928
type acCtxKey string
@@ -260,13 +259,15 @@ func Resource() *schema.Resource {
260259
Required: true,
261260
},
262261
"provider_name": {
263-
Type: schema.TypeString,
264-
Required: true,
262+
Type: schema.TypeString,
263+
Required: true,
264+
ValidateDiagFunc: StringIsUppercase(),
265265
},
266266
"read_only_specs": advancedClusterRegionConfigsSpecsSchema(),
267267
"region_name": {
268-
Type: schema.TypeString,
269-
Required: true,
268+
Type: schema.TypeString,
269+
Required: true,
270+
ValidateDiagFunc: StringIsUppercase(),
270271
},
271272
},
272273
},

internal/service/cluster/resource_cluster.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,17 @@ import (
1212
"strings"
1313
"time"
1414

15-
matlas "go.mongodb.org/atlas/mongodbatlas"
16-
1715
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1816
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
1917
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
2018
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
21-
"github.com/mwielbut/pointy"
22-
"github.com/spf13/cast"
23-
2419
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/constant"
2520
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
2621
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
2722
"github.com/mongodb/terraform-provider-mongodbatlas/internal/service/advancedcluster"
23+
"github.com/mwielbut/pointy"
24+
"github.com/spf13/cast"
25+
matlas "go.mongodb.org/atlas/mongodbatlas"
2826
)
2927

3028
const (
@@ -153,8 +151,9 @@ func Resource() *schema.Resource {
153151
Required: true,
154152
},
155153
"provider_name": {
156-
Type: schema.TypeString,
157-
Required: true,
154+
Type: schema.TypeString,
155+
Required: true,
156+
ValidateDiagFunc: advancedcluster.StringIsUppercase(),
158157
},
159158
"pit_enabled": {
160159
Type: schema.TypeBool,
@@ -235,8 +234,9 @@ func Resource() *schema.Resource {
235234
Elem: &schema.Resource{
236235
Schema: map[string]*schema.Schema{
237236
"region_name": {
238-
Type: schema.TypeString,
239-
Required: true,
237+
Type: schema.TypeString,
238+
Required: true,
239+
ValidateDiagFunc: advancedcluster.StringIsUppercase(),
240240
},
241241
"electable_nodes": {
242242
Type: schema.TypeInt,

internal/service/cluster/resource_cluster_test.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,16 @@ import (
99
"regexp"
1010
"testing"
1111

12-
matlas "go.mongodb.org/atlas/mongodbatlas"
13-
1412
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
1513
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
1614
"github.com/hashicorp/terraform-plugin-testing/plancheck"
1715
"github.com/hashicorp/terraform-plugin-testing/terraform"
18-
"github.com/mwielbut/pointy"
19-
2016
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
2117
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
2218
clustersvc "github.com/mongodb/terraform-provider-mongodbatlas/internal/service/cluster"
2319
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
20+
"github.com/mwielbut/pointy"
21+
matlas "go.mongodb.org/atlas/mongodbatlas"
2422
)
2523

2624
func TestAccClusterRSCluster_basicAWS_simple(t *testing.T) {

0 commit comments

Comments
 (0)