Skip to content

Commit fae77e9

Browse files
committed
added few tests
1 parent d21cbba commit fae77e9

2 files changed

Lines changed: 69 additions & 5 deletions

File tree

cli/root.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,19 +140,28 @@ func Execute(version, commit, date, amplitudeKey string) {
140140
}
141141
}
142142

143-
// commandPathFromArgs extracts the subcommand path from os.Args, stripping
144-
// the binary name and any flags so the tracked path is e.g. "query list"
145-
// rather than "query list --limit 10".
143+
// commandPathFromArgs extracts the subcommand path from os.Args, skipping
144+
// the binary name, flags, and flag values so the tracked path is e.g.
145+
// "query list" even when invoked as "dune --api-key KEY query list --limit 10".
146146
func commandPathFromArgs(args []string) string {
147147
var parts []string
148+
skipNext := false
148149
for _, a := range args[1:] { // skip binary name
150+
if skipNext {
151+
skipNext = false
152+
continue
153+
}
149154
if strings.HasPrefix(a, "-") {
150-
break
155+
// --flag=value is self-contained; --flag value needs to skip the next arg.
156+
if !strings.Contains(a, "=") {
157+
skipNext = true
158+
}
159+
continue
151160
}
152161
parts = append(parts, a)
153162
}
154163
if len(parts) == 0 {
155164
return "unknown"
156165
}
157166
return strings.Join(parts, " ")
158-
}
167+
}

cli/root_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,58 @@ func TestPersistentPreRunEConfigFallback(t *testing.T) {
6969
err := rootCmd.PersistentPreRunE(cmd, nil)
7070
require.NoError(t, err)
7171
}
72+
73+
func TestCommandPathFromArgs(t *testing.T) {
74+
tests := []struct {
75+
name string
76+
args []string
77+
want string
78+
}{
79+
{
80+
name: "simple subcommand",
81+
args: []string{"dune", "query", "list"},
82+
want: "query list",
83+
},
84+
{
85+
name: "root flag before subcommand",
86+
args: []string{"dune", "--api-key", "KEY", "query", "list"},
87+
want: "query list",
88+
},
89+
{
90+
name: "flag with equals syntax",
91+
args: []string{"dune", "--api-key=KEY", "query", "list"},
92+
want: "query list",
93+
},
94+
{
95+
name: "trailing flags after subcommand",
96+
args: []string{"dune", "query", "list", "--limit", "10"},
97+
want: "query list",
98+
},
99+
{
100+
name: "flags before and after subcommand",
101+
args: []string{"dune", "--api-key", "KEY", "query", "list", "--limit", "10"},
102+
want: "query list",
103+
},
104+
{
105+
name: "binary only",
106+
args: []string{"dune"},
107+
want: "unknown",
108+
},
109+
{
110+
name: "only flags",
111+
args: []string{"dune", "--help"},
112+
want: "unknown",
113+
},
114+
{
115+
name: "single subcommand",
116+
args: []string{"dune", "auth"},
117+
want: "auth",
118+
},
119+
}
120+
121+
for _, tt := range tests {
122+
t.Run(tt.name, func(t *testing.T) {
123+
assert.Equal(t, tt.want, commandPathFromArgs(tt.args))
124+
})
125+
}
126+
}

0 commit comments

Comments
 (0)