summaryrefslogtreecommitdiff
path: root/internal/askcli/command_write_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-27 07:21:49 +0200
committerPaul Buetow <paul@buetow.org>2026-03-27 07:21:49 +0200
commita9d00ab5e5b4ff3d08f71f24f00d6b3bc4579d02 (patch)
tree194b1de831a8ee6bcbb0b47caa595f3c69d88c6e /internal/askcli/command_write_test.go
parentd3586ad2b2b140435055c349393154ae7cfffaea (diff)
refactor: extract runSingleTaskCommand helper (715cc01f-1630-4d11-b6fd-18d64a8c2035)
Diffstat (limited to 'internal/askcli/command_write_test.go')
-rw-r--r--internal/askcli/command_write_test.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/internal/askcli/command_write_test.go b/internal/askcli/command_write_test.go
index e6b6dd2..17935e3 100644
--- a/internal/askcli/command_write_test.go
+++ b/internal/askcli/command_write_test.go
@@ -3,6 +3,7 @@ package askcli
import (
"bytes"
"context"
+ "errors"
"io"
"path/filepath"
"strings"
@@ -421,3 +422,70 @@ func TestAllWriteHandlers_AcceptUUIDPrefix(t *testing.T) {
})
}
}
+
+func TestRunSingleTaskCommand_ResolveErrorWritesInfoError(t *testing.T) {
+ d := NewDispatcher(&spyRunner{runFn: func(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) {
+ t.Fatal("runFn should not be called when selector resolution fails")
+ return 0, nil
+ }})
+
+ var stdout, stderr bytes.Buffer
+ code, err := d.runSingleTaskCommand(
+ context.Background(),
+ "123",
+ &stdout,
+ &stderr,
+ func(resolved resolvedTaskSelector) []string {
+ t.Fatal("buildArgs should not be called when selector resolution fails")
+ return nil
+ },
+ )
+ if code != 1 {
+ t.Fatalf("runSingleTaskCommand code = %d, want 1", code)
+ }
+ if err != nil {
+ t.Fatalf("runSingleTaskCommand returned error: %v", err)
+ }
+ if stdout.Len() != 0 {
+ t.Fatalf("stdout = %q, want empty output", stdout.String())
+ }
+ if !strings.Contains(stderr.String(), "use a task alias ID or UUID") {
+ t.Fatalf("stderr = %q, want numeric task ID error", stderr.String())
+ }
+}
+
+func TestRunSingleTaskCommand_RunFailureDoesNotWriteSuccess(t *testing.T) {
+ useIsolatedTaskAliasCache(t)
+
+ runErr := errors.New("runner failed")
+ d := NewDispatcher(&spyRunner{runFn: func(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) (int, error) {
+ if len(args) == 2 && args[0] == "uuid:test-uuid" && args[1] == "export" {
+ io.WriteString(stdout, `[{"uuid":"test-uuid","description":"Task","status":"pending","priority":"M","tags":[],"urgency":0,"depends":[]}]`)
+ return 0, nil
+ }
+ return 2, runErr
+ }})
+
+ var stdout, stderr bytes.Buffer
+ code, err := d.runSingleTaskCommand(
+ context.Background(),
+ "test-uuid",
+ &stdout,
+ &stderr,
+ func(resolved resolvedTaskSelector) []string {
+ return []string{"uuid:" + resolved.UUID, "start"}
+ },
+ )
+ if code != 2 {
+ t.Fatalf("runSingleTaskCommand code = %d, want 2", code)
+ }
+ if !errors.Is(err, runErr) {
+ t.Fatalf("runSingleTaskCommand error = %v, want %v", err, runErr)
+ }
+ if stdout.Len() != 0 {
+ t.Fatalf("stdout = %q, want empty output", stdout.String())
+ }
+ if stderr.Len() != 0 {
+ t.Fatalf("stderr = %q, want empty output", stderr.String())
+ }
+}