Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions internal/helpers/regex.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const (
GuidOrEmptyValueRegex = "^(?:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})?$"
UrlValidStringRegex = "(?i)^[A-Za-z0-9-._~%/:/?=]+$"
ApiIdRegex = "^[0-9a-zA-Z/._]*$"
DomainNameRegex = "^[a-z][a-z0-9-]*$"
StringRegex = "^.*$"
VersionRegex = "^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$"
TimeRegex = "^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z)$"
Expand Down
1 change: 1 addition & 0 deletions internal/services/environment/resource_environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,7 @@ func (r *Resource) Schema(ctx context.Context, req resource.SchemaRequest, resp
},
Validators: []validator.String{
stringvalidator.LengthAtLeast(1),
stringvalidator.RegexMatches(regexp.MustCompile(helpers.DomainNameRegex), "domain must start with a lowercase letter and contain only lowercase letters, numbers, and '-'"),
},
},
"organization_id": schema.StringAttribute{
Expand Down
48 changes: 48 additions & 0 deletions internal/services/environment/resource_environment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1693,6 +1693,54 @@ func TestUnitEnvironmentsResource_Validate_Taken_Domain_Name(t *testing.T) {
})
}

func TestUnitEnvironmentsResource_Validate_Domain_Format_Valid(t *testing.T) {
resource.Test(t, resource.TestCase{
IsUnitTest: true,
ProtoV6ProviderFactories: mocks.TestUnitTestProtoV6ProviderFactories,
Steps: []resource.TestStep{
{
PlanOnly: true,
Config: `
resource "powerplatform_environment" "development" {
display_name = "displayname"
location = "europe"
environment_type = "Sandbox"
dataverse = {
language_code = "1033"
currency_code = "PLN"
domain = "example-env-2026"
security_group_id = "00000000-0000-0000-0000-000000000000"
}
}`,
},
},
})
}

func TestUnitEnvironmentsResource_Validate_Domain_Format_Invalid_Characters(t *testing.T) {
resource.Test(t, resource.TestCase{
IsUnitTest: true,
ProtoV6ProviderFactories: mocks.TestUnitTestProtoV6ProviderFactories,
Steps: []resource.TestStep{
{
ExpectError: regexp.MustCompile("domain must start with a lowercase letter"),
Config: `
resource "powerplatform_environment" "development" {
display_name = "displayname"
location = "europe"
environment_type = "Sandbox"
dataverse = {
language_code = "1033"
currency_code = "PLN"
domain = "example_env"
security_group_id = "00000000-0000-0000-0000-000000000000"
}
}`,
},
},
})
}

func TestUnitEnvironmentsResource_Validate_Create_No_Dataverse(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
Expand Down
Loading