summaryrefslogtreecommitdiff
path: root/internal/hexaiaction/tui_test.go
blob: f467e530c1193a5cfa34c6b94029d064737c82fb (plain)
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
package hexaiaction

import (
	"testing"

	tea "github.com/charmbracelet/bubbletea"
)

func TestHandleKey_EscSkips(t *testing.T) {
	m := newModel()
	nm, _ := handleKey(m, tea.KeyMsg{Type: tea.KeyEsc})
	got, ok := nm.(model)
	if !ok || !got.done || got.chosen != ActionSkip {
		t.Fatalf("esc should skip: ok=%v done=%v chosen=%v", ok, got.done, got.chosen)
	}
}

func TestHandleKey_QuickHotkey(t *testing.T) {
	m := newModel()
	nm, _ := handleKey(m, tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'r'}})
	got := nm.(model)
	if !got.done || got.chosen != ActionRewrite {
		t.Fatalf("r should choose rewrite: done=%v chosen=%v", got.done, got.chosen)
	}
}

func TestHandleKey_JumpEndWithG(t *testing.T) {
	m := newModel()
	// raw 'G' rune should jump to end (special cased)
	nm, _ := handleKey(m, tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'G'}})
	got := nm.(model)
	if idx := got.list.Index(); idx != len(got.list.Items())-1 {
		t.Fatalf("G should jump to end, index=%d", idx)
	}
}

func TestItemMethods(t *testing.T) {
	it := item{title: "T", desc: "D", kind: ActionRewrite, hotkey: 'r'}
	if it.Title() != "T" || it.Description() != "D" || it.FilterValue() != "T" {
		t.Fatalf("item methods wrong: %+v", it)
	}
}

func TestModelInitAndViewAndUpdate(t *testing.T) {
	m := newModel()
	if m.Init() != nil {
		t.Fatalf("Init should return nil cmd")
	}
	if v := m.View(); v == "" {
		t.Fatalf("View should not be empty before done")
	}
	// Window resize
	nm, _ := m.Update(tea.WindowSizeMsg{Width: 80, Height: 24})
	if _, ok := nm.(model); !ok {
		t.Fatalf("expected model after WindowSizeMsg")
	}
}