Files
ratatoskr-go/internal/ui/task_list_panel_test.go
ki.sagidullin 6274aad369 refactor(ui): вынести панель «Список задач» (TaskListPanel) из монолита окна
Спеца 12.10: интерфейс + Nil + TaskTitle в internal/ui/task_list_panel.go,
Fyne-реализация в internal/ui/desktop/task_list_panel.go. Состояние выбора
живёт в окне; выбранная строка подсвечивается (Select/Unselect).
2026-08-20 23:31:08 +05:00

40 lines
1.4 KiB
Go

package ui
import (
"strings"
"testing"
"github.com/kamelion/ratatoskr-go/internal/storage"
)
// TaskTitle — строка в списке задач (спец 12.10), pure-функция без Fyne.
func TestTaskTitle(t *testing.T) {
empty := storage.Task{Status: storage.StatusReady}
got := TaskTitle(empty)
if !strings.Contains(got, "(без названия)") {
t.Errorf("пустое название: got %q, want «(без названия)»", got)
}
if !strings.Contains(got, string(storage.StatusReady)) {
t.Errorf("строка должна содержать статус, got %q", got)
}
named := storage.Task{Title: "Тест", Status: storage.StatusRunning}
got = TaskTitle(named)
if !strings.Contains(got, "Тест") {
t.Errorf("название не попало в строку: %q", got)
}
if !strings.Contains(got, string(storage.StatusRunning)) {
t.Errorf("статус не попал в строку: %q", got)
}
}
// NilTaskListPanel — no-op контракт (спец 12.8): безопасно для headless/тестов.
func TestNilTaskListPanelNoop(t *testing.T) {
p := NewNilTaskListPanel()
p.SetTasks([]storage.Task{{ID: 1}})
p.Select(1)
var got []int64
p.OnSelect(func(id int64) { got = append(got, id) })
// Nil не вызывает колбэки — нет виджета, но вызовы безопасны.
}