package tui import ( "git.zb-server.de/Sebi/ssh-netbox-wrapper/internal/netbox" "git.zb-server.de/Sebi/ssh-netbox-wrapper/internal/notes" tea "github.com/charmbracelet/bubbletea" "testing" ) func TestTypingEDoesNotOpenConnectionEditor(t *testing.T) { m := New(nil, nil, "") m.updateListItems([]netbox.HostEntry{{Name: "server"}}) m.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'e'}}) if m.editMode || m.input.Value() != "e" { t.Fatal("e intercepted") } } func TestStaleResultsAndDebounceAreIgnored(t *testing.T) { m := New(nil, nil, "") m.input.SetValue("web") m.seq = 3 m.Update(searchResultMsg{query: "web", seq: 1, entries: []netbox.HostEntry{{Name: "old"}}}) if len(m.list.Items()) != 0 { t.Fatal("stale result accepted") } _, cmd := m.Update(debounceMsg{query: "w", seq: 1}) if cmd != nil { t.Fatal("stale debounce accepted") } m.Update(searchResultMsg{query: "web", seq: 3, entries: []netbox.HostEntry{{Name: "web01"}}}) if len(m.list.Items()) != 1 { t.Fatal("current result ignored") } } func TestEditPreservesDefaultAndExplicitPort22(t *testing.T) { m := New(nil, nil, "", 2222) item := hostItem{name: "web01", ip: "10.0.0.1"} m.openEdit(item) if m.editInput.Value() != "web01:2222" { t.Fatal(m.editInput.Value()) } m.editInput.SetValue("ops@web01:22") selected := m.buildSelected(item) if selected.Port != "22" || selected.User != "ops" { t.Fatalf("bad override: %+v", selected) } } func TestFailedNoteLoadCannotBeSaved(t *testing.T) { m := New(nil, nil, "") m.SetNotes(¬es.Service{Dir: t.TempDir()}) m.noteMode = true _, cmd := m.Update(tea.KeyMsg{Type: tea.KeyCtrlS}) if cmd != nil { t.Fatal("save allowed before successful load") } } func TestConnectionEditorKeepsOriginalHost(t *testing.T) { m := New(nil, nil, "admin") first := hostItem{name: "first", ip: "10.0.0.1"} m.openEdit(first) m.updateListItems([]netbox.HostEntry{{Name: "second", PrimaryIP4: "10.0.0.2"}}) m.Update(tea.KeyMsg{Type: tea.KeyEnter}) if m.selected == nil || m.selected.Name != "first" { t.Fatalf("edited host changed: %+v", m.selected) } }