package list
import (
"testing"
tea "github.com/charmbracelet/bubbletea"
"mercemay.top/httptap/internal/parser"
"mercemay.top/httptap/internal/tui/theme"
)
func sampleModel(n int) *Model {
m := New(theme.Default())
m.SetSize(80, 10)
for i := 0; i < n; i++ {
m.Append(parser.Message{StartLine: "GET /" + string(rune('a'+i)) + " HTTP/1.1"})
}
return &m
}
func TestListAppendAndLen(t *testing.T) {
m := sampleModel(3)
if m.Len() != 3 {
t.Fatalf("Len = %d", m.Len())
}
}
func TestListCursorNavigation(t *testing.T) {
m := sampleModel(3)
press := func(k string) {
nm, _ := m.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune(k)})
*m = nm
}
press("j")
if m.cursor != 1 {
t.Errorf("cursor = %d after j", m.cursor)
}
press("G")
if m.cursor != 2 {
t.Errorf("cursor = %d after G", m.cursor)
}
press("g")
if m.cursor != 0 {
t.Errorf("cursor = %d after g", m.cursor)
}
}
func TestListFilter(t *testing.T) {
m := sampleModel(3)
m.SetFilter("path=/b")
if m.Len() != 1 {
t.Fatalf("after filter Len = %d", m.Len())
}
sel, ok := m.Selected()
if !ok || sel.StartLine != "GET /b HTTP/1.1" {
t.Errorf("selected = %+v", sel)
}
m.SetFilter("")
if m.Len() != 3 {
t.Errorf("after clear Len = %d", m.Len())
}
}
func TestListViewEmpty(t *testing.T) {
m := New(theme.Default())
m.SetSize(40, 5)
if got := m.View(); got == "" {
t.Error("empty-state view should not be blank")
}
}