diff --git a/cmd/core/help/cmd.go b/cmd/core/help/cmd.go index 72ed66f..a7274d6 100644 --- a/cmd/core/help/cmd.go +++ b/cmd/core/help/cmd.go @@ -105,6 +105,8 @@ func renderSearchResults(results []*gohelp.SearchResult, query string) error { cli.Println("%s", cli.DimStr(" "+snippet)) } } + cli.Blank() + renderHelpHint(query) return nil } @@ -112,7 +114,9 @@ func renderHelpHint(query string) { cli.Hint("browse", "core help") if trimmed := strings.TrimSpace(query); trimmed != "" { cli.Hint("search", fmt.Sprintf("core help search %q", trimmed)) + return } + cli.Hint("search", "core help search ") } func renderTopicList(topics []*gohelp.Topic) error { @@ -127,6 +131,8 @@ func renderTopicList(topics []*gohelp.Topic) error { cli.Println("%s", cli.DimStr(" "+summary)) } } + cli.Blank() + renderHelpHint("") return nil } @@ -158,4 +164,6 @@ func renderTopic(t *gohelp.Topic) { cli.Blank() cli.Println("%s", t.Content) cli.Blank() + renderHelpHint(t.ID) + cli.Blank() } diff --git a/cmd/core/help/cmd_test.go b/cmd/core/help/cmd_test.go index 958bcb1..15c077a 100644 --- a/cmd/core/help/cmd_test.go +++ b/cmd/core/help/cmd_test.go @@ -74,6 +74,8 @@ func TestAddHelpCommands_Good(t *testing.T) { }) assert.Contains(t, out, "AVAILABLE HELP TOPICS") assert.Contains(t, out, topics[0].ID) + assert.Contains(t, out, "browse") + assert.Contains(t, out, "core help search ") } func TestAddHelpCommands_Good_Serve(t *testing.T) { @@ -118,6 +120,8 @@ func TestAddHelpCommands_Good_Search(t *testing.T) { assert.Contains(t, out, "SEARCH RESULTS") assert.Contains(t, out, query) + assert.Contains(t, out, "browse") + assert.Contains(t, out, "core help search") } func TestRenderSearchResults_Good(t *testing.T) { @@ -137,6 +141,8 @@ func TestRenderSearchResults_Good(t *testing.T) { assert.Contains(t, out, "SEARCH RESULTS") assert.Contains(t, out, "config - Configuration") assert.Contains(t, out, "Core is configured via environment variables.") + assert.Contains(t, out, "browse") + assert.Contains(t, out, "core help search \"config\"") } func TestRenderTopicList_Good(t *testing.T) { @@ -154,6 +160,23 @@ func TestRenderTopicList_Good(t *testing.T) { assert.Contains(t, out, "AVAILABLE HELP TOPICS") assert.Contains(t, out, "config - Configuration") assert.Contains(t, out, "Core is configured via environment variables.") + assert.Contains(t, out, "browse") + assert.Contains(t, out, "core help search ") +} + +func TestRenderTopic_Good(t *testing.T) { + out := captureOutput(t, func() { + renderTopic(&gohelp.Topic{ + ID: "config", + Title: "Configuration", + Content: "Core is configured via environment variables.", + }) + }) + + assert.Contains(t, out, "Configuration") + assert.Contains(t, out, "Core is configured via environment variables.") + assert.Contains(t, out, "browse") + assert.Contains(t, out, "core help search \"config\"") } func TestAddHelpCommands_Bad(t *testing.T) { @@ -189,16 +212,16 @@ func TestAddHelpCommands_Bad(t *testing.T) { root := &cli.Command{Use: "core"} AddHelpCommands(root) - cmd, _, err := root.Find([]string{"help", "search"}) - require.NoError(t, err) + cmd, _, findErr := root.Find([]string{"help", "search"}) + require.NoError(t, findErr) require.NotNil(t, cmd) - var err error + var runErr error out := captureOutput(t, func() { - err = cmd.RunE(cmd, nil) + runErr = cmd.RunE(cmd, nil) }) - require.Error(t, err) - assert.Contains(t, err.Error(), "help search query is required") + require.Error(t, runErr) + assert.Contains(t, runErr.Error(), "help search query is required") assert.Contains(t, out, "browse") assert.Contains(t, out, "core help") })