check / check (push) Waiting to run
snapshot, config, remote, database and completion had no Run, and cobra checks a command's arguments only when it has one, so `vaultik snapshot craete` printed the group's help and exited 0. Each group now prints its help only when given no argument; any other word fails as an unknown command with exit 1, as at the top level. cobra adds the completion command only when Execute runs, so the root command now adds it itself to give it a Run. Its scripts then go to os.Stdout as it was at that moment; a later SetOut does not redirect them. Judgement call: the error has no "Did you mean" suggestion, which the top level gives. Model: opus-5-5
44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package cli //nolint:testpackage // shares runEntry and the command-word constants
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// TestEntryGroupRejectsUnknownSubcommand runs each group command with a
|
|
// mistyped subcommand, as a crontab line might carry one. It must fail
|
|
// with exit 1 and name the word, as `vaultik bogus` does at the top
|
|
// level, instead of printing the group's help and exiting 0 having done
|
|
// nothing. The group name alone still prints its help.
|
|
//
|
|
//nolint:paralleltest // replaces os.Args, os.Stdout and os.Stderr
|
|
func TestEntryGroupRejectsUnknownSubcommand(t *testing.T) {
|
|
for _, testCase := range []struct {
|
|
group string
|
|
mistyped string
|
|
}{
|
|
{group: cmdSnapshot, mistyped: "craete"},
|
|
{group: "config", mistyped: "inti"},
|
|
{group: cmdRemote, mistyped: "ifno"},
|
|
{group: "database", mistyped: "delte"},
|
|
{group: "completion", mistyped: "nosuchshell"},
|
|
} {
|
|
t.Run(testCase.group, func(t *testing.T) {
|
|
code, stdout, stderr := runEntry(t,
|
|
testCase.group, testCase.mistyped)
|
|
|
|
assert.Equal(t, 1, code)
|
|
assert.Empty(t, stdout)
|
|
assert.Contains(t, stderr,
|
|
`unknown command "`+testCase.mistyped+`"`)
|
|
|
|
code, stdout, _ = runEntry(t, testCase.group)
|
|
|
|
assert.Equal(t, 0, code)
|
|
assert.Contains(t, stdout,
|
|
programName+" "+testCase.group+" [command]")
|
|
})
|
|
}
|
|
}
|