package cli_test import ( "bytes" "encoding/json" "path/filepath" "testing" "github.com/spf13/afero" "github.com/spf13/cobra" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "sneak.berlin/go/secret/internal/cli" "sneak.berlin/go/secret/internal/secret" ) // TestVaultListEmptyJSON is a regression test for // https://git.eeqj.de/sneak/secret/issues/148: listing the vaults when // vaults.d holds none printed "vaults": null in JSON form instead of an // empty list. func TestVaultListEmptyJSON(t *testing.T) { t.Parallel() fs := afero.NewMemMapFs() require.NoError(t, fs.MkdirAll( filepath.Join(testStateDir, "vaults.d"), secret.DirPerms, )) var buf bytes.Buffer cmd := &cobra.Command{} cmd.SetOut(&buf) c := cli.NewCLIInstanceWithStateDir(fs, testStateDir) require.NoError(t, c.ListVaults(cmd, true)) var decoded map[string]any require.NoError(t, json.Unmarshal(buf.Bytes(), &decoded)) assert.Equal(t, []any{}, decoded["vaults"], "no vaults must be printed as [], not %s", buf.String()) }