mirror of
https://github.com/RWejlgaard/org.git
synced 2026-09-01 17:05:34 +00:00
* 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
51 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|