test(cmd/orca): smoke test ≥50% toe-hold, main→run refactor (T01.11, REQ-057)
Refactor main() into run() int (main calls os.Exit(run())) so the test can exercise the CLI directly without os.Exit terminating the test process. Add main_test.go with two cases: run() success path (version command → exit 0) and run() error path (job run with missing spec → exit 1, stderr contains "error:"). Low-effort toe-hold per RESEARCH §1.1/§1.4 — do not over-invest in glue-code coverage. Coverage: go test -cover ./cmd/orca → 80.0% (was 0%, target ≥50%). go test -race PASS. ---ci--- project: orca phase: 1 milestone: v0.8 status: execute ---/ci---
This commit is contained in:
+9
-1
@@ -8,8 +8,16 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
os.Exit(run())
|
||||
}
|
||||
|
||||
// run executes the orca CLI and returns the process exit code. It is
|
||||
// extracted from main so tests can exercise the error path without
|
||||
// os.Exit terminating the test process.
|
||||
func run() int {
|
||||
if err := cli.Execute(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "error: %v\n", err)
|
||||
os.Exit(1)
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRunSuccess(t *testing.T) {
|
||||
orig := os.Args
|
||||
t.Cleanup(func() { os.Args = orig })
|
||||
os.Args = []string{"orca", "version"}
|
||||
if code := run(); code != 0 {
|
||||
t.Errorf("run() = %d, want 0", code)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunError(t *testing.T) {
|
||||
origArgs := os.Args
|
||||
t.Cleanup(func() { os.Args = origArgs })
|
||||
os.Args = []string{"orca", "job", "run", "/nonexistent/spec.hcl"}
|
||||
|
||||
r, w, err := os.Pipe()
|
||||
if err != nil {
|
||||
t.Fatalf("pipe: %v", err)
|
||||
}
|
||||
origStderr := os.Stderr
|
||||
os.Stderr = w
|
||||
t.Cleanup(func() { os.Stderr = origStderr })
|
||||
|
||||
code := run()
|
||||
w.Close()
|
||||
out, _ := io.ReadAll(r)
|
||||
if code != 1 {
|
||||
t.Errorf("run() = %d, want 1", code)
|
||||
}
|
||||
if !strings.Contains(string(out), "error:") {
|
||||
t.Errorf("stderr missing 'error:' prefix: %s", out)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user