131 lines
2.9 KiB
Go
131 lines
2.9 KiB
Go
package tui
|
|
|
|
import (
|
|
"testing"
|
|
|
|
tea "charm.land/bubbletea/v2"
|
|
"superwork-tui/internal/config"
|
|
)
|
|
|
|
func makeSettingsModel() Model {
|
|
m := Model{
|
|
state: stateLoaded,
|
|
width: 120,
|
|
height: 40,
|
|
}
|
|
return m
|
|
}
|
|
|
|
func sendCtrlS(m Model) (Model, tea.Cmd) {
|
|
next, cmd := m.Update(keyMsg("ctrl+s"))
|
|
return next.(Model), cmd
|
|
}
|
|
|
|
func TestSettingsPanelOpen(t *testing.T) {
|
|
m := makeSettingsModel()
|
|
m2, _ := sendKey(m, ",")
|
|
if m2.state != stateSettings {
|
|
t.Errorf("state = %v, want stateSettings after ','", m2.state)
|
|
}
|
|
if m2.settingsState == nil {
|
|
t.Error("settingsState should not be nil after opening")
|
|
}
|
|
}
|
|
|
|
func TestSettingsPanelEsc(t *testing.T) {
|
|
m := makeSettingsModel()
|
|
m, _ = sendKey(m, ",")
|
|
if m.state != stateSettings {
|
|
t.Fatal("precondition: should be stateSettings")
|
|
}
|
|
m2, _ := sendEsc(m)
|
|
if m2.state != stateLoaded {
|
|
t.Errorf("state = %v, want stateLoaded after esc", m2.state)
|
|
}
|
|
if m2.settingsState != nil {
|
|
t.Error("settingsState should be nil after esc (cancelled)")
|
|
}
|
|
}
|
|
|
|
func TestSettingsPanelSave_Valid(t *testing.T) {
|
|
m := makeSettingsModel()
|
|
m, _ = sendKey(m, ",")
|
|
if m.state != stateSettings {
|
|
t.Fatal("precondition: should be stateSettings")
|
|
}
|
|
|
|
saved := false
|
|
m.settingsState.saveFn = func(s *config.Settings) error {
|
|
saved = true
|
|
return nil
|
|
}
|
|
|
|
// Set a valid port in the webhook_port field (field index 0).
|
|
m.settingsState.fields[0].input.SetValue("8080")
|
|
|
|
m2, _ := sendCtrlS(m)
|
|
if !saved {
|
|
t.Error("saveFn should have been called")
|
|
}
|
|
if m2.state != stateLoaded {
|
|
t.Errorf("state = %v, want stateLoaded after save", m2.state)
|
|
}
|
|
if m2.settingsState != nil {
|
|
t.Error("settingsState should be nil after save")
|
|
}
|
|
}
|
|
|
|
func TestSettingsPanelSave_InvalidPort(t *testing.T) {
|
|
m := makeSettingsModel()
|
|
m, _ = sendKey(m, ",")
|
|
if m.state != stateSettings {
|
|
t.Fatal("precondition: should be stateSettings")
|
|
}
|
|
|
|
saved := false
|
|
m.settingsState.saveFn = func(s *config.Settings) error {
|
|
saved = true
|
|
return nil
|
|
}
|
|
|
|
m.settingsState.fields[0].input.SetValue("99999")
|
|
|
|
m2, _ := sendCtrlS(m)
|
|
if saved {
|
|
t.Error("saveFn should NOT have been called for invalid port")
|
|
}
|
|
if m2.state != stateSettings {
|
|
t.Errorf("state = %v, want stateSettings after invalid port", m2.state)
|
|
}
|
|
if m2.statusMsg == "" {
|
|
t.Error("statusMsg should contain error about invalid port")
|
|
}
|
|
}
|
|
|
|
func TestSettingsPanelSave_PortZero(t *testing.T) {
|
|
m := makeSettingsModel()
|
|
m, _ = sendKey(m, ",")
|
|
if m.state != stateSettings {
|
|
t.Fatal("precondition: should be stateSettings")
|
|
}
|
|
|
|
saved := false
|
|
m.settingsState.saveFn = func(s *config.Settings) error {
|
|
saved = true
|
|
return nil
|
|
}
|
|
|
|
m.settingsState.fields[0].input.SetValue("0")
|
|
|
|
m2, _ := sendCtrlS(m)
|
|
if saved {
|
|
t.Error("saveFn should NOT have been called for port 0")
|
|
}
|
|
if m2.state != stateSettings {
|
|
t.Errorf("state = %v, want stateSettings after port 0", m2.state)
|
|
}
|
|
if m2.statusMsg == "" {
|
|
t.Error("statusMsg should contain error about invalid port")
|
|
}
|
|
}
|