54 lines
1.7 KiB
Go
54 lines
1.7 KiB
Go
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)
|
|
}
|
|
} |