wails-release/internal/runner/runner_test.go

107 lines
2.9 KiB
Go
Raw Permalink Normal View History

package runner_test
import (
"context"
"errors"
"strings"
"testing"
2026-05-02 01:47:13 +00:00
"lmika.dev/actions/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")
}
}
func TestRealRunner_StdinIsPipedToCommand(t *testing.T) {
r := runner.Real{}
out, err := r.Run(context.Background(), runner.Spec{
Name: "cat",
Stdin: []byte("piped-payload"),
})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !strings.Contains(string(out), "piped-payload") {
t.Fatalf("output %q does not contain piped payload", out)
}
}
func TestRealRunner_DirSetsWorkingDirectory(t *testing.T) {
dir := t.TempDir()
r := runner.Real{}
out, err := r.Run(context.Background(), runner.Spec{
Name: "pwd",
Dir: dir,
})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
// macOS resolves /var/folders/... → /private/var/folders/... so just
// match the trailing tempdir name.
if !strings.Contains(string(out), dir[strings.LastIndex(dir, "/"):]) {
t.Fatalf("pwd output %q does not contain %q", out, dir)
}
}
func TestRealRunner_EnvReplacesProcessEnv(t *testing.T) {
r := runner.Real{}
out, err := r.Run(context.Background(), runner.Spec{
Name: "sh",
Args: []string{"-c", "echo $WAILS_TEST"},
Env: []string{"WAILS_TEST=hello-from-spec-env"},
})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !strings.Contains(string(out), "hello-from-spec-env") {
t.Fatalf("output %q does not contain expected env value", out)
}
}