1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package tui
import (
"testing"
"adammathes.com/neko/models/feed"
"adammathes.com/neko/models/item"
tea "github.com/charmbracelet/bubbletea"
)
func TestNewModel(t *testing.T) {
m := NewModel()
if m.state != viewFeeds {
t.Errorf("Expected initial state viewFeeds, got %v", m.state)
}
}
func TestUpdateWindowSizeNoPanic(t *testing.T) {
m := NewModel()
// This should not panic even if lists are empty
msg := tea.WindowSizeMsg{Width: 80, Height: 24}
newModel, _ := m.Update(msg)
tm := newModel.(Model)
if tm.width != 80 || tm.height != 24 {
t.Errorf("Expected size 80x24, got %dx%d", tm.width, tm.height)
}
}
func TestStateTransitions(t *testing.T) {
m := NewModel()
// Feed loaded
feeds := []*feed.Feed{{Id: 1, Title: "Test Feed"}}
m2, _ := m.Update(feedsMsg(feeds))
tm2 := m2.(Model)
if len(tm2.feeds) != 1 {
t.Fatal("Expected 1 feed")
}
// Items loaded
items := []*item.Item{{Id: 1, Title: "Test Item", Description: "Desc"}}
tm2.selectedFeed = feeds[0] // Simulate selection
m3, _ := tm2.Update(itemsMsg(items))
tm3 := m3.(Model)
if tm3.state != viewItems {
t.Errorf("Expected state viewItems, got %v", tm3.state)
}
if len(tm3.items) != 1 {
t.Fatal("Expected 1 item")
}
// Back to feeds
m4, _ := tm3.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune("q")})
tm4 := m4.(Model)
if tm4.state != viewFeeds {
t.Errorf("Expected back to viewFeeds, got %v", tm4.state)
}
}
|