org/internal/ui/modes_test.go
Taybin Rutkin 18fc84646f
Some checks failed
Release / Create GitHub Release (push) Has been cancelled
Release / Build binaries (push) Has been cancelled
feat: add configurable done flag to TODO states (#21)
* feat: add configurable done flag to TODO states

* feat: stamp CLOSED for any configured done state

* feat: add DONE state option and done marker to settings

* chore: remove unused Item.CycleState

* chore: drop vestigial state constants, mention DONE add in settings help

* feat: add state form model and commit logic

* feat: wire state form update/view into settings dispatch

* feat: replace state add/edit with unified form, toggle done after creation

* consolidate AddState and AddDoneState

* add findState() helper
2026-07-22 20:49:33 +02:00

51 lines
1.5 KiB
Go

package ui
import (
"testing"
"time"
"github.com/rwejlgaard/org/internal/model"
)
func TestApplyClosedTransitionEntersDone(t *testing.T) {
now := time.Date(2026, 7, 21, 14, 30, 0, 0, time.UTC)
item := &model.Item{Notes: []string{"a note", "CLOSED: [old stamp]"}}
applyClosedTransition(item, false, true, now)
if item.Closed == nil || !item.Closed.Equal(now) {
t.Fatalf("expected Closed set to now, got %v", item.Closed)
}
if len(item.Notes) != 1 || item.Notes[0] != "a note" {
t.Fatalf("expected stale CLOSED note stripped, got %v", item.Notes)
}
}
func TestApplyClosedTransitionLeavesDone(t *testing.T) {
now := time.Now()
stamp := now
item := &model.Item{Closed: &stamp, Notes: []string{" CLOSED: [x]", "keep"}}
applyClosedTransition(item, true, false, now)
if item.Closed != nil {
t.Fatalf("expected Closed cleared, got %v", item.Closed)
}
if len(item.Notes) != 1 || item.Notes[0] != "keep" {
t.Fatalf("expected CLOSED note stripped, got %v", item.Notes)
}
}
func TestApplyClosedTransitionDoneToDoneUnchanged(t *testing.T) {
orig := time.Date(2026, 1, 1, 9, 0, 0, 0, time.UTC)
item := &model.Item{Closed: &orig, Notes: []string{"keep"}}
applyClosedTransition(item, true, true, time.Now())
if item.Closed == nil || !item.Closed.Equal(orig) {
t.Fatalf("done->done must keep original Closed, got %v", item.Closed)
}
if len(item.Notes) != 1 || item.Notes[0] != "keep" {
t.Fatalf("done->done must not touch notes, got %v", item.Notes)
}
}