package main import ( "bytes" "context" "strings" "testing" "github.com/stretchr/testify/assert" ) func TestDispatch_Help_PrintsUsageAndReturnsZero(t *testing.T) { var out, errBuf bytes.Buffer code := dispatch(context.Background(), []string{"--help"}, strings.NewReader(""), &out, &errBuf) assert.Equal(t, 0, code) assert.Contains(t, out.String(), "Usage: hyperguild") assert.Contains(t, out.String(), "tier") assert.Contains(t, out.String(), "brain") assert.Contains(t, out.String(), "mode") } func TestDispatch_NoArgs_PrintsUsageAndReturnsTwo(t *testing.T) { var out, errBuf bytes.Buffer code := dispatch(context.Background(), []string{}, strings.NewReader(""), &out, &errBuf) assert.Equal(t, 2, code) assert.Contains(t, errBuf.String(), "Usage: hyperguild") } func TestDispatch_UnknownSubcommand_ReturnsTwo(t *testing.T) { var out, errBuf bytes.Buffer code := dispatch(context.Background(), []string{"bogus"}, strings.NewReader(""), &out, &errBuf) assert.Equal(t, 2, code) assert.Contains(t, errBuf.String(), "unknown subcommand: bogus") } func TestDispatch_KnownSubcommand_RoutesToHandler(t *testing.T) { // "mode" without args fails → exit 1, message on stderr. // (Confirms dispatch reached the handler rather than printing "unknown // subcommand: mode".) var out, errBuf bytes.Buffer code := dispatch(context.Background(), []string{"mode"}, strings.NewReader(""), &out, &errBuf) assert.Equal(t, 1, code) assert.Contains(t, errBuf.String(), "name required") assert.NotContains(t, errBuf.String(), "unknown subcommand") }