fix: address code review feedback
- Fix GetRaw() error handling to check status before reading body - Add context.Context support to all HTTP requests - Use consistent capitalized error messages - Update copyright year from 2024 to 2025 - Add unit tests for modules/api/client.go - Add tests for runs, jobs, logs commands 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// Copyright 2025 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package actions
|
||||
@@ -33,12 +33,12 @@ func RunActionJobs(ctx stdctx.Context, cmd *cli.Command) error {
|
||||
c.Ensure(context.CtxRequirement{RemoteRepo: true})
|
||||
|
||||
if cmd.Args().Len() < 1 {
|
||||
return fmt.Errorf("run ID is required")
|
||||
return fmt.Errorf("Run ID is required")
|
||||
}
|
||||
|
||||
runID, err := utils.ArgToIndex(cmd.Args().First())
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid run ID: %w", err)
|
||||
return fmt.Errorf("Invalid run ID: %w", err)
|
||||
}
|
||||
|
||||
client := api.NewClient(c.Login)
|
||||
@@ -47,7 +47,7 @@ func RunActionJobs(ctx stdctx.Context, cmd *cli.Command) error {
|
||||
c.Owner, c.Repo, runID)
|
||||
|
||||
var jobs api.ActionJobList
|
||||
if _, err := client.Get(path, &jobs); err != nil {
|
||||
if _, err := client.Get(ctx, path, &jobs); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
62
cmd/actions/jobs_test.go
Normal file
62
cmd/actions/jobs_test.go
Normal file
@@ -0,0 +1,62 @@
|
||||
// Copyright 2025 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package actions
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestJobsCommandFlags(t *testing.T) {
|
||||
cmd := CmdActionsJobs
|
||||
|
||||
// Test that required flags exist
|
||||
expectedFlags := []string{"output", "remote", "login", "repo"}
|
||||
|
||||
for _, flagName := range expectedFlags {
|
||||
found := false
|
||||
for _, flag := range cmd.Flags {
|
||||
for _, name := range flag.Names() {
|
||||
if name == flagName {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if found {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
t.Errorf("Expected flag %s not found in CmdActionsJobs", flagName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestJobsCommandProperties(t *testing.T) {
|
||||
cmd := CmdActionsJobs
|
||||
|
||||
if cmd.Name != "jobs" {
|
||||
t.Errorf("Expected command name 'jobs', got %s", cmd.Name)
|
||||
}
|
||||
|
||||
if len(cmd.Aliases) == 0 || cmd.Aliases[0] != "job" {
|
||||
t.Errorf("Expected alias 'job' for jobs command")
|
||||
}
|
||||
|
||||
if cmd.Usage == "" {
|
||||
t.Error("Jobs command should have usage text")
|
||||
}
|
||||
|
||||
if cmd.Description == "" {
|
||||
t.Error("Jobs command should have description")
|
||||
}
|
||||
|
||||
if cmd.ArgsUsage != "<run-id>" {
|
||||
t.Errorf("Expected ArgsUsage '<run-id>', got %s", cmd.ArgsUsage)
|
||||
}
|
||||
|
||||
if cmd.Action == nil {
|
||||
t.Error("Jobs command should have an action")
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// Copyright 2025 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package actions
|
||||
@@ -32,12 +32,12 @@ func RunActionLogs(ctx stdctx.Context, cmd *cli.Command) error {
|
||||
c.Ensure(context.CtxRequirement{RemoteRepo: true})
|
||||
|
||||
if cmd.Args().Len() < 1 {
|
||||
return fmt.Errorf("job ID is required")
|
||||
return fmt.Errorf("Job ID is required")
|
||||
}
|
||||
|
||||
jobID, err := utils.ArgToIndex(cmd.Args().First())
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid job ID: %w", err)
|
||||
return fmt.Errorf("Invalid job ID: %w", err)
|
||||
}
|
||||
|
||||
client := api.NewClient(c.Login)
|
||||
@@ -45,7 +45,7 @@ func RunActionLogs(ctx stdctx.Context, cmd *cli.Command) error {
|
||||
path := fmt.Sprintf("/repos/%s/%s/actions/jobs/%d/logs",
|
||||
c.Owner, c.Repo, jobID)
|
||||
|
||||
logs, err := client.GetRaw(path)
|
||||
logs, err := client.GetRaw(ctx, path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
62
cmd/actions/logs_test.go
Normal file
62
cmd/actions/logs_test.go
Normal file
@@ -0,0 +1,62 @@
|
||||
// Copyright 2025 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package actions
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestLogsCommandFlags(t *testing.T) {
|
||||
cmd := CmdActionsLogs
|
||||
|
||||
// Test that required flags exist
|
||||
expectedFlags := []string{"output", "remote", "login", "repo"}
|
||||
|
||||
for _, flagName := range expectedFlags {
|
||||
found := false
|
||||
for _, flag := range cmd.Flags {
|
||||
for _, name := range flag.Names() {
|
||||
if name == flagName {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if found {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
t.Errorf("Expected flag %s not found in CmdActionsLogs", flagName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestLogsCommandProperties(t *testing.T) {
|
||||
cmd := CmdActionsLogs
|
||||
|
||||
if cmd.Name != "logs" {
|
||||
t.Errorf("Expected command name 'logs', got %s", cmd.Name)
|
||||
}
|
||||
|
||||
if len(cmd.Aliases) == 0 || cmd.Aliases[0] != "log" {
|
||||
t.Errorf("Expected alias 'log' for logs command")
|
||||
}
|
||||
|
||||
if cmd.Usage == "" {
|
||||
t.Error("Logs command should have usage text")
|
||||
}
|
||||
|
||||
if cmd.Description == "" {
|
||||
t.Error("Logs command should have description")
|
||||
}
|
||||
|
||||
if cmd.ArgsUsage != "<job-id>" {
|
||||
t.Errorf("Expected ArgsUsage '<job-id>', got %s", cmd.ArgsUsage)
|
||||
}
|
||||
|
||||
if cmd.Action == nil {
|
||||
t.Error("Logs command should have an action")
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// Copyright 2025 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package actions
|
||||
@@ -41,7 +41,7 @@ func RunActionRuns(ctx stdctx.Context, cmd *cli.Command) error {
|
||||
flags.GetListOptions().PageSize)
|
||||
|
||||
var runs api.ActionRunList
|
||||
if _, err := client.Get(path, &runs); err != nil {
|
||||
if _, err := client.Get(ctx, path, &runs); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
58
cmd/actions/runs_test.go
Normal file
58
cmd/actions/runs_test.go
Normal file
@@ -0,0 +1,58 @@
|
||||
// Copyright 2025 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package actions
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRunsCommandFlags(t *testing.T) {
|
||||
cmd := CmdActionsRuns
|
||||
|
||||
// Test that required flags exist
|
||||
expectedFlags := []string{"page", "limit", "output", "remote", "login", "repo"}
|
||||
|
||||
for _, flagName := range expectedFlags {
|
||||
found := false
|
||||
for _, flag := range cmd.Flags {
|
||||
for _, name := range flag.Names() {
|
||||
if name == flagName {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if found {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
t.Errorf("Expected flag %s not found in CmdActionsRuns", flagName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunsCommandProperties(t *testing.T) {
|
||||
cmd := CmdActionsRuns
|
||||
|
||||
if cmd.Name != "runs" {
|
||||
t.Errorf("Expected command name 'runs', got %s", cmd.Name)
|
||||
}
|
||||
|
||||
if len(cmd.Aliases) == 0 || cmd.Aliases[0] != "run" {
|
||||
t.Errorf("Expected alias 'run' for runs command")
|
||||
}
|
||||
|
||||
if cmd.Usage == "" {
|
||||
t.Error("Runs command should have usage text")
|
||||
}
|
||||
|
||||
if cmd.Description == "" {
|
||||
t.Error("Runs command should have description")
|
||||
}
|
||||
|
||||
if cmd.Action == nil {
|
||||
t.Error("Runs command should have an action")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user