Skip to content

Commit b89493d

Browse files
improving error handling to flags.LatestFlag() (#198)
1 parent bb34ea3 commit b89493d

File tree

3 files changed

+37
-20
lines changed

3 files changed

+37
-20
lines changed

cli.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,10 @@ func runCLI(args []string) int {
130130
mainFlagSet.Usage()
131131
return 1
132132
case *latestFlag || *shortLatestFlag:
133-
_, _ = flags.LatestFlag()
133+
_, err := flags.LatestFlag()
134+
if err != nil {
135+
return 1
136+
}
134137
return 0
135138
case *currentVersionFlag || *shortCurrentVersionFlag:
136139
currentVersion()

flags/version.go

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,58 +16,62 @@ import (
1616
func LatestFlag() (string, error) {
1717
var output strings.Builder
1818

19-
latestRelease(&output)
19+
err := latestRelease(&output)
2020

2121
result := output.String()
2222
fmt.Print(result)
2323

24-
return result, nil
24+
return result, err
2525
}
2626

27-
func latestRelease(output *strings.Builder) {
27+
func latestRelease(output *strings.Builder) error {
2828
type Release struct {
2929
TagName string `json:"tag_name"`
3030
}
3131

32-
// Parse and validate the URL
3332
parsedURL, err := url.Parse("https://api.github.com/repos/digitalghost-dev/poke-cli/releases/latest")
3433
if err != nil {
35-
fmt.Fprintf(output, "invalid URL: %v\n", err)
36-
return
34+
err = fmt.Errorf("invalid URL: %w", err)
35+
fmt.Fprintln(output, err)
36+
return err
3737
}
3838

39-
// Implementing gosec error
4039
if flag.Lookup("test.v") == nil {
4140
if parsedURL.Scheme != "https" {
42-
fmt.Fprint(output, "only HTTPS URLs are allowed for security reasons\n")
43-
return
41+
err := fmt.Errorf("only HTTPS URLs are allowed for security reasons")
42+
fmt.Fprintln(output, err)
43+
return err
4444
}
4545
if parsedURL.Host != "api.github.com" {
46-
fmt.Fprint(output, "url host is not allowed\n")
47-
return
46+
err := fmt.Errorf("url host is not allowed")
47+
fmt.Fprintln(output, err)
48+
return err
4849
}
4950
}
5051

5152
response, err := http.Get(parsedURL.String())
5253
if err != nil {
53-
fmt.Fprintf(output, "error fetching data: %v\n", err)
54-
return
54+
err = fmt.Errorf("error fetching data: %w", err)
55+
fmt.Fprintln(output, err)
56+
return err
5557
}
5658
defer response.Body.Close()
5759

5860
body, err := io.ReadAll(response.Body)
5961
if err != nil {
60-
fmt.Fprintf(output, "error reading response body: %v\n", err)
61-
return
62+
err = fmt.Errorf("error reading response body: %w", err)
63+
fmt.Fprintln(output, err)
64+
return err
6265
}
6366

6467
var release Release
6568
if err := json.Unmarshal(body, &release); err != nil {
66-
fmt.Fprintf(output, "error unmarshalling JSON: %v\n", err)
67-
return
69+
err = fmt.Errorf("error unmarshalling JSON: %w", err)
70+
fmt.Fprintln(output, err)
71+
return err
6872
}
6973

70-
releaseString := "Latest available version:"
74+
releaseString := "Latest available release on GitHub:"
7175
releaseTag := styling.ColoredBullet.Render("") + release.TagName
7276

7377
docStyle := lipgloss.NewStyle().
@@ -80,4 +84,6 @@ func latestRelease(output *strings.Builder) {
8084

8185
output.WriteString(docStyle.Render(fullDoc))
8286
output.WriteString("\n")
87+
88+
return nil
8389
}

flags/version_test.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ func TestLatestVersionFlag(t *testing.T) {
3232
name: "Get latest version with short flag",
3333
args: []string{"-l"},
3434
expectedOutput: utils.LoadGolden(t, "main_latest_flag.golden"),
35+
expectedError: false,
3536
},
3637
{
3738
name: "Get latest version with long flag",
3839
args: []string{"--latest"},
3940
expectedOutput: utils.LoadGolden(t, "main_latest_flag.golden"),
41+
expectedError: false,
4042
},
4143
}
4244

@@ -46,9 +48,15 @@ func TestLatestVersionFlag(t *testing.T) {
4648
os.Args = append([]string{"poke-cli"}, tt.args...)
4749
defer func() { os.Args = originalArgs }()
4850

49-
output, _ := LatestFlag()
51+
output, err := LatestFlag()
5052
cleanOutput := styling.StripANSI(output)
5153

54+
if tt.expectedError {
55+
assert.Error(t, err, "Expected an error")
56+
} else {
57+
assert.NoError(t, err, "Expected no error")
58+
}
59+
5260
assert.Equal(t, tt.expectedOutput, cleanOutput, "Output should match expected")
5361
})
5462
}

0 commit comments

Comments
 (0)