57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|