argo-cd/cmd/argocd/commands/configure_test.go
david-wu-octopus b5d8eddb82
feat: Add reusable interactive prompts and configure command (issue #19528) (#19637)
* Add `Prompt`, with `prompts.enabled` setting in `argocd-cm`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Make `SettingsOpts`, `SettingsOpts.ArgocdCMPath`, `SettingsOpts.CreateSettingsManager()`  and `commandContext.CreateSettingsManager()` exportable

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add `prompt_test.go`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Refactor `NewPrompt()` and move into new package `utils`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Update `NewPrompt()` to use local config

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add `NewConfigurationCommand()`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Move `prompt_test.go`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Remove `prompt_test.go` for now

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add back and update `prompt_test.go`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add `configuration_test.go`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Fix linting issues

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Fix linting issues

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Reverse early-termination logic in `Confirm()`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Rename `ArgocdCMPath` to `argocdCMPath`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Rename `SettingsOpts` to `settingsOpts`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Rename `CreateSettingsManager()` to `createSettingsManager()`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Rename `configuration` to `configure`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Further rename `configuration` to `configure`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Remove redundant Argo CD ConfigMap logic

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Fix terminal output spacing

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Make `argocd configure` use local config value as the default value for `--prompts-enabled`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add global CLI flag `--force-prompts-enabled`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Update existing `prompt_test.go` test cases

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add test case for `(p *Prompt).Confirm()`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add test cases for `GetBoolFlagWithFallback()` to `env_test.go`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Format imports

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Further format imports and remove unused variable

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Again format imports

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add fallback to `GetPromptsEnabled()`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Fix bug in `GetPromptsEnabled()`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Fix missing import

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add auto-generated docs for `argocd configure`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add auto-generated docs for new global CLI flag `--force-prompts-enabled`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Update `NewPrompt()` to receive a `bool` rather than `*apiclient.ClientOptions` arg

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Remove arg `fallback` from `GetPromptsEnabled()`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add arg `useCLIOpts bool` to `GetPromptsEnabled()`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Make `config.LoadFlags()` exportable

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Add tests for `GetPromptsEnabled()`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Fix linting errors in tests

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

* Run `make codegen-local`

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>

---------

Signed-off-by: David Wu <155603967+david-wu-octopus@users.noreply.github.com>
2024-10-25 10:21:23 +03:00

97 lines
3 KiB
Go

package commands
import (
"os"
"testing"
argocdclient "github.com/argoproj/argo-cd/v2/pkg/apiclient"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/argoproj/argo-cd/v2/util/localconfig"
)
func TestNewConfigureCommand_PromptsEnabled_DefaultTrue(t *testing.T) {
// Write the test config file
err := os.WriteFile(testConfigFilePath, []byte(testConfig), os.ModePerm)
require.NoError(t, err)
defer os.Remove(testConfigFilePath)
err = os.Chmod(testConfigFilePath, 0o600)
require.NoError(t, err, "Could not change the file permission to 0600 %v", err)
localConfig, err := localconfig.ReadLocalConfig(testConfigFilePath)
require.NoError(t, err)
assert.False(t, localConfig.PromptsEnabled)
// Set `PromptsEnabled` to `true` using `argocd configure --prompts-enabled`
cmd := NewConfigureCommand(&argocdclient.ClientOptions{ConfigPath: testConfigFilePath})
cmd.SetArgs([]string{"--prompts-enabled"})
err = cmd.Execute()
require.NoError(t, err)
// Read the test config file
localConfig, err = localconfig.ReadLocalConfig(testConfigFilePath)
require.NoError(t, err)
assert.True(t, localConfig.PromptsEnabled)
}
func TestNewConfigureCommand_PromptsEnabled_True(t *testing.T) {
// Write the test config file
err := os.WriteFile(testConfigFilePath, []byte(testConfig), os.ModePerm)
require.NoError(t, err)
defer os.Remove(testConfigFilePath)
err = os.Chmod(testConfigFilePath, 0o600)
require.NoError(t, err, "Could not change the file permission to 0600 %v", err)
localConfig, err := localconfig.ReadLocalConfig(testConfigFilePath)
require.NoError(t, err)
assert.False(t, localConfig.PromptsEnabled)
// Set `PromptsEnabled` to `true` using `argocd configure --prompts-enabled=true`
cmd := NewConfigureCommand(&argocdclient.ClientOptions{ConfigPath: testConfigFilePath})
cmd.SetArgs([]string{"--prompts-enabled=true"})
err = cmd.Execute()
require.NoError(t, err)
// Read the test config file
localConfig, err = localconfig.ReadLocalConfig(testConfigFilePath)
require.NoError(t, err)
assert.True(t, localConfig.PromptsEnabled)
}
func TestNewConfigureCommand_PromptsEnabled_False(t *testing.T) {
// Write the test config file
err := os.WriteFile(testConfigFilePath, []byte(testConfig), os.ModePerm)
require.NoError(t, err)
defer os.Remove(testConfigFilePath)
err = os.Chmod(testConfigFilePath, 0o600)
require.NoError(t, err, "Could not change the file permission to 0600 %v", err)
localConfig, err := localconfig.ReadLocalConfig(testConfigFilePath)
require.NoError(t, err)
assert.False(t, localConfig.PromptsEnabled)
// Set `PromptsEnabled` to `false` using `argocd configure --prompts-enabled=false`
cmd := NewConfigureCommand(&argocdclient.ClientOptions{ConfigPath: testConfigFilePath})
cmd.SetArgs([]string{"--prompts-enabled=false"})
err = cmd.Execute()
require.NoError(t, err)
// Read the test config file
localConfig, err = localconfig.ReadLocalConfig(testConfigFilePath)
require.NoError(t, err)
assert.False(t, localConfig.PromptsEnabled)
}