From 31ebd26f9e0c857bb8a3f2740a3d6c8240fb0e51 Mon Sep 17 00:00:00 2001 From: Erik Winter Date: Mon, 6 Jun 2022 10:21:26 +0200 Subject: [PATCH] human date strings --- internal/task/date.go | 15 ++++++++----- internal/task/date_test.go | 46 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/internal/task/date.go b/internal/task/date.go index 238e0f7..5aeb254 100644 --- a/internal/task/date.go +++ b/internal/task/date.go @@ -185,15 +185,18 @@ func (d Date) String() string { } func (d Date) Human() string { - if d.t.IsZero() { + switch { + case d.IsZero(): return "-" - } - - if Today.Add(7).After(d) { + case d.Equal(Today): + return "today" + case d.Equal(Today.Add(1)): + return "tomorrow" + case d.After(Today) && Today.Add(8).After(d): return strings.ToLower(d.t.Format("Monday")) + default: + return strings.ToLower(d.t.Format(DateFormat)) } - - return strings.ToLower(d.t.Format(DateFormat)) } func (d Date) IsZero() bool { diff --git a/internal/task/date_test.go b/internal/task/date_test.go index 2c0be11..36e1e95 100644 --- a/internal/task/date_test.go +++ b/internal/task/date_test.go @@ -283,6 +283,52 @@ func TestDateString(t *testing.T) { } } +func TestDateHuman(t *testing.T) { + monday := task.Today.Add(1) + for { + if monday.Weekday() == time.Monday { + break + } + monday = monday.Add(1) + } + + for _, tc := range []struct { + name string + date task.Date + exp string + }{ + { + name: "zero", + date: task.NewDate(0, 0, 0), + exp: "-", + }, + { + name: "weekday", + date: monday, + exp: "monday", + }, + { + name: "default", + date: task.NewDate(2020, 1, 1), + exp: "2020-01-01 (wednesday)", + }, + { + name: "today", + date: task.Today, + exp: "today", + }, + { + name: "tomorrow", + date: task.Today.Add(1), + exp: "tomorrow", + }, + } { + t.Run(tc.name, func(t *testing.T) { + test.Equals(t, tc.exp, tc.date.Human()) + }) + } +} + func TestDateIsZero(t *testing.T) { test.Equals(t, true, task.Date{}.IsZero()) test.Equals(t, false, task.NewDate(2021, 6, 24).IsZero())