diff --git a/internal/adapter/handlebars/handlebars_test.go b/internal/adapter/handlebars/handlebars_test.go index 373cd7a..db23147 100644 --- a/internal/adapter/handlebars/handlebars_test.go +++ b/internal/adapter/handlebars/handlebars_test.go @@ -238,11 +238,116 @@ func TestFormatDateHelper(t *testing.T) { testString(t, "{{format-date now 'timestamp'}}", context, "200911172034") testString(t, "{{format-date now 'timestamp-unix'}}", context, "1258490098") testString(t, "{{format-date now 'cust: %Y-%m'}}", context, "cust: 2009-11") +} + +func TestFormatDateHelperElapsedYear(t *testing.T) { year := time.Now().UTC().Year() - 14 - context = map[string]interface{}{"now": time.Date(year, 11, 17, 20, 34, 58, 651387237, time.UTC)} + context := map[string]interface{}{"now": time.Date(year, 11, 17, 20, 34, 58, 651387237, time.UTC)} testString(t, "{{format-date now 'elapsed'}}", context, "14 years ago") } +func TestFormatDateHelperElapsedViaTimeMultiplication(t *testing.T) { + // test for time being provided in via multiplications on seconds, minutes + // and hours, as expected by github.com/rvflash/elapsed + cases := []struct { + elapsed time.Duration + want string + }{ + { + elapsed: -12 * time.Second, + want: "not yet", + }, + { + elapsed: time.Second, + want: "just now", + }, + { + elapsed: 59 * time.Second, + want: "just now", + }, + { + elapsed: 60 * time.Second, + want: "1 minute ago", + }, + { + elapsed: 1 * time.Minute, + want: "1 minute ago", + }, + { + elapsed: 2 * time.Minute, + want: "2 minutes ago", + }, + { + elapsed: 62 * time.Minute, + want: "1 hour ago", + }, + { + elapsed: time.Hour, + want: "1 hour ago", + }, + { + elapsed: 2 * time.Hour, + want: "2 hours ago", + }, + { + elapsed: 24 * time.Hour, + want: "yesterday", + }, + { + elapsed: 4 * 24 * time.Hour, + want: "4 days ago", + }, + { + elapsed: 7 * 24 * time.Hour, + want: "1 week ago", + }, + { + elapsed: 8 * 24 * time.Hour, + want: "2 weeks ago", + }, + { + elapsed: 18 * 24 * time.Hour, + want: "3 weeks ago", + }, + { + elapsed: 30 * 24 * time.Hour, + want: "1 month ago", + }, + { + elapsed: 31 * 24 * time.Hour, + want: "2 months ago", + }, + { + elapsed: 60 * 24 * time.Hour, + want: "2 months ago", + }, + { + elapsed: 61 * 24 * time.Hour, + want: "3 months ago", + }, + { + elapsed: 330 * 24 * time.Hour, + want: "11 months ago", + }, + { + elapsed: 331 * 24 * time.Hour, + want: "1 year ago", + }, + { + elapsed: 366 * 24 * time.Hour, + want: "2 years ago", + }, + } + + for i, tc := range cases { + t.Run(fmt.Sprintf("%d_%s", i, tc.want), func(t *testing.T) { + templateContext := map[string]interface{}{"now": time.Now().Add(-tc.elapsed)} + + testString(t, "{{format-date now 'elapsed'}}", templateContext, tc.want) + }) + } +} + func TestDateHelper(t *testing.T) { context := map[string]interface{}{"now": time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)} testString(t, "{{format-date (date \"2009-11-17T20:34:58\") 'timestamp'}}", context, "200911172034")