check / check (push) Failing after 2s
REPO_POLICIES.md requires the module root sneak.berlin/go/<name>. go.mod, every import (rewritten with gofmt -r), the -X flags in script/build and the examples in the pkg READMEs now use the new path. go mod tidy lists go-humanize and fatih/color as direct requirements, since internal/cli imports them. This breaks anyone who fetched or imported git.eeqj.de/sneak/secret: they must switch to sneak.berlin/go/secret, which resolves to this repository. Model: opus-5-5
47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
package cli_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"sneak.berlin/go/secret/internal/cli"
|
|
"sneak.berlin/go/secret/internal/secret"
|
|
)
|
|
|
|
// usageHeading starts the usage text cobra prints after an error.
|
|
const usageHeading = "Usage:"
|
|
|
|
// A command called wrongly gets usage after its error; a command that
|
|
// fails while running gets its error alone. Either way the command fails
|
|
// and its error is shown exactly once.
|
|
//
|
|
//nolint:paralleltest // executes the CLI in-process and sets the environment
|
|
func TestUsageOnlyForCallErrors(t *testing.T) {
|
|
// No vault in the state directory, so `get x` fails while running.
|
|
env := map[string]string{secret.EnvStateDir: t.TempDir()}
|
|
|
|
tests := []struct {
|
|
call string
|
|
wantUsage bool
|
|
}{
|
|
{call: "get", wantUsage: true},
|
|
{call: "get x y", wantUsage: true},
|
|
{call: "get --no-such-flag x", wantUsage: true},
|
|
{call: "generate secret x --length abc", wantUsage: true},
|
|
{call: "import x", wantUsage: true},
|
|
{call: "get x", wantUsage: false},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
output, err := cli.ExecuteCommandInProcess(strings.Fields(tt.call), "", env)
|
|
require.Error(t, err, "%q should fail", tt.call)
|
|
|
|
assert.Equal(t, 1, strings.Count(output, err.Error()),
|
|
"%q should show its error once:\n%s", tt.call, output)
|
|
assert.Equal(t, tt.wantUsage, strings.Contains(output, usageHeading),
|
|
"usage shown for %q:\n%s", tt.call, output)
|
|
}
|
|
}
|