2815adee03
Item carried only Key, FactKey and Label, so every checklist entry was implicitly required and behaviour 1 of #280 could not hold at all. It was not thin config — there was no field to set. Item.Optional, `"optional": true` in the routine config, default false, so a routine written before today behaves exactly as it did. Due now fires on a missing required item and not on an optional one, and the optional stragglers still travel in Missing so the one message per day per routine can name them after the required ones, in softer words. Evidence, the window and the day plan treat both kinds alike. A missing optional item is still missing — it just does not earn a nudge, because a checklist where everything is mandatory is one he learns to ignore.
40 lines
1.4 KiB
Go
40 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/kami/maven/internal/morning"
|
|
)
|
|
|
|
// TestMorningNudgeBodySeparatesOptional — the one message a routine is allowed
|
|
// per day says what was not done, then what he could still do (Vikunja #473).
|
|
func TestMorningNudgeBodySeparatesOptional(t *testing.T) {
|
|
cand := morning.Candidate{
|
|
Routine: morning.Routine{Name: "утро"},
|
|
Missing: []morning.Item{
|
|
{Key: "meds", Label: "таблетки"},
|
|
{Key: "stretch", Label: "растяжка", Optional: true},
|
|
},
|
|
}
|
|
body := morningNudgeBody(cand)
|
|
if !strings.Contains(body, "не сделано — таблетки") {
|
|
t.Fatalf("the required item must be named as not done: %q", body)
|
|
}
|
|
if !strings.Contains(body, "если будет время — растяжка") {
|
|
t.Fatalf("the optional item must read softer: %q", body)
|
|
}
|
|
if strings.Contains(body, "не сделано — таблетки, растяжка") {
|
|
t.Fatalf("optional must not be folded into the required list: %q", body)
|
|
}
|
|
|
|
// Nothing optional missing: the sentence is what it always was.
|
|
only := morning.Candidate{
|
|
Routine: morning.Routine{Name: "утро"},
|
|
Missing: []morning.Item{{Key: "meds", Label: "таблетки"}},
|
|
}
|
|
if got, want := morningNudgeBody(only), "утро: не сделано — таблетки"; got != want {
|
|
t.Fatalf("morningNudgeBody = %q, want %q", got, want)
|
|
}
|
|
}
|