2ce6622055
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---
42 lines
805 B
Go
42 lines
805 B
Go
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)
|
|
}
|
|
}
|