Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion internal/ui/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,9 @@ func (a App) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
a.err = msg.err
a.spinner, _ = a.spinner.Stop()
a.flushBufferedLines()
a.errorDisplay = a.errorDisplay.Show(output.ErrorEvent{Title: msg.err.Error()})
if !output.IsSilent(msg.err) {
a.errorDisplay = a.errorDisplay.Show(output.ErrorEvent{Title: msg.err.Error()})
}
return a, tea.Quit
default:
if line, ok := output.FormatEventLine(msg); ok {
Expand Down
41 changes: 41 additions & 0 deletions internal/ui/app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ui

import (
"context"
"fmt"
"strings"
"testing"
"time"
Expand Down Expand Up @@ -201,6 +202,46 @@ func TestAppErrorEventStopsSpinner(t *testing.T) {
}
}

func TestAppSilentErrorDoesNotOverwriteErrorDisplay(t *testing.T) {
t.Parallel()

app := NewApp("dev", "", "", nil)

// Simulate EmitUnhealthyError: sink emits a nice ErrorEvent first.
model, _ := app.Update(output.ErrorEvent{Title: "Docker is not available"})
app = model.(App)

// Simulate runErrMsg arriving with a SilentError (already displayed).
silentErr := output.NewSilentError(fmt.Errorf("runtime not healthy: cannot connect to Docker daemon"))
model, _ = app.Update(runErrMsg{err: silentErr})
app = model.(App)

view := app.errorDisplay.View(200)
if !strings.Contains(view, "Docker is not available") {
t.Fatalf("expected original error to be preserved, got: %q", view)
}
if strings.Contains(view, "runtime not healthy") {
t.Fatalf("expected silent error not to overwrite display, got: %q", view)
}
}

func TestAppNonSilentErrorShowsInErrorDisplay(t *testing.T) {
t.Parallel()

app := NewApp("dev", "", "", nil)

model, _ := app.Update(runErrMsg{err: fmt.Errorf("something unexpected")})
app = model.(App)

if !app.errorDisplay.Visible() {
t.Fatal("expected error display to be visible for non-silent error")
}
view := app.errorDisplay.View(200)
if !strings.Contains(view, "something unexpected") {
t.Fatalf("expected error title in display, got: %q", view)
}
}

func TestAppEnterPrefersExplicitEnterOption(t *testing.T) {
t.Parallel()

Expand Down