Skip to content

Commit

Permalink
Feat: ignore archived environments when searching by name (#561)
Browse files Browse the repository at this point in the history
  • Loading branch information
TomerHeber authored Dec 28, 2022
1 parent cfe44c1 commit 965936d
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 3 deletions.
74 changes: 74 additions & 0 deletions client/api_client_mock.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 9 additions & 1 deletion env0/data_environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ func dataEnvironment() *schema.Resource {
Optional: true,
ExactlyOneOf: []string{"name", "id"},
},
"exclude_archived": {
Type: schema.TypeBool,
Description: "set to 'true' to exclude archived environments when getting an environment by name",
Optional: true,
Default: false,
ConflictsWith: []string{"id"},
},
"project_id": {
Type: schema.TypeString,
Description: "project id of the environment",
Expand Down Expand Up @@ -91,7 +98,8 @@ func dataEnvironmentRead(ctx context.Context, d *schema.ResourceData, meta inter
}
} else {
name := d.Get("name")
environment, err = getEnvironmentByName(name.(string), meta)
excludeArchived := d.Get("exclude_archived")
environment, err = getEnvironmentByName(name.(string), meta, excludeArchived.(bool))
if err != nil {
return err
}
Expand Down
21 changes: 21 additions & 0 deletions env0/data_environment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,14 @@ func TestEnvironmentDataSource(t *testing.T) {
Name: "other-name",
}

archivedEnvironment := client.Environment{
Id: "id-archived",
Name: environment.Name,
IsArchived: true,
}

environmentFieldsByName := map[string]interface{}{"name": environment.Name}
environmentFieldsByNameWithExclude := map[string]interface{}{"name": environment.Name, "exclude_archived": "true"}
environmentFieldsById := map[string]interface{}{"id": environment.Id}

resourceType := "env0_environment"
Expand Down Expand Up @@ -101,6 +108,13 @@ func TestEnvironmentDataSource(t *testing.T) {
)
})

t.Run("By Name with Archived", func(t *testing.T) {
runUnitTest(t,
getValidTestCase(environmentFieldsByNameWithExclude),
mockListEnvironmentsCall([]client.Environment{environment, archivedEnvironment, otherEnvironment}),
)
})

t.Run("Throw error when no name or id is supplied", func(t *testing.T) {
runUnitTest(t,
getErrorTestCase(map[string]interface{}{}, "one of `id,name` must be specified"),
Expand All @@ -115,6 +129,13 @@ func TestEnvironmentDataSource(t *testing.T) {
)
})

t.Run("Throw error when by name and more than one environment exists (archived use-case)", func(t *testing.T) {
runUnitTest(t,
getErrorTestCase(environmentFieldsByName, "Found multiple environments for name"),
mockListEnvironmentsCall([]client.Environment{environment, archivedEnvironment, otherEnvironment}),
)
})

t.Run("Throw error when by name and no environments found at all", func(t *testing.T) {
runUnitTest(t,
getErrorTestCase(environmentFieldsByName, "Could not find an env0 environment with name"),
Expand Down
8 changes: 6 additions & 2 deletions env0/resource_environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -840,7 +840,7 @@ func getConfigurationVariableFromSchema(variable map[string]interface{}) client.
return configurationVariable
}

func getEnvironmentByName(name interface{}, meta interface{}) (client.Environment, diag.Diagnostics) {
func getEnvironmentByName(name interface{}, meta interface{}, excludeArchived bool) (client.Environment, diag.Diagnostics) {
apiClient := meta.(client.ApiClientInterface)
environments, err := apiClient.Environments()
if err != nil {
Expand All @@ -849,6 +849,10 @@ func getEnvironmentByName(name interface{}, meta interface{}) (client.Environmen

var environmentsByName []client.Environment
for _, candidate := range environments {
if excludeArchived && candidate.IsArchived {
continue
}

if candidate.Name == name {
environmentsByName = append(environmentsByName, candidate)
}
Expand Down Expand Up @@ -886,7 +890,7 @@ func resourceEnvironmentImport(ctx context.Context, d *schema.ResourceData, meta
log.Println("[DEBUG] ID is not a valid env0 id ", id)
log.Println("[INFO] Resolving Environment by name: ", id)

environment, getErr = getEnvironmentByName(id, meta)
environment, getErr = getEnvironmentByName(id, meta, false)
}
apiClient := meta.(client.ApiClientInterface)
d.SetId(environment.Id)
Expand Down

0 comments on commit 965936d

Please sign in to comment.