Files
MujicaUI/project_knowledge_panel_test.go
T
2026-10-05 14:24:42 -04:00

111 lines
2.9 KiB
Go

package mujica
import (
"testing"
"github.com/egoist/mygo/ui"
)
func knowledgeFiles() []KnowledgeFile {
return []KnowledgeFile{{ID: "1", Name: "etiquette.pdf", Tokens: 120000}, {ID: "2", Name: "menu.md", Tokens: 50000}}
}
func TestProjectKnowledgePanelAddRemove(t *testing.T) {
files := knowledgeFiles()
adds := 0
tt := chatTester(420, 400, func(c *ui.Context) {
v := ProjectKnowledgePanel(c, files, ProjectKnowledgePanelOptions{Capacity: 400000})
if v.Add {
adds++
}
if v.Removed != "" {
for i, f := range files {
if f.ID == v.Removed {
files = append(files[:i:i], files[i+1:]...)
break
}
}
}
})
if !tt.HasText("170000 of 400000 tokens (42%)") {
t.Fatalf("texts %q", tt.Texts())
}
_ = tt.Click("Add files")
if adds != 1 {
t.Fatalf("adds %d", adds)
}
if err := tt.Click("Remove menu.md"); err != nil {
t.Fatal(err)
}
if len(files) != 1 || files[0].ID != "1" || !tt.HasText("120000 of 400000 tokens (30%)") {
t.Fatalf("files %v texts %q", files, tt.Texts())
}
}
func TestProjectKnowledgePanelCapacityStates(t *testing.T) {
for _, tc := range []struct {
capacity int
note string
}{{200000, "Nearly full"}, {150000, "Over capacity"}} {
tt := chatTester(420, 400, func(c *ui.Context) {
ProjectKnowledgePanel(c, knowledgeFiles(), ProjectKnowledgePanelOptions{Capacity: tc.capacity})
})
if !tt.HasText(tc.note) {
t.Errorf("%d: texts %q", tc.capacity, tt.Texts())
}
}
tt := chatTester(420, 400, func(c *ui.Context) {
ProjectKnowledgePanel(c, nil, ProjectKnowledgePanelOptions{Capacity: 10})
})
if !tt.HasText("No files yet") {
t.Fatal("empty state missing")
}
}
func TestProjectKnowledgePanelDisabledAndKeys(t *testing.T) {
removed := ""
tt := chatTester(420, 400, func(c *ui.Context) {
if v := ProjectKnowledgePanel(c, knowledgeFiles(), ProjectKnowledgePanelOptions{Capacity: 400000, Disabled: true}); v.Removed != "" {
removed = v.Removed
}
})
_ = tt.Click("Remove menu.md")
tt.Key(0, ui.KeyTab)
tt.Key(0, ui.KeyEnter)
if removed != "" {
t.Fatalf("disabled panel removed %q", removed)
}
tt = chatTester(420, 400, func(c *ui.Context) {
if v := ProjectKnowledgePanel(c, knowledgeFiles(), ProjectKnowledgePanelOptions{Capacity: 400000}); v.Removed != "" {
removed = v.Removed
}
})
tt.Key(0, ui.KeyTab)
tt.Key(0, ui.KeyTab)
tt.Key(0, ui.KeyDown)
tt.Key(0, ui.KeyEnter)
if removed != "2" {
t.Fatalf("keys removed %q", removed)
}
}
func TestProjectKnowledgePanelRejectsBadCapacity(t *testing.T) {
defer func() {
if recover() == nil {
t.Fatal("no panic")
}
}()
ui.Render(func(c *ui.Context) {
Use(c, Settings{})
ProjectKnowledgePanel(c, nil, ProjectKnowledgePanelOptions{})
}, 100, 100, 1)
}
func TestProjectKnowledgePanelSnapshot(t *testing.T) {
snapshot(t, "project_knowledge_panel", 420, 240, func(c *ui.Context) {
ui.Column(c).Padding(16).Children(func() {
ProjectKnowledgePanel(c, knowledgeFiles(), ProjectKnowledgePanelOptions{Capacity: 200000})
})
})
}