summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-06-23 06:30:49 +0300
committerPaul Buetow <paul@buetow.org>2026-06-23 06:30:49 +0300
commitcfedf447df07085eb5ef34a3dec9b28c5c4e2e69 (patch)
tree4596cd90f90b147dd4d2e4950eef2eb75080d3f5 /internal
parent03cff75ae50399c9f43abde178f43e281db6caad (diff)
Harden UI Taskwarrior fake for vq0
Diffstat (limited to 'internal')
-rw-r--r--internal/ui/table_test.go124
1 files changed, 122 insertions, 2 deletions
diff --git a/internal/ui/table_test.go b/internal/ui/table_test.go
index fdd2e9b..9e190b7 100644
--- a/internal/ui/table_test.go
+++ b/internal/ui/table_test.go
@@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"os"
+ "os/exec"
"path/filepath"
"reflect"
"regexp"
@@ -20,8 +21,6 @@ import (
)
type fakeTaskwarrior struct {
- task.Client
-
tasks []task.Task
exportFilters [][]string
addLines []string
@@ -45,6 +44,111 @@ func (f *fakeTaskwarrior) AddLineContext(_ context.Context, line string) error {
return nil
}
+func (f *fakeTaskwarrior) SortTasks(tasks []task.Task) {
+ task.SortTasks(tasks)
+}
+
+func (f *fakeTaskwarrior) TotalTasks(tasks []task.Task) int {
+ return task.TotalTasks(tasks)
+}
+
+func (f *fakeTaskwarrior) InProgressTasks(tasks []task.Task) int {
+ return task.InProgressTasks(tasks)
+}
+
+func (f *fakeTaskwarrior) DueTasks(tasks []task.Task, now time.Time) int {
+ return task.DueTasks(tasks, now)
+}
+
+func (f *fakeTaskwarrior) EditCmd(int) *exec.Cmd {
+ f.unexpected("EditCmd")
+ return nil
+}
+
+func (f *fakeTaskwarrior) RunShellLine(context.Context, string) (task.RunResult, error) {
+ f.unexpected("RunShellLine")
+ return task.RunResult{}, nil
+}
+
+func (f *fakeTaskwarrior) LoadCompletionSources(context.Context) task.CompletionSources {
+ f.unexpected("LoadCompletionSources")
+ return task.CompletionSources{}
+}
+
+func (f *fakeTaskwarrior) AnnotateContext(context.Context, int, string) error {
+ f.unexpected("AnnotateContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) ReplaceAnnotations(context.Context, int, string) error {
+ f.unexpected("ReplaceAnnotations")
+ return nil
+}
+
+func (f *fakeTaskwarrior) SetDescriptionContext(context.Context, int, string) error {
+ f.unexpected("SetDescriptionContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) AddTagsContext(context.Context, int, []string) error {
+ f.unexpected("AddTagsContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) RemoveTagsContext(context.Context, int, []string) error {
+ f.unexpected("RemoveTagsContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) SetDueDateContext(context.Context, int, string) error {
+ f.unexpected("SetDueDateContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) SetRecurrenceContext(context.Context, int, string) error {
+ f.unexpected("SetRecurrenceContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) SetProjectContext(context.Context, int, string) error {
+ f.unexpected("SetProjectContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) SetPriorityContext(context.Context, int, string) error {
+ f.unexpected("SetPriorityContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) StartContext(context.Context, int) error {
+ f.unexpected("StartContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) StopContext(context.Context, int) error {
+ f.unexpected("StopContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) DoneContext(context.Context, int) error {
+ f.unexpected("DoneContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) SetStatusUUIDContext(context.Context, string, string) error {
+ f.unexpected("SetStatusUUIDContext")
+ return nil
+}
+
+func (f *fakeTaskwarrior) RecurringSeries(context.Context, string) ([]task.Task, error) {
+ f.unexpected("RecurringSeries")
+ return nil, nil
+}
+
+func (f *fakeTaskwarrior) unexpected(method string) {
+ panic(fmt.Sprintf("unexpected fake Taskwarrior call: %s", method))
+}
+
func TestNewWithTaskwarriorUsesFakeForAddTask(t *testing.T) {
fake := &fakeTaskwarrior{
tasks: []task.Task{
@@ -83,6 +187,22 @@ func TestNewWithTaskwarriorUsesFakeForAddTask(t *testing.T) {
}
}
+func TestFakeTaskwarriorFailsFastOnUnexpectedCalls(t *testing.T) {
+ fake := &fakeTaskwarrior{}
+
+ defer func() {
+ r := recover()
+ if r == nil {
+ t.Fatalf("expected unexpected fake call to panic")
+ }
+ if got, want := fmt.Sprint(r), "unexpected fake Taskwarrior call: StartContext"; got != want {
+ t.Fatalf("panic = %q, want %q", got, want)
+ }
+ }()
+
+ _ = fake.StartContext(context.Background(), 1)
+}
+
func TestAnnotateHotkey(t *testing.T) {
tmp := t.TempDir()
taskPath := filepath.Join(tmp, "task")