From a8bb4fea9b2be79146323fe922b4075775c300b0 Mon Sep 17 00:00:00 2001 From: markus812498 Date: Wed, 17 Dec 2025 15:04:34 +1300 Subject: [PATCH 1/3] check api key var during completion --- cmd/completion_helpers.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmd/completion_helpers.go b/cmd/completion_helpers.go index f8e1fce..08d6e71 100644 --- a/cmd/completion_helpers.go +++ b/cmd/completion_helpers.go @@ -4,13 +4,19 @@ import ( "encoding/json" "fmt" "strconv" - + "os" "cloudamqp-cli/client" "github.com/spf13/cobra" ) // completionAPIKey retrieves the API key without prompting the user func completionAPIKey() (string, error) { + // First, check environment variable + if apiKey := os.Getenv("CLOUDAMQP_APIKEY"); apiKey != "" { + return apiKey, nil + } + + // Second, check config file apiKey, err := loadAPIKey() if apiKey != "" { return apiKey, nil From 2e27446e1ff359b076c9e165ad4917dc38e04d49 Mon Sep 17 00:00:00 2001 From: markus812498 Date: Wed, 17 Dec 2025 15:18:02 +1300 Subject: [PATCH 2/3] import right order --- cmd/completion_helpers.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/completion_helpers.go b/cmd/completion_helpers.go index 08d6e71..ef67d1b 100644 --- a/cmd/completion_helpers.go +++ b/cmd/completion_helpers.go @@ -3,8 +3,9 @@ package cmd import ( "encoding/json" "fmt" - "strconv" "os" + "strconv" + "cloudamqp-cli/client" "github.com/spf13/cobra" ) From e356c0d8b4bea824f1e269a66fec1f945eb175a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Eckerstr=C3=B6m?= Date: Wed, 17 Dec 2025 06:35:44 +0100 Subject: [PATCH 3/3] Specs for completion apikey precedence --- cmd/command_test.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/cmd/command_test.go b/cmd/command_test.go index 6b4f795..ec2c00a 100644 --- a/cmd/command_test.go +++ b/cmd/command_test.go @@ -165,6 +165,51 @@ func TestEnvironmentVariablePrecedence(t *testing.T) { assert.Equal(t, "env-key", apiKey) } +func TestCompletionAPIKeyPrecedence(t *testing.T) { + // Create temp directory + tempDir, err := os.MkdirTemp("", "cloudamqp-test") + assert.NoError(t, err) + defer os.RemoveAll(tempDir) + + // Override home directory for test + originalHome := os.Getenv("HOME") + os.Setenv("HOME", tempDir) + defer os.Setenv("HOME", originalHome) + + // Clear any existing env var + originalEnvKey := os.Getenv("CLOUDAMQP_APIKEY") + os.Unsetenv("CLOUDAMQP_APIKEY") + defer func() { + if originalEnvKey != "" { + os.Setenv("CLOUDAMQP_APIKEY", originalEnvKey) + } + }() + + t.Run("returns error when no key configured", func(t *testing.T) { + _, err := completionAPIKey() + assert.Error(t, err) + assert.Contains(t, err.Error(), "API key not configured") + }) + + t.Run("returns key from config file", func(t *testing.T) { + err := saveMainAPIKey("file-key") + assert.NoError(t, err) + + apiKey, err := completionAPIKey() + assert.NoError(t, err) + assert.Equal(t, "file-key", apiKey) + }) + + t.Run("env var takes precedence over config file", func(t *testing.T) { + os.Setenv("CLOUDAMQP_APIKEY", "env-key") + defer os.Unsetenv("CLOUDAMQP_APIKEY") + + apiKey, err := completionAPIKey() + assert.NoError(t, err) + assert.Equal(t, "env-key", apiKey) + }) +} + func TestInstanceActionsCommand(t *testing.T) { cmd := instanceCmd