98 lines
2.1 KiB
Go
98 lines
2.1 KiB
Go
package tui
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"superwork-tui/internal/logging"
|
|
)
|
|
|
|
func TestLogs_OpenSetsState(t *testing.T) {
|
|
m := New()
|
|
m2, _ := m.openLogs()
|
|
if m2.state != stateLogs {
|
|
t.Errorf("state = %v, want stateLogs", m2.state)
|
|
}
|
|
}
|
|
|
|
func TestLogs_EscReturnsToBoard(t *testing.T) {
|
|
m := New()
|
|
m.state = stateLogs
|
|
|
|
result, _ := m.handleLogsKey(keyMsg("esc"))
|
|
m2 := result.(Model)
|
|
if m2.state != stateLoaded {
|
|
t.Errorf("expected stateLoaded, got %v", m2.state)
|
|
}
|
|
}
|
|
|
|
func TestLogs_SnapshotRendered(t *testing.T) {
|
|
// Populate a fresh logger
|
|
lg := logging.NewLogger()
|
|
lg.Info("webhook", "server started on :8080")
|
|
lg.Warn("tui", "something odd")
|
|
lg.Error("gitea", "API error 404")
|
|
|
|
entries := lg.Snapshot()
|
|
|
|
m := New()
|
|
m.state = stateLogs
|
|
m.logEntries = entries
|
|
|
|
out := m.logsView()
|
|
|
|
for _, want := range []string{"webhook", "server started", "something odd", "API error 404", "INFO", "WARN", "ERROR"} {
|
|
if !strings.Contains(out, want) {
|
|
t.Errorf("logsView missing %q", want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLogs_EmptyShowsPlaceholder(t *testing.T) {
|
|
m := New()
|
|
m.state = stateLogs
|
|
m.logEntries = nil
|
|
|
|
out := m.logsView()
|
|
if !strings.Contains(out, "暂无日志") {
|
|
t.Errorf("logsView should show empty placeholder, got %q", out)
|
|
}
|
|
}
|
|
|
|
func TestLogs_SnapshotMsg_UpdatesEntries(t *testing.T) {
|
|
entries := []logging.Entry{
|
|
{Ts: 1000, Level: logging.LevelInfo, Source: "tui", Message: "hello"},
|
|
}
|
|
m := New()
|
|
m.state = stateLogs
|
|
|
|
result, _ := m.Update(logsSnapshotMsg{entries: entries})
|
|
m2 := result.(Model)
|
|
if len(m2.logEntries) != 1 {
|
|
t.Errorf("logEntries = %d, want 1", len(m2.logEntries))
|
|
}
|
|
if m2.logEntries[0].Message != "hello" {
|
|
t.Errorf("logEntries[0].Message = %q, want hello", m2.logEntries[0].Message)
|
|
}
|
|
}
|
|
|
|
func TestLogs_Tick_ReschedulesWhenStateLogs(t *testing.T) {
|
|
m := New()
|
|
m.state = stateLogs
|
|
|
|
_, cmd := m.Update(logsTickMsg{})
|
|
if cmd == nil {
|
|
t.Error("logsTickMsg when stateLogs should return a reschedule cmd")
|
|
}
|
|
}
|
|
|
|
func TestLogs_Tick_NoopWhenNotStateLogs(t *testing.T) {
|
|
m := New()
|
|
m.state = stateLoaded
|
|
|
|
_, cmd := m.Update(logsTickMsg{})
|
|
if cmd != nil {
|
|
t.Error("logsTickMsg when not stateLogs should not reschedule")
|
|
}
|
|
}
|