package router import ( "testing" "time" ) // The measured defect: at 14:41 a half-past-twelve reminder was set for 12:30 // the same day, two hours gone (V-544). func TestRollPastClockForward(t *testing.T) { now := time.Date(2026, 8, 5, 14, 41, 0, 0, time.Local) day := func(d, h, m int) time.Time { return time.Date(2026, 8, d, h, m, 0, 0, time.Local) } for _, tc := range []struct { name string in time.Time text string want time.Time }{ {"a bare clock already past rolls to tomorrow", day(5, 12, 30), "напомни в 12:30 пообедать", day(6, 12, 30)}, {"a bare clock still to come stays", day(5, 19, 30), "напомни в 19:30 позвонить", day(5, 19, 30)}, {"a named day keeps its day", day(5, 12, 30), "напомни сегодня в 12:30 пообедать", day(5, 12, 30)}, {"a weekday keeps its day", day(3, 12, 30), "напомни в понедельник в 12:30", day(3, 12, 30)}, {"a date keeps its day", day(3, 12, 30), "напомни 3 августа в 12:30", day(3, 12, 30)}, {"past by more than a day is not a clock on today", day(4, 12, 30), "напомни в 12:30 пообедать", day(4, 12, 30)}, } { if got := rollPastClockForward(tc.in, now, tc.text); !got.Equal(tc.want) { t.Errorf("%s: got %v, want %v", tc.name, got.Format("02 Jan 15:04"), tc.want.Format("02 Jan 15:04")) } } } func TestNamesADay(t *testing.T) { for _, s := range []string{ "напомни сегодня в 12:30 пообедать", "напомни завтра выпить таблетку", "напомни в пятницу забрать заказ", "напомни 10 июля позвонить", } { if !NamesADay(s) { t.Errorf("NamesADay(%q) = false; the day is named", s) } } for _, s := range []string{ "напомни в 12:30 пообедать", "напомни без четверти восемь выходить", "напомни через двадцать минут", "", } { if NamesADay(s) { t.Errorf("NamesADay(%q) = true; no day is named", s) } } }