feat(tui): add Bubble Tea dashboard model for Apply phase
This commit is contained in:
56
internal/tui/dashboard/model_test.go
Normal file
56
internal/tui/dashboard/model_test.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package dashboard
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/MDietermann/ArduinoArchSetup/internal/engine"
|
||||
"github.com/MDietermann/ArduinoArchSetup/internal/tui"
|
||||
)
|
||||
|
||||
func TestProgressUpdatesRow(t *testing.T) {
|
||||
m := NewModel([]string{"a"}, map[string]string{"a": "Alpha"})
|
||||
m.Update(tui.ProgressMsg{ModuleID: "a", Current: 3, Total: 10, Message: "doing"})
|
||||
if r := m.rowIndex["a"]; r.Current != 3 || r.Total != 10 || r.LastMsg != "doing" {
|
||||
t.Fatalf("row state wrong: %+v", r)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLogAppendedBounded(t *testing.T) {
|
||||
m := NewModel([]string{"a"}, nil)
|
||||
for i := 0; i < 300; i++ {
|
||||
m.Update(tui.LogMsg{ModuleID: "a", Line: "x"})
|
||||
}
|
||||
if got := len(m.rowIndex["a"].LogTail); got != 200 {
|
||||
t.Fatalf("log tail = %d, want 200", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDoneMsgFlipsIcons(t *testing.T) {
|
||||
m := NewModel([]string{"ok", "bad", "skip"}, nil)
|
||||
m.Update(DoneMsg{Summary: engine.Summary{Results: []engine.ModuleResult{
|
||||
{ID: "ok", Status: engine.StatusSucceeded},
|
||||
{ID: "bad", Status: engine.StatusFailed, Err: errors.New("boom")},
|
||||
{ID: "skip", Status: engine.StatusSkipped},
|
||||
}}})
|
||||
if m.rowIndex["ok"].StatusIcon != "✓" {
|
||||
t.Errorf("ok icon = %q", m.rowIndex["ok"].StatusIcon)
|
||||
}
|
||||
if m.rowIndex["bad"].StatusIcon != "✗" {
|
||||
t.Errorf("bad icon = %q", m.rowIndex["bad"].StatusIcon)
|
||||
}
|
||||
if m.rowIndex["skip"].StatusIcon != "⊘" {
|
||||
t.Errorf("skip icon = %q", m.rowIndex["skip"].StatusIcon)
|
||||
}
|
||||
}
|
||||
|
||||
func TestViewMentionsModules(t *testing.T) {
|
||||
m := NewModel([]string{"alpha", "bravo"}, nil)
|
||||
out := m.View()
|
||||
for _, want := range []string{"alpha", "bravo", "archduino install"} {
|
||||
if !strings.Contains(out, want) {
|
||||
t.Errorf("view missing %q:\n%s", want, out)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user