// Copyright IBM Corp. 2014, 2026 // SPDX-License-Identifier: BUSL-1.1 package stackmigrate import ( "os" "path/filepath" "testing" "github.com/hashicorp/terraform/internal/backend/local" ) // DefaultDataDir is the default directory for storing local data. const DefaultDataDir = ".terraform" func TestMeta_Workspace_override(t *testing.T) { defer func(value string) { os.Setenv(WorkspaceNameEnvVar, value) }(os.Getenv(WorkspaceNameEnvVar)) m := new(Meta) testCases := map[string]struct { workspace string err error }{ "": { "default", nil, }, "development": { "development", nil, }, "invalid name": { "", errInvalidWorkspaceNameEnvVar, }, } for name, tc := range testCases { t.Run(name, func(t *testing.T) { os.Setenv(WorkspaceNameEnvVar, name) workspace, err := m.Workspace() if workspace != tc.workspace { t.Errorf("Unexpected workspace\n got: %s\nwant: %s\n", workspace, tc.workspace) } if err != tc.err { t.Errorf("Unexpected error\n got: %s\nwant: %s\n", err, tc.err) } }) } } // If somehow an invalid workspace has been selected, the Meta.Workspace // method should not return an error, to ensure that we don't break any // existing workflows with invalid workspace names. func TestMeta_Workspace_invalidSelected(t *testing.T) { td := t.TempDir() t.Chdir(td) // this is an invalid workspace name workspace := "test workspace" // create the workspace directories if err := os.MkdirAll(filepath.Join(local.DefaultWorkspaceDir, workspace), 0755); err != nil { t.Fatal(err) } // create the workspace file to select it if err := os.MkdirAll(DefaultDataDir, 0755); err != nil { t.Fatal(err) } if err := os.WriteFile(filepath.Join(DefaultDataDir, local.DefaultWorkspaceFile), []byte(workspace), 0644); err != nil { t.Fatal(err) } m := new(Meta) ws, err := m.Workspace() if ws != workspace { t.Errorf("Unexpected workspace\n got: %s\nwant: %s\n", ws, workspace) } if err != nil { t.Errorf("Unexpected error: %s", err) } }