1
0
mirror of https://github.com/tw93/Mole.git synced 2026-03-22 20:15:07 +00:00

fix(status): prevent duplicate mole rendering in error state

- renderHeader now returns empty string as second return value when
  error message is present, avoiding duplicate mole in main.go View
- Add unit tests to prevent regression

Fixes P2 issue: view.go (line 184) + main.go (line 160)
This commit is contained in:
tw93
2026-02-21 20:21:45 +08:00
parent 68b0b601a4
commit 7648bd9d12
2 changed files with 32 additions and 1 deletions

View File

@@ -181,7 +181,7 @@ func renderHeader(m MetricsSnapshot, errMsg string, animFrame int, termWidth int
if mole == "" { if mole == "" {
return lipgloss.JoinVertical(lipgloss.Left, headerLine, "", dangerStyle.Render("ERROR: "+errMsg)), "" return lipgloss.JoinVertical(lipgloss.Left, headerLine, "", dangerStyle.Render("ERROR: "+errMsg)), ""
} }
return lipgloss.JoinVertical(lipgloss.Left, headerLine, "", mole, dangerStyle.Render("ERROR: "+errMsg)), mole return lipgloss.JoinVertical(lipgloss.Left, headerLine, "", mole, dangerStyle.Render("ERROR: "+errMsg)), ""
} }
if mole == "" { if mole == "" {
return headerLine, "" return headerLine, ""

View File

@@ -920,6 +920,37 @@ func TestSparkline(t *testing.T) {
} }
} }
func TestRenderHeaderErrorReturnsMoleOnce(t *testing.T) {
header, mole := renderHeader(MetricsSnapshot{}, "boom", 0, 120, false)
if mole != "" {
t.Fatalf("renderHeader() mole return should be empty on error to avoid duplicate render, got %q", mole)
}
if !strings.Contains(header, "ERROR: boom") {
t.Fatalf("renderHeader() missing error text, got %q", header)
}
if strings.Count(header, "/\\_/\\") != 1 {
t.Fatalf("renderHeader() should contain one mole frame in error state, got %d", strings.Count(header, "/\\_/\\"))
}
}
func TestModelViewErrorRendersSingleMole(t *testing.T) {
m := model{
width: 120,
height: 40,
ready: true,
metrics: MetricsSnapshot{},
errMessage: "boom",
animFrame: 0,
catHidden: false,
}
view := m.View()
if strings.Count(view, "/\\_/\\") != 1 {
t.Fatalf("model.View() should render one mole frame in error state, got %d", strings.Count(view, "/\\_/\\"))
}
}
func stripANSI(s string) string { func stripANSI(s string) string {
var result strings.Builder var result strings.Builder
i := 0 i := 0