package ui import "testing" // FormatRole — строка роли в диалоге (спец 12.12), pure-функция без Fyne. func TestFormatRole(t *testing.T) { if FormatRole("user") != "👤 " { t.Errorf("user: got %q, want «👤 »", FormatRole("user")) } if FormatRole("assistant") != "🤖 " { t.Errorf("assistant: got %q, want «🤖 »", FormatRole("assistant")) } if FormatRole("") != "🤖 " { t.Errorf("default: got %q, want «🤖 »", FormatRole("")) } } // NilChatPanel — no-op контракт (спец 12.8): безопасно для headless/тестов. func TestNilChatPanelNoop(t *testing.T) { p := NewNilChatPanel() c := NewCommands(nil) p.SetTranscript("история") p.Append("строка") p.Clear() p.SetCommands(c) p.SetBoundTask(7) } // Кнопка «Перезапустить» — полный аналог Telegram-команды /retry N: // в канал уходит ровно тот же текст, что при ручном вводе команды. func TestRetryButtonSubmitsSameCommandAsTelegram(t *testing.T) { var got []string c := NewCommands(func(text string) { got = append(got, text) }) c.Retry(42) if len(got) != 1 || got[0] != "/retry 42" { t.Fatalf("got %v, want [/retry 42]", got) } } // Свободная вкладка (без задачи): Retry(id<=0) — no-op, ничего не отправляется // (кнопка «Перезапустить» на такой вкладке неактивна). func TestRetryWithoutTaskIsNoop(t *testing.T) { var got []string c := NewCommands(func(text string) { got = append(got, text) }) c.Retry(0) c.Retry(-5) if len(got) != 0 { t.Fatalf("got %v, want nothing submitted", got) } }