Skip to content

Commit 7a2b2b9

Browse files
takes all inputs
1 parent 35153a9 commit 7a2b2b9

2 files changed

Lines changed: 27 additions & 4 deletions

File tree

cmd/docs/docs.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package docs
1717
import (
1818
"fmt"
1919
"net/url"
20+
"strings"
2021

2122
"github.com/slackapi/slack-cli/internal/shared"
2223
"github.com/slackapi/slack-cli/internal/slackerror"
@@ -65,16 +66,18 @@ func runDocsCommand(clients *shared.ClientFactory, cmd *cobra.Command, args []st
6566

6667
// Validate: if there are arguments, --search flag must be used
6768
if len(args) > 0 && !cmd.Flags().Changed("search") {
69+
query := strings.Join(args, " ")
6870
return slackerror.New(slackerror.ErrDocsSearchFlagRequired).WithRemediation(
6971
"Use --search flag: %s",
70-
style.Commandf(fmt.Sprintf("docs --search \"%s\"", args[0]), false),
72+
style.Commandf(fmt.Sprintf("docs --search \"%s\"", query), false),
7173
)
7274
}
7375

7476
if cmd.Flags().Changed("search") {
7577
if len(args) > 0 {
76-
// --search "query" (space-separated) - use the first arg as the query
77-
encodedQuery := url.QueryEscape(args[0])
78+
// --search "query" (space-separated) - join all args as the query
79+
query := strings.Join(args, " ")
80+
encodedQuery := url.QueryEscape(query)
7881
docsURL = fmt.Sprintf("https://docs.slack.dev/search/?q=%s", encodedQuery)
7982
sectionText = "Docs Search"
8083
} else {
@@ -101,7 +104,7 @@ func runDocsCommand(clients *shared.ClientFactory, cmd *cobra.Command, args []st
101104
if cmd.Flags().Changed("search") {
102105
traceValue := ""
103106
if len(args) > 0 {
104-
traceValue = args[0] // For space-separated syntax
107+
traceValue = strings.Join(args, " ")
105108
}
106109
clients.IO.PrintTrace(ctx, slacktrace.DocsSearchSuccess, traceValue)
107110
} else {

cmd/docs/docs_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ func Test_Docs_DocsCommand(t *testing.T) {
4848
cm.Browser.AssertNotCalled(t, "OpenURL")
4949
},
5050
},
51+
"fails when multiple positional arguments provided without search flag": {
52+
CmdArgs: []string{"webhook", "send", "message"},
53+
ExpectedErrorStrings: []string{"Invalid docs command. Did you mean to search?"},
54+
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {
55+
// No browser calls should be made when command fails
56+
cm.Browser.AssertNotCalled(t, "OpenURL")
57+
},
58+
},
5159
"opens docs with search query using space syntax": {
5260
CmdArgs: []string{"--search", "messaging"},
5361
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {
@@ -60,6 +68,18 @@ func Test_Docs_DocsCommand(t *testing.T) {
6068
"https://docs.slack.dev/search/?q=messaging",
6169
},
6270
},
71+
"handles search with multiple arguments": {
72+
CmdArgs: []string{"--search", "Block", "Kit", "Element"},
73+
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {
74+
expectedURL := "https://docs.slack.dev/search/?q=Block+Kit+Element"
75+
cm.Browser.AssertCalled(t, "OpenURL", expectedURL)
76+
cm.IO.AssertCalled(t, "PrintTrace", mock.Anything, slacktrace.DocsSearchSuccess, mock.Anything)
77+
},
78+
ExpectedOutputs: []string{
79+
"Docs Search",
80+
"https://docs.slack.dev/search/?q=Block+Kit+Element",
81+
},
82+
},
6383
"handles search query with multiple words": {
6484
CmdArgs: []string{"--search", "socket mode"},
6585
ExpectedAsserts: func(t *testing.T, ctx context.Context, cm *shared.ClientsMock) {

0 commit comments

Comments
 (0)