wails-release/internal/runner/runner_test.go
Leon Mika 2350046601 Add Runner abstraction with Real and Fake implementations
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 09:45:26 +10:00

61 lines
1.6 KiB
Go

package runner_test
import (
"context"
"errors"
"strings"
"testing"
"github.com/leonmika/wails-release/internal/runner"
)
func TestRealRunner_RunsCommandAndReturnsCombinedOutput(t *testing.T) {
r := runner.Real{}
out, err := r.Run(context.Background(), runner.Spec{Name: "echo", Args: []string{"hello"}})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !strings.Contains(string(out), "hello") {
t.Fatalf("output %q does not contain 'hello'", out)
}
}
func TestRealRunner_NonZeroExitReturnsError(t *testing.T) {
r := runner.Real{}
_, err := r.Run(context.Background(), runner.Spec{Name: "false"})
if err == nil {
t.Fatal("expected error from `false`, got nil")
}
}
func TestFakeRunner_RecordsCallsAndReturnsConfiguredResult(t *testing.T) {
f := &runner.Fake{}
f.On("greet", []string{"alice"}).Return([]byte("hi alice"), nil)
f.On("fail", nil).Return(nil, errors.New("boom"))
out, err := f.Run(context.Background(), runner.Spec{Name: "greet", Args: []string{"alice"}})
if err != nil || string(out) != "hi alice" {
t.Fatalf("unexpected: out=%q err=%v", out, err)
}
_, err = f.Run(context.Background(), runner.Spec{Name: "fail"})
if err == nil {
t.Fatal("expected error from configured fake")
}
if len(f.Calls) != 2 {
t.Fatalf("expected 2 calls, got %d", len(f.Calls))
}
if f.Calls[0].Name != "greet" || f.Calls[0].Args[0] != "alice" {
t.Fatalf("unexpected first call: %+v", f.Calls[0])
}
}
func TestFakeRunner_UnconfiguredCallFailsLoudly(t *testing.T) {
f := &runner.Fake{}
_, err := f.Run(context.Background(), runner.Spec{Name: "unknown"})
if err == nil {
t.Fatal("expected error for unconfigured call")
}
}