check / check (push) Waiting to run
`secret unlocker list --json` printed "unlockers": null for a vault with no unlockers, and `secret vault list --json` printed "vaults": null when vaults.d held no vaults. Both lists were nil slices, which encoding/json writes as null. Each is now made as an empty slice before it is filled, so an empty list prints as []. vault.ListVaults therefore returns an empty slice instead of nil for an empty vaults.d; its other callers only range over the result or check its length. Model: opus-5-5
43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
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())
|
|
}
|