You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraform/internal/command/autocomplete_test.go

128 lines
3.5 KiB

// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1
package command
import (
"reflect"
"testing"
"github.com/hashicorp/cli"
"github.com/hashicorp/terraform/internal/addrs"
"github.com/hashicorp/terraform/internal/command/workdir"
"github.com/hashicorp/terraform/internal/providers"
"github.com/posener/complete"
)
func TestMetaCompletePredictWorkspaceName(t *testing.T) {
t.Run("test autocompletion using the local backend", func(t *testing.T) {
// Create a temporary working directory that is empty
td := t.TempDir()
t.Chdir(td)
ui := new(cli.MockUi)
meta := &Meta{Ui: ui}
predictor := meta.completePredictWorkspaceName()
got := predictor.Predict(complete.Args{
Last: "",
})
want := []string{"default"}
if !reflect.DeepEqual(got, want) {
t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, want)
}
})
t.Run("test autocompletion using a state store", func(t *testing.T) {
// Create a temporary working directory with state_store config
td := t.TempDir()
testCopyDir(t, testFixturePath("state-store-unchanged"), td)
t.Chdir(td)
// Set up pluggable state store provider mock
mockProvider := mockPluggableStateStorageProvider()
// Mock the existence of workspaces
mockProvider.MockStates = map[string]interface{}{
"default": true,
"foobar": true,
}
mockProviderAddress := addrs.NewDefaultProvider("test")
providerSource, close := newMockProviderSource(t, map[string][]string{
"hashicorp/test": {"1.0.0"},
})
defer close()
ui := new(cli.MockUi)
view, _ := testView(t)
wd := workdir.NewDir(".")
wd.OverrideOriginalWorkingDir(td)
meta := Meta{
WorkingDir: wd, // Use the test's temp dir
Ui: ui,
View: view,
AllowExperimentalFeatures: true,
testingOverrides: &testingOverrides{
Providers: map[addrs.Provider]providers.Factory{
mockProviderAddress: providers.FactoryFixed(mockProvider),
},
},
ProviderSource: providerSource,
}
predictor := meta.completePredictWorkspaceName()
got := predictor.Predict(complete.Args{
Last: "",
})
want := []string{"default", "foobar"}
if !reflect.DeepEqual(got, want) {
t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, want)
}
})
t.Run("test autocompletion using a state store containing no workspaces", func(t *testing.T) {
// Create a temporary working directory with state_store config
td := t.TempDir()
testCopyDir(t, testFixturePath("state-store-unchanged"), td)
t.Chdir(td)
// Set up pluggable state store provider mock
mockProvider := mockPluggableStateStorageProvider()
// No workspaces exist in the mock
mockProvider.MockStates = map[string]interface{}{}
mockProviderAddress := addrs.NewDefaultProvider("test")
providerSource, close := newMockProviderSource(t, map[string][]string{
"hashicorp/test": {"1.0.0"},
})
defer close()
ui := new(cli.MockUi)
view, _ := testView(t)
wd := workdir.NewDir(".")
wd.OverrideOriginalWorkingDir(td)
meta := Meta{
WorkingDir: wd, // Use the test's temp dir
Ui: ui,
View: view,
AllowExperimentalFeatures: true,
testingOverrides: &testingOverrides{
Providers: map[addrs.Provider]providers.Factory{
mockProviderAddress: providers.FactoryFixed(mockProvider),
},
},
ProviderSource: providerSource,
}
predictor := meta.completePredictWorkspaceName()
got := predictor.Predict(complete.Args{
Last: "",
})
if got != nil {
t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, nil)
}
})
}