Skip to content

Commit 6df0ee5

Browse files
committed
fix: give helpful errors on missing positional arguments
give some helpful hints if a user does not path the appropriate number of position arguments to the CLI.
1 parent cce777b commit 6df0ee5

3 files changed

Lines changed: 51 additions & 4 deletions

File tree

internal/service/service.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ func NewService(serviceDefinition ServiceDefinition, headers map[string]string)
2828

2929
func (s *Service) ExecuteCommand(args []string) (string, error) {
3030
if len(args) == 0 || args[0] == "--help" {
31-
return s.ListResources(), nil
31+
return s.PrintHelp(), nil
3232
}
3333
resource := args[0]
3434
r, err := s.GetResource(resource)
3535
if err != nil {
36-
return "", fmt.Errorf("%v\n%v", err, s.ListResources())
36+
return "", fmt.Errorf("%v\n%v", err, s.PrintHelp())
3737
}
3838
req, err := r.ExecuteCommand(args)
3939
if err != nil {
@@ -82,14 +82,16 @@ func (s *Service) doRequest(r *http.Request) (string, error) {
8282
return prettyJSON.String(), nil
8383
}
8484

85-
func (s *Service) ListResources() string {
85+
func (s *Service) PrintHelp() string {
8686
var resources []string
8787
for singular := range s.Resources {
8888
resources = append(resources, singular)
8989
}
9090
sort.Strings(resources)
9191

9292
var output strings.Builder
93+
output.WriteString("Usage: [resource] [method] [flags]\n\n")
94+
output.WriteString("Command group for " + s.ServerURL + "\n\n")
9395
output.WriteString("Available resources:\n")
9496
for _, r := range resources {
9597
output.WriteString(fmt.Sprintf(" - %s\n", r))

internal/service/service_definition.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ func GetServiceDefinition(api *openapi.OpenAPI, pathPrefix string) (*ServiceDefi
131131
func (s *ServiceDefinition) GetResource(resource string) (*Resource, error) {
132132
r, ok := (*s).Resources[resource]
133133
if !ok {
134-
return nil, fmt.Errorf("resource %q not found", resource)
134+
return nil, fmt.Errorf("Resource %s not found.", resource)
135135
}
136136
return r, nil
137137
}

internal/service/service_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,46 @@
11
package service
2+
3+
import (
4+
"testing"
5+
)
6+
7+
func TestService_ExecuteCommand_ListResources(t *testing.T) {
8+
// Test setup
9+
svc := NewService(ServiceDefinition{
10+
ServerURL: "http://test.com",
11+
Resources: map[string]*Resource{
12+
"user": {},
13+
"post": {},
14+
"comment": {},
15+
},
16+
}, nil)
17+
18+
tests := []struct {
19+
name string
20+
args []string
21+
expected string
22+
}{
23+
{
24+
name: "no arguments",
25+
args: []string{},
26+
expected: "Available resources:\n - comment\n - post\n - user\n",
27+
},
28+
{
29+
name: "help flag",
30+
args: []string{"--help"},
31+
expected: "Available resources:\n - comment\n - post\n - user\n",
32+
},
33+
}
34+
35+
for _, tt := range tests {
36+
t.Run(tt.name, func(t *testing.T) {
37+
result, err := svc.ExecuteCommand(tt.args)
38+
if err != nil {
39+
t.Errorf("ExecuteCommand() error = %v, expected no error", err)
40+
}
41+
if result != tt.expected {
42+
t.Errorf("ExecuteCommand() = %v, expected %v", result, tt.expected)
43+
}
44+
})
45+
}
46+
}

0 commit comments

Comments
 (0)