package cli import ( "bytes" "io" "strings" "testing" ) func TestWriteActionResultWritesStatusBeforeJSON(t *testing.T) { var output bytes.Buffer err := writeActionResult(&output, &output, map[string]string{"status": "succeeded"}, outputOptions{}, func(w io.Writer) { _, _ = w.Write([]byte("status line\n")) }) if err != nil { t.Fatalf("writeActionResult() error = %v", err) } if !strings.HasPrefix(output.String(), "status line\n") { t.Fatalf("output = %q, want status before JSON", output.String()) } if !strings.Contains(output.String(), `"status": "succeeded"`) { t.Fatalf("output missing JSON result:\n%s", output.String()) } } func TestWriteActionResultQuietSuppressesOutput(t *testing.T) { var stdout bytes.Buffer var stderr bytes.Buffer err := writeActionResult(&stdout, &stderr, map[string]string{"status": "succeeded"}, outputOptions{Quiet: true}, func(w io.Writer) { _, _ = w.Write([]byte("status line\n")) }) if err != nil { t.Fatalf("writeActionResult() error = %v", err) } if stdout.Len() != 0 || stderr.Len() != 0 { t.Fatalf("stdout/stderr = %q/%q, want no output", stdout.String(), stderr.String()) } } func TestWriteActionResultToleratesNilStderr(t *testing.T) { var stdout bytes.Buffer statusCalled := false err := writeActionResult(&stdout, nil, map[string]string{"status": "succeeded"}, outputOptions{}, func(w io.Writer) { statusCalled = true _, _ = w.Write([]byte("status line\n")) }) if err != nil { t.Fatalf("writeActionResult() error = %v", err) } if statusCalled { t.Fatal("status writer was called with nil stderr") } if !strings.Contains(stdout.String(), `"status": "succeeded"`) { t.Fatalf("stdout missing JSON result:\n%s", stdout.String()) } }