Skip to content

add helper tests #472

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 10, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
142 changes: 142 additions & 0 deletions cmd/helpers_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
package cmd

import (
"bytes"
"io"
"os"
"os/exec"
"testing"

"github.com/stretchr/testify/require"
)

func captureStdout(f func()) (string, error) {
old := os.Stdout
r, w, err := os.Pipe()
if err != nil {
return "", err
}
os.Stdout = w

defer func() {
os.Stdout = old
}()

f()

w.Close()

var buf bytes.Buffer
_, err = io.Copy(&buf, r)
if err != nil {
return "", err
}
return buf.String(), nil
}

func TestCaptureStdout(t *testing.T) {
output, err := captureStdout(func() {
_, _ = os.Stdout.Write([]byte("test"))
})
require.NoError(t, err)
require.Equal(t, "test", output)
}

func TestIsDebug(t *testing.T) {
tests := []struct {
name string
envValue string
expected bool
}{
{
name: "HELM_DEBUG is true",
envValue: "true",
expected: true,
},
{
name: "HELM_DEBUG is false",
envValue: "false",
expected: false,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Setenv("HELM_DEBUG", tt.envValue)
require.Equalf(t, tt.expected, isDebug(), "Expected %v but got %v", tt.expected, isDebug())
})
}
}

func TestDebugPrint(t *testing.T) {
tests := []struct {
name string
envValue string
expected string
}{
{
name: "non-empty when HELM_DEBUG is true",
envValue: "true",
expected: "test\n",
},
{
name: "empty when HELM_DEBUG is false",
envValue: "false",
expected: "",
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Setenv("HELM_DEBUG", tt.envValue)
output, err := captureStdout(func() {
debugPrint("test")
})
require.NoError(t, err)
require.Equalf(t, tt.expected, output, "Expected %v but got %v", tt.expected, output)
})
}
}

func TestOutputWithRichError(t *testing.T) {
tests := []struct {
name string
envValue string
cmd *exec.Cmd
expected string
expectedStdout string
}{
{
name: "debug output in stdout when HELM_DEBUG is true",
envValue: "true",
cmd: exec.Command("echo", "test1"),
expected: "test1\n",
expectedStdout: "Executing echo test1\n",
},
{
name: "non-debug output in stdout when HELM_DEBUG is false",
envValue: "false",
cmd: exec.Command("echo", "test2"),
expected: "test2\n",
expectedStdout: "",
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Setenv("HELM_DEBUG", tt.envValue)
var (
stdoutString string
outBytes []byte
funcErr, captureErr error
)
stdoutString, captureErr = captureStdout(func() {
outBytes, funcErr = outputWithRichError(tt.cmd)
})
require.NoError(t, captureErr)
require.NoError(t, funcErr)
require.Equalf(t, tt.expected, string(outBytes), "Expected %v but got %v", tt.expected, string(outBytes))
require.Equalf(t, tt.expectedStdout, stdoutString, "Expected %v but got %v", tt.expectedStdout, stdoutString)
})
}
}